2016-03-30 8 views
1

Infinispan 8以降のいくつかの機能が必要です。したがって、私は最新のInfinispanのpomで私の会社のアプリケーションpom.xmlを更新しました。Jboss 6.4 Infinispan 8.2およびJGroups - ClassNotFoundException

これはかなり簡単でしたが、アプリはjgroups(またはdefault-configs/default-jgroups-udp.xmlのデフォルト設定 - この場所は以前のバージョンのinfinispanとは異なります)を使用しています。デフォルトのバージョンにはいくつかのパラメータ(およびJgroupsバージョン3.6からのXSD)があります - したがって、私はjgroupsを3.6.8.Finalにすることにしました。意図したバージョン(デフォルト設定の未知のパラメータについても不平を言わないバージョンですinfinispan 8.2)

でそうポンポンは以下の通りです:

  <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で実行するしかありません。私の推測では、org.jgroups.logging.LogFactoryは何とかそれが実行されているされて発見することである

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 

: があり、私は、展開中に、いくつかのjboss.asクラスを(これは一種の予期されない)を含む例外が発生しました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ファイルを操作できるようにearファイルですが、これまではJbossオリジナルのjgroupsを除外していましたが、これは役に立ちませんでした。

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

にJGroupsを設定することができますプロパティ 'JGroupsのに従います。 logging.log_factory_class' - それを 'org.jgroups.logging.Log4J2LogImpl'に設定できますか? (これにより、EAPロギングへの統合が無効になり、log4j2インプリメンテーションにはログが記録されますが、それは出発点になります...) –

+0

実際、この問題は、プロパティがJGroupsのEAP内部バージョンのサーバーに設定されているため、あなたのアプリケーションバージョンの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の組み合わせのバグです。理由は@Flaviusがコメントで言う通りです。現在のところ、どこで修正するのかという議論がありますが、EAP 6.4では修正される可能性が大体あります。私はすぐにそれが完了すると確信しています。

私はあなたには回避策を提供することができます。

  1. 使用WildFly - 問題は
  2. もうそこリトル厄介な回避策を提示していないが、それは動作します:展開で
    1. コールSystem.clearProperty("jgroups.logging.log_factory_class");
    2. はinfinispan-BOMで指定されたバージョンのJBossのログを含めます(例えば、あなたのpomにjboss-logging Mavenの依存関係を追加してください。例えば(

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

ありがとう、私は理解している、私はちょうど与えられたポイントの1つを選択する必要があります、一度にすべてを行うのではないですか? :) – maslan

+0

WildFlyを使用するか、「少し不快な回避策の下で3つのステップを実行しますが、動作します」 –

0

別の可能性を上記の回避策がどれも動作しない場合:XML)

  • は下記を参照してください、サーバーのJBossのログを除外し、配備にjboss-deployment-structure.xmlを提供しますアプリは他のログメカニズムを使用しています)独自のものを実装することです http://www.jgroups.org/javadoc/org/jgroups/logging/CustomLogFactory.html

    ログファクトリは、ログのインスタンスを返す必要があり、他のロガーのためにそれを実装するなどの方法トレース/エラー/デバッグで簡単です

    そして、このロガークラスはSystem.setProperty("jgroups.logging.log_factory_class","my.company.logging.MyJgroupsLog");

  • 関連する問題