2017-10-06 1 views
1

単純なtcpインバウンドリソースアダプタ(RA)をgithubのexample projectとしてプログラムし、スタンドアロンフル構成。メッセージリスナーTcpMessageListenerインターフェイスはRAにあり、ra.xml記述子で定義されていますが、メッセージドリブンBean(MDB)に接続できません。 RAのeis側は期待通りに動作し、telnetでメッセージを接続/送信できます。私はwildfly MavenプラグインでMDBを展開しようとすると、MDBはTcpMessageListenerを見つけることができなかったと私はjava.lang.NoClassDefFoundErrorを得た:Wildfly 10.xのインバウンドリソースアダプタにMDBをリンクできませんでした。

WARN [org.jboss.modules] (MSC service thread 1-7) Failed to define class de.bitc.ejb.InboundEventHandler in Module "deployment.ra-ear.ear.ra-user-ejb-0.0.1-SNAPSHOT.jar:main" from Service Module Loader: java.lang.NoClassDefFoundError: Failed to link de/bitc/ejb/InboundEventHandler (Module "deployment.ra-ear.ear.ra-user-ejb-0.0.1-SNAPSHOT.jar:main" from Service Module Loader): de/bitc/jca/inflow/TcpMessageListener 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    . 
    . 
    . 
ERROR [org.jboss.msc.service.fail] (MSC service thread 1-7) MSC000001: Failed to start service jboss.deployment.subunit."ra-ear.ear"."ra-user-ejb-0.0.1-SNAPSHOT.jar".POST_MODULE: org.jboss.msc.service.StartException in service jboss.deployment.subunit."ra-ear.ear"."ra-user-ejb-0.0.1-SNAPSHOT.jar".POST_MODULE: WFLYSRV0153: Failed to process phase POST_MODULE of subdeployment "ra-user-ejb-0.0.1-SNAPSHOT.jar" of deployment "ra-ear.ear" 
    . 
    . 
    . 
Caused by: java.lang.NoClassDefFoundError: Failed to link de/bitc/ejb/InboundEventHandler (Module "deployment.ra-ear.ear.ra-user-ejb-0.0.1-SNAPSHOT.jar:main" from Service Module Loader): de/bitc/jca/inflow/TcpMessageListener 
    . 
    . 
    . 
ERROR [org.jboss.as.controller.management-operation] (management-handler-thread - 17) WFLYCTL0013: Operation ("add") failed - address: ([("deployment" => "ra-ear.ear")]) - failure description: { 
"WFLYCTL0080: Failed services" => {"jboss.deployment.subunit.\"ra-ear.ear\".\"ra-user-ejb-0.0.1-SNAPSHOT.jar\".POST_MODULE" => "org.jboss.msc.service.StartException in service jboss.deployment.subunit.\"ra-ear.ear\".\"ra-user-ejb-0.0.1-SNAPSHOT.jar\".POST_MODULE: WFLYSRV0153: Failed to process phase POST_MODULE of subdeployment \"ra-user-ejb-0.0.1-SNAPSHOT.jar\" of deployment \"ra-ear.ear\" 
Caused by: java.lang.NoClassDefFoundError: Failed to link de/bitc/ejb/InboundEventHandler (Module \"deployment.ra-ear.ear.ra-user-ejb-0.0.1-SNAPSHOT.jar:main\" from Service Module Loader): de/bitc/jca/inflow/TcpMessageListener"}, 
"WFLYCTL0412: Required services that are not installed:" => ["jboss.deployment.subunit.\"ra-ear.ear\".\"ra-user-ejb-0.0.1-SNAPSHOT.jar\".POST_MODULE"], 
"WFLYCTL0180: Services with missing/unavailable dependencies" => undefined 

依存関係をEJBのMavenのサブモジュールでprovided範囲です。私はRAの展開に続いてredhat guideを続けました。私はまた、ejbサブモジュールのリソースアダプタの依存関係をコンパイルするように変更しました。この場合、私はここで、次のエラー

[ERROR] Caused by: java.lang.IllegalStateException: WFLYEJB0383: No message listener of type de.bitc.jca.inflow.TcpMessageListener found in resource adapter tcp-eis.rar"}, 
    "WFLYCTL0412: Required services that are not installed:" => ["jboss.deployment.subunit.\"ra-ear.ear\".\"ra-user-ejb-0.0.1-SNAPSHOT.jar \".component.InboundEventHandler.CREATE"], 
    "WFLYCTL0180: Services with missing/unavailable dependencies" => undefined}}} 

を得た。ここMDB

package de.bitc.ejb; 

import java.util.logging.Logger; 

import javax.ejb.ActivationConfigProperty; 
import javax.ejb.MessageDriven; 

import org.jboss.ejb3.annotation.ResourceAdapter; 

import de.bitc.jca.inflow.TcpMessageListener; 

@MessageDriven(
    activationConfig = { 
      @ActivationConfigProperty(propertyName = "topic", propertyValue = "test") 
     } //, messageListenerInterface = TcpMessageListener.class 
     ) 
@ResourceAdapter(value="tcp-eis.rar") 
public class InboundEventHandler implements TcpMessageListener { 

    /** The logger */ 
    private static Logger log = Logger.getLogger(InboundEventHandler.class.getName()); 

    /** 
    * Default constructor. 
    */ 
    public InboundEventHandler() { 
     // TODO Auto-generated constructor stub 
    } 

    /** 
    * @see TcpMessageListener#onMessage(String) 
    */ 
    @Override 
    public void onMessage(String msg) { 
     // TODO Auto-generated method stub 
    } 
} 

です。ここTcpListenerInterface

package de.bitc.jca.inflow; 

/** 
* TcpMessageListener 
* 
* @version $Revision: $ 
*/ 
public interface TcpMessageListener { 
    /** 
    * Receive message 
    * 
    * @param msg 
    *   String. 
    */ 
    public void onMessage(String msg); 
} 

はjboss_cli

でリソースアダプタの設定ですされます
/subsystem=resource-adapters/resource-adapter=tcp-eis.rar:read-resource(recursive=true) 
{ 
    outcome => success, 
    result => { 
     archive => tcp-eis.rar, 
     beanvalidationgroups => undefined, 
     bootstrap-context => undefined, 
     config-properties => undefined, 
     module => undefined, 
     statistics-enabled => false, 
     transaction-support => XATransaction, 
     wm-security => false, 
     wm-security-default-groups => undefined, 
     wm-security-default-principal => undefined, 
     wm-security-domain => other, 
     wm-security-mapping-groups => undefined, 
     wm-security-mapping-required => false, 
     wm-security-mapping-users => undefined, 
     admin-objects => undefined, 
     connection-definitions => undefined 
    } 
} 

私の質問は、MDBがリソースアダプタを見つける展開が不足しているかどうかです。私はこれが@ResourceAdapterアノテーションで行われたと思いますか?キューなどを定義する必要がありましたか?インバウンドリソースアダプタに関するリソースは非常にまれで、ほとんどの例はアウトバウンドリソースアダプタです。前もって感謝します。

上記のinbound-ra-exampleはgithubでホストされています。私は、githubプロジェクトのREADME.mdでビルドと実行を行うためのすべての手順について説明しました。私は、ドキュメントを見つけるために同じ問題を抱えている他の人たちのために、これらの例をホストしたいと思います。

答えて

0

私はクラスローディングNoClassDefFoundError: Failed to linkエラーを解決しましたが、今実行している例は多くの未解決の質問に答えています。私はすべての詳細を私のexampleに入れました。インバウンドリソースアダプタは、現在、wildfly 10(WF10)の耳のアーカイブのサブデプロイメントとして実行されます。 IronJacamar codegeneratorでインバウンドリソースアダプタを生成しました。この例でビルドと実行の手順をすべて説明しました。

耳のアーカイブにjboss-deployment-structure記述子を使用せず、earアーカイブのリソースアダプタapiに依存するという主な間違いがありました。私は耳に依存関係を置いてテストしながら忘れてしまった。ここで

<?xml version="1.0" encoding="UTF-8"?> 
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2"> 
    <ear-subdeployments-isolated>false</ear-subdeployments-isolated> 
    <sub-deployment name="ra-user-ejb.jar"> 
     <dependencies> 
      <module name="deployment.ra-ear.ear.tcp-eis.rar" export="true" /> 
     </dependencies> 
    </sub-deployment> 
</jboss-deployment-structure> 

ドキュメントを解決するために、インバウンドRAの答えを埋め込まれた私の最大の耳が少し漏れている:

  • ra.xml記述子を必要としない、RAクラスの@Connector注釈が十分にあります。
  • WF10に追加の設定は必要ありません。待ち行列、standallone-full.xmlの変更、またはjndiのものはありません。 wildfly-maven-pluginを使った簡単なデプロイメントが動作します。
  • 現在動作中のリソースアダプタがWF10のリソースアダプタとして表示されていません。これは私を混乱させ、私の研究を非常に困難にします。
  • jboss-ejb3.xml記述子は必要ありません。 @ResourceAdapter(value="ra-ear.ear#tcp-eis.rar")で十分です。注意してください。これはjbossアノテーションであり、ee7ではありません。だから、あなたは、例えば、何らかのリソースを見つけられません。 websphereまたはtomee。

次の日にサンプルのリソースアダプタを完全なee7アプリケーションに拡張し、この例がインバウンドリソースアダプタのドキュメントの地獄の途中で他の人を助けることを期待します。

関連する問題