8

JBoss AS7に@RemoteEJBがあり、名前で入手できますjava:global/RandomEjb/DefaultRemoteRandom!pl.lechglowiak.ejbTest.RemoteRandom

<jee:remote-slsb>スタンドアロンクライアントは、 Beanを使用するSpringアプリケーションです。そのBeanを使おうとすると、私は得java.lang.IllegalStateException: EJBCLIENT000025: No EJB receiver available for handling [appName:, moduleName:RandomEjb, distinctName:] combination for invocation context org.jboss.ejb.client.EJBClientInvocationContext@1a89031ます。

applicationContext.xmlの関連部分は次のとおりです。

<jee:remote-slsb id="remoteRandom"
    jndi-name="RandomEjb/DefaultRemoteRandom!pl.lechglowiak.ejbTest.RemoteRandom"
    business-interface="pl.lechglowiak.ejbTest.RemoteRandom"
    <jee:environment>
        java.naming.factory.initial=org.jboss.naming.remote.client.InitialContextFactory
        java.naming.provider.url=remote://localhost:4447
        jboss.naming.client.ejb.context=true
        java.naming.security.principal=testuser
        java.naming.security.credentials=testpassword
    </jee:environment>
</jee:remote-slsb>

<bean id="remoteClient" class="pl.lechglowiak.RemoteClient">
    <property name="remote" ref="remoteRandom" />
</bean>

RemoteClient.javaパブリッククラスRemoteClient{

private RemoteRandom random;

public void setRemote(RemoteRandom random){
    this.random = random;
}

public Integer callRandom(){
    try {
        return random.getRandom(100);
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

}

私のjbossクライアントjar:org.jboss.as jboss-as-ejb-client-bom 7.1.2.Final pom

pl.lechglowiak.ejbTest.RemoteRandomは、クライアントアプリケーションのクラスパスで使用できます。jndi.propertiesには、のとまったく同じプロパティが含まれてい<jee:environment>ます<jee:remote-slsb>

このようなコードは例外なく実行されます。

Context ctx2 = new InitialContext();
RemoteRandom rr = (RemoteRandom)  ctx2.lookup("RandomEjb/DefaultRemoteRandom!pl.lechglowiak.ejbTest.RemoteRandom");
System.out.println(rr.getRandom(10000));

でも、これ:

ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
RemoteClient client = ctx.getBean("remoteClient", RemoteClient.class);
System.out.println(client.callRandom());

例外で終了します:java.lang.IllegalStateException:EJBCLIENT000025:呼び出しコンテキストorg.jboss.ejb.client.EJBClientInvocationContext@1a89031の[appName:、moduleName:RandomEjb、distinctName:]の組み合わせを処理するために使用できるEJBレシーバーがありません。

jboss.naming.client.ejb.context=trueが設定されます。私が何を間違って設定しているのか分かります<jee:remote-slsb>か?

4

3 に答える 3

1

私は非常によく似た問題を解決しました。「jboss-ejb-client.propeties」ファイルを作成しましたか?

そうでない場合は、https: //docs.jboss.org/author/display/AS71/EJB+invocations+from+a+remote+client+using+JNDI (特に「EJB クライアント コンテキスト プロパティの設定」サブ-トピック)

https://community.jboss.org/message/740827

https://community.jboss.org/thread/197989

ファイルをクライアントのクラスパスに配置する必要があります。以下は、それがどのように見えるかの簡単な例です。

remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false

remote.connections=default

remote.connection.default.host=localhost
remote.connection.default.port=4447
remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false

remote.connection.default.username=login
remote.connection.default.password=password

幸運を!

PS: この構成で唯一のプロジェクト固有の値は、「ユーザー名」と「パスワード」です。

PS2: jboss セットアップにユーザーを追加していない場合は、jboss フォルダーにある "bin/add-user.[bat/sh]" スクリプトを使用して追加します。

于 2012-10-29T20:16:22.087 に答える
0

expose-access-context="true"jee:remote-slsbtaglibに設定します。

于 2012-10-30T04:38:24.670 に答える
0

java.naming.factory.initial=org.jboss.naming.remote.client.InitialContextFactory の代わりに java.naming.factory.url.pkgs=org.jboss.ejb.client.naming を使用する

于 2014-12-03T09:56:04.720 に答える