[英]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中修复。 我相信它将很快完成。
我只能为您提供一个解决方法。
System.clearProperty("jgroups.logging.log_factory_class");
在部署中 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.