我需要一些來自Infinispan 8+的功能。因此,我用最新的Infinispan pom更新了我公司的應用程序pom.xml。Jboss 6.4 Infinispan 8.2和JGroups - ClassNotFoundException
這很簡單,但應用程序使用jgroups(或默認配置/ default-jgroups-udp.xml中的默認配置 - 此位置與以前版本的infinispan不同)。默認版本有一些參數(以及來自Jgroups版本3.6的XSD) - 所以我也將jgroups碰到了3.6.8.Final,因爲它看起來是預期版本(並且版本不會在默認配置中抱怨未知參數在Infinispan的8.2)
所以POM是以下幾點:
<dependency>
<groupId>org.jgroups</groupId>
<artifactId>jgroups</artifactId>
<version>3.6.8.Final</version>
</dependency>
<dependency>
<groupId>org.infinispan</groupId>
<artifactId>infinispan-core</artifactId>
<version>8.2.0.Final</version>
</dependency>
反正 - 此應用程序開始利用彈簧的引導與碼頭沒有任何問題。我很確定它會在任何應用程序服務器上啓動。然後我不得不在JBoss 6.4上運行它。 在那裏,我得到了一些涉及類jboss.as異常在部署過程中(這是一種意外):
Caused by: org.infinispan.commons.CacheException: Unable to invoke method public void org.infinispan.remoting.transport.jgroups.JGroupsTransport.start() on object of type JGroupsTransport
at org.infinispan.commons.util.ReflectionUtil.invokeAccessibly(ReflectionUtil.java:172)
at org.infinispan.factories.AbstractComponentRegistry$PrioritizedMethod.invoke(AbstractComponentRegistry.java:859)
at org.infinispan.factories.AbstractComponentRegistry.invokeStartMethods(AbstractComponentRegistry.java:628)
at org.infinispan.factories.AbstractComponentRegistry.internalStart(AbstractComponentRegistry.java:617)
at org.infinispan.factories.AbstractComponentRegistry.start(AbstractComponentRegistry.java:542)
at org.infinispan.factories.GlobalComponentRegistry.start(GlobalComponentRegistry.java:234)
... 141 more
Caused by: java.lang.ExceptionInInitializerError
at org.jgroups.conf.XmlConfigurator.<clinit>(XmlConfigurator.java:35)
at org.jgroups.conf.ConfiguratorFactory.getStackConfigurator(ConfiguratorFactory.java:62)
at org.jgroups.JChannel.<init>(JChannel.java:129)
at org.infinispan.remoting.transport.jgroups.JGroupsTransport.buildChannel(JGroupsTransport.java:419)
at org.infinispan.remoting.transport.jgroups.JGroupsTransport.initChannel(JGroupsTransport.java:320)
at org.infinispan.remoting.transport.jgroups.JGroupsTransport.initChannelAndRPCDispatcher(JGroupsTransport.java:366)
at org.infinispan.remoting.transport.jgroups.JGroupsTransport.start(JGroupsTransport.java:190)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.infinispan.commons.util.ReflectionUtil.invokeAccessibly(ReflectionUtil.java:168)
... 146 more
Caused by: java.lang.RuntimeException: java.lang.ClassNotFoundException: org.jboss.as.clustering.jgroups.LogFactory from [Module "deployment.mymodule-5.0.0.0-SNAPSHOT.ear.appName.war:main" from Service Module Loader]
at org.jgroups.logging.LogFactory.<clinit>(LogFactory.java:31)
... 158 more
Caused by: java.lang.ClassNotFoundException: org.jboss.as.clustering.jgroups.LogFactory from [Module "deployment.mymodule-5.0.0.0-SNAPSHOT.ear.appName.war:main" from Service Module Loader]
at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:213)
at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:459)
at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:408)
at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:389)
at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:134)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at org.jgroups.logging.LogFactory.<clinit>(LogFactory.java:28)
... 158 more
我的猜測是,org.jgroups.logging.LogFactory莫名其妙地發現,在運行上一個Jboss並試圖使用org.jboss.as.clustering.jgroups.LogFactory但這個版本的Jboss沒有一個。 (服務器目錄EAP-6.4.0 \ modules \ system \ layers \ base \ org \ jgroups \ main包含jgroups版本3.2.X)。
在Jboss 6.4中是否有任何使用jgroups版本(以及Infinispan 8.2)的解決方案?
這是(應用程序)ear文件,所以我可以操縱jboss-deployment-structure.xml文件,但到目前爲止,我只是排除了Jboss原始jgroups,這並沒有幫助。
<exclusions>
<module name="org.jgroups"/>
</exclusions>
JGroups的如下屬性'JGroups的設置簡單。 logging.log_factory_class' - 你可以將它設置爲'org.jgroups.logging.Log4J2LogImpl'嗎? (這將禁止集成到EAP日誌記錄中並記錄到有哪些log4j2 impl,但這將是一個起點......) –
事實上,問題似乎是該屬性設置了服務器以用於EAP內部版本的JGroups,但是它被應用程序版本的JGroups抓住了。然後,應用程序JGroups嘗試加載不在其類路徑中的EAP-JGroups集成類。所以,你也可以添加'org.jgroups.extension'模塊作爲依賴,但在這裏沒有保證。 –
@Flavius 好吧我能夠將屬性更改爲Log4J2LogImpl,但(我們正在使用SL4J)我得到了 java.lang.ClassNotFoundException:org.apache.logging.log4j.Level。我們正在使用log4j-over-slf4j,所以這應該是可用的。我打印出(在代碼中)加載類(級別)的Jar - 原來是EAP-6.4.0/modules/system/layers/base/org/jboss/log4j/logmanager/main/log4j-jboss- logmanager-1.1.1.Final-redhat-1.jar。排除模塊org.jboss.log4j.logmanager不會更改它。 – maslan