这是pathetic saga I presented earlier today。
的延续这里的基本问题是将古代EJB从Web Logic移植到JBoss。此bean具有必须从另一台服务器上运行的独立客户端应用程序调用的方法。
我从未解决过这个问题,但最终通过避免" ejb取得了一些进展:" JNDI命名策略。
遵循this article,其中概述了我尝试过第二种策略的3种策略," 2。远程命名项目"。本文将此描述为具有一些缺点,但可能更适合我的情况,它在从home接口调用的ejbCreate方法中执行bean初始化。遵循这个策略,我现在在查找bean之前初始化我的上下文:
public InitialContext createInitialContext() throws NamingException {
Properties prop = new Properties();
prop.put(Context.INITIAL_CONTEXT_FACTORY,
"org.jboss.naming.remote.client.InitialContextFactory");
prop.put(Context.PROVIDER_URL, myUrl);
prop.put(Context.SECURITY_PRINCIPAL, myUserName);
prop.put(Context.SECURITY_CREDENTIALS, myPassword);
prop.put("jboss.naming.client.ejb.context", true);
return new InitialContext(prop);
}
无论如何,我的代码在实例化bean时不再失败,因为它使用了我正在使用的策略失败,但是当调用bean上的方法时它确实失败 - 出现以下错误:
java.lang.IllegalStateException: EJBCLIENT000027: No EJBReceiver available for node name myServerName
at org.jboss.ejb.client.EJBClientContext.requireNodeEJBReceiver(EJBClientContext.java:904) ~[ttjd.jar:?]
at org.jboss.ejb.client.EJBClientContext.requireNodeEJBReceiverContext(EJBClientContext.java:945) ~[ttjd.jar:?]
at org.jboss.ejb.client.ReceiverInterceptor.handleInvocation(ReceiverInterceptor.java:68) ~[ttjd.jar:?]
at org.jboss.ejb.client.EJBClientInvocationContext.sendRequest(EJBClientInvocationContext.java:186) ~[ttjd.jar:?]
at org.jboss.ejb.client.EJBInvocationHandler.sendRequestWithPossibleRetries(EJBInvocationHandler.java:255) ~[ttjd.jar:?]
at org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:200) ~[ttjd.jar:?]
at org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:183) ~[ttjd.jar:?]
at org.jboss.ejb.client.EJBInvocationHandler.invoke(EJBInvocationHandler.java:146) ~[ttjd.jar:?]
at com.sun.proxy.$Proxy21.iAmAlive(Unknown Source) ~[?:?]
...
所以问题是"什么是EJBReceiver"我应该怎么做才能让我的客户成为一个客户?我需要在上下文中添加一些其他参数吗?
更新:将以下内容添加到createInitialContext()
没有帮助:
prop.put("jboss.naming.client.endpoint.name", nameOfEjbServer);