Red Hat Bugzilla – Bug 1266831
Spring package split into remote and embedded
Last modified: 2016-02-01 06:24:11 EST
Description of problem:
Connected issue: https://bugzilla.redhat.com/show_bug.cgi?id=1264840
Currently Spring package contains references to both Remote and Embedded JDG classes. This causes many problems like BZ1264840. The best way to deal with it is to split Uber Jar Spring package into two pieces - remote and embedded.
Looks like class org.infinispan.commons.logging.BasicLogFactory is loaded twice from two packages, once from infinispan-commons (transitive dependency of infinispan-spring4-remtote) and once from infinispan-remote. The class in infinispan-remote is modified by prefixing org.jboss.logging.BasicLogger with "infinispan." -> infinispan.org.jboss.logging.BasicLogger.
So when spring is loading ConsistentHashV1 from hotrod client, it hits the line where:
private static final BasicLogger log = BasicLogFactory.getLog(ConsistentHashV1.class);
The problem is that it picks up BasicLoggerFactory from infinispan-commons, which returns org.jboss.logging.BasicLogger, but the hotrod client is from infinispan-remote, which means it requires infinispan.org.jboss.logging.BasicLogger. If you exclude infinispan-commons from infinispan-spring4-remote, it works. If you move the dependency declaration of infinispan-spring4-remote in pom.xml below infinispan-remote, it works as well, my guess is that spring picks up the class that is added on the class path first.
So while I think I understand exactly what is going on, I am not yet sure how to fix this, therefore moving target milestone to CR1.
Changing severity to low since there is an easy work around:
Switch the order of dependencies (uber jar needs to go first - classpath is being scanned from left to right):