我在JBoss AS 7上安装了@Remote EJB,名称为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-客户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:没有EJB接收器可用于处理调用上下文的[appName:,moduleName:RandomEjb,distinctName:]组合org.jboss.ejb.client.EJBClientInvocationContext@1a89031。
jboss.naming.client.ejb.context=true
已设置。
你知道我在<jee:remote-slsb>
设置了什么错误吗?
答案 0 :(得分: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]”脚本完成的。
答案 1 :(得分:0)
将expose-access-context="true"
设置为jee:remote-slsb taglib。
答案 2 :(得分:0)
java.naming.factory.url.pkgs = org.jboss.ejb.client.naming 代替 java.naming.factory.initial的= org.jboss.naming.remote.client.InitialContextFactory