2016-03-30 34 views
1

我需要一些來自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> 
+0

JGroups的如下屬性'JGroups的設置簡單。 logging.log_factory_class' - 你可以將它設置爲'org.jgroups.logging.Log4J2LogImpl'嗎? (這將禁止集成到EAP日誌記錄中並記錄到有哪些log4j2 impl,但這將是一個起點......) –

+0

事實上,問題似乎是該屬性設置了服務器以用於EAP內部版本的JGroups,但是它被應用程序版本的JGroups抓住了。然後,應用程序JGroups嘗試加載不在其類路徑中的EAP-JGroups集成類。所以,你也可以添加'org.jgroups.extension'模塊作爲依賴,但在這裏沒有保證。 –

+0

@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

回答

4

這是目前Infinispan 8 + EAP 6.4組合的錯誤。原因正如@弗萊維斯在評論中所說的那樣。目前有討論在哪裏解決,但它很可能會在EAP 6.4中修復。我相信它很快就會完成。

我只能爲您提供工作解決方法。

  1. 使用WildFly - 這個問題不存在,存在了
  2. 小討厭的解決辦法,但它的工作原理:
    1. 呼叫System.clearProperty("jgroups.logging.log_factory_class");在部署
    2. 包含的JBoss在指定版本記錄的Infinispan-BOM在您的部署中(例如,在您的pom中添加jboss日誌記錄Maven依賴項。XML)
    3. 提供jboss-deployment-structure.xml您的部署,去掉了服務器的JBoss日誌,見下圖:

<jboss-deployment-structure> 
     <deployment> 
      <exclusions> 
       <module name="org.jboss.logging" /> 
      </exclusions> 
     </deployment> 
    </jboss-deployment-structure> 
+0

謝謝,據我瞭解,我應該選擇一個給定的要點,而不是一次完成所有的要求? :) – maslan

+0

要麼使用WildFly或執行「小惡意的解決方法,但它的作品」下的這三個步驟:) –

0

另一種可能性,如果沒有上述的變通方法的工作(例如該應用程序使用其他日誌機制)實現自己的 http://www.jgroups.org/javadoc/org/jgroups/logging/CustomLogFactory.html

日誌工廠必須返回一個日誌實例,實施其用於任何其他記錄器與方法的跟蹤/錯誤/調試等

然後這個記錄器類可以System.setProperty("jgroups.logging.log_factory_class","my.company.logging.MyJgroupsLog");