0

这是我今天早些时候介绍的可悲传奇的延续。

这里的基本问题是将古老的 EJB 从 Web Logic 移植到 JBoss。此 bean 具有必须从运行在另一台服务器上的独立客户端应用程序调用的方法。

我从未解决过这个问题,但最终通过避免使用“ejb:”JNDI 命名策略取得了一些进展。

这篇文章之后,我尝试了第二个“2.远程命名项目”的 3 种策略。文章将其描述为有一些缺点,但可能更适合我的情况,它在从主接口调用的 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);
4

0 回答 0