簡體   English   中英

Jboss 6.4 Infinispan 8.2和JGroups-ClassNotFoundException

[英]Jboss 6.4 Infinispan 8.2 and JGroups - ClassNotFoundException

我需要Infinispan 8+的一些功能。 因此,我用最新的Infinispan pom更新了我的公司應用pom.xml。

它非常簡單,但是該應用程序使用jgroups(或其默認配置在default-configs / 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>

無論如何-使用Jetty的spring-boot可以毫無問題地啟動該應用程序。 我很確定它將在任何應用程序服務器上啟動。

但是然后我別無選擇,只能在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)的解決方法?

這是(該應用程序)耳文件,因此我可以操縱jboss-deployment-structure.xml文件,但是到目前為止,我只附帶了排除Jboss原始jgroup的文件,但這沒有幫助。

 <exclusions>
        <module name="org.jgroups"/>
 </exclusions>

當前是Infinispan 8 + EAP 6.4組合的錯誤。 原因與@Flavius在評論中所說的完全相同。 當前正在討論在哪里修復它,但是它很可能會在EAP 6.4中修復。 我相信它將很快完成。

我只能為您提供一個解決方法。

  1. 使用WildFly-該問題不再存在
  2. 有點討厭的解決方法,但它可以工作:
    1. 調用System.clearProperty("jgroups.logging.log_factory_class"); 在部署中
    2. 在您的部署中包括infinispan-bom中指定的版本的JBoss日志記錄(例如,在pom.xml中添加jboss-logging Maven依賴項)
    3. 為您的部署提供jboss-deployment-structure.xml ,其中不包括服務器的JBoss日志記錄,請參見以下內容:

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

如果上述解決方法都不起作用(例如,應用程序使用其他日志機制),則另一種可能性是實現自己的http://www.jgroups.org/javadoc/org/jgroups/logging/CustomLogFactory.html

日志工廠必須返回一個日志實例,可以使用trace / error / debug等方法直接為其他任何記錄器實現該實例。

然后可以使用System.setProperty("jgroups.logging.log_factory_class","my.company.logging.MyJgroupsLog");設置此記錄器類System.setProperty("jgroups.logging.log_factory_class","my.company.logging.MyJgroupsLog");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM