EJBCLIENT000025:没有可用于处理的EJB接收器,如何修复?

时间:2016-05-11 04:23:07

标签: java java-ee intellij-idea ejb wildfly

我正在使用IntelliJ IDEA 2016和WildFly 10创建一个简单的客户端 - 服务器Java EE应用程序。

我创建了一个新的Java EE Project EJB_final_test 并添加了两个模块:

  • Java模块 EJB_test_client

  • EJB模块 EJB_test_server

然后我set artifact作为Java EE Application Archive,为 EJB_test_server 模块创建 EJBTestEAR.ear 文件。

我在WildFly服务器上部署了这个EAR文件。服务器运行良好,并在启动时成功部署工件。

这是我的 jboss-ejb-client.properties 文件:

remote.connections=default
remote.connection.default.host=localhost
remote.connection.default.port=8180
remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOPLAINTEXT=false

以下是 EJB_test_client 模块中仅有ClientTest类的代码:

package test;

import facade.TestFacadeBeanRemote;
import javax.naming.Context;
import javax.naming.InitialContext;
import java.util.Properties;

public class ClientTest {

    public static void main(String[] args) throws Exception {

        Properties jndiProperties = new Properties();
        jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
        Context ctx = new InitialContext(jndiProperties);
        TestFacadeBeanRemote remote = (TestFacadeBeanRemote) ctx.lookup("ejb:EJBTestEAR/EJB_test_server//TestFacadeBean!facade.TestFacadeBeanRemote");

        System.out.println(remote.tstPlus("Hello", "World"));
    }

}

这是类TextExecutiveBean, TestFacadeBean, TestFacadeBeanRemote的代码,它们都在模块EJB_test_server中:

  • TestExecutiveBean 类:

    package executive;
    
    import javax.ejb.LocalBean;
    import javax.ejb.Stateless;
    
    @Stateless
    @LocalBean
    public class TestExecutiveBean {
    
        public String doPlusOperation(String str1, String str2) {
            return str1 + " " + str2 + " " + str1;
        }
    }
    
  • TestFacadeBean 类:

    package facade;
    
    import javax.ejb.EJB;
    import javax.ejb.Stateless;
    import executive.TestExecutiveBean;
    
    @Stateless
    public class TestFacadeBean implements TestFacadeBeanRemote {
    
        @EJB
        private TestExecutiveBean test2;
    
        public String tstPlus(String str1, String str2) {
            return test2.doPlusOperation(str1, str2);
        }
    }
    
  • TestFacadeBeanRemote 接口:

    package facade;
    
    import javax.ejb.Remote;
    
    @Remote
    public interface TestFacadeBeanRemote {
    
        public String tstPlus(String str1, String str2);
    }
    

当我尝试运行ClientTest main方法,尝试与服务器通信以在 EJBTestEAR 中查找tstPlus()方法时,我遇到以下异常:

  

线程“main”中的异常java.lang.IllegalStateException:   EJBCLIENT000025:没有可用于处理的EJB接收器   [appName:EJBTestEAR,moduleName:EJB_test_server,distinctName:]   调用上下文的组合   org.jboss.ejb.client.EJBClientInvocationContext@184f6be2 at   org.jboss.ejb.client.EJBClientContext.requireEJBReceiver(EJBClientContext.java:798)     在   org.jboss.ejb.client.ReceiverInterceptor.handleInvocation(ReceiverInterceptor.java:128)     在   org.jboss.ejb.client.EJBClientInvocationContext.sendRequest(EJBClientInvocationContext.java:186)     在   org.jboss.ejb.client.EJBInvocationHandler.sendRequestWithPossibleRetries(EJBInvocationHandler.java:255)     在   org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:200)     在   org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:183)     在   org.jboss.ejb.client.EJBInvocationHandler.invoke(EJBInvocationHandler.java:146)     在com.sun.proxy。$ Proxy0.tstPlus(未知来源)at   test.ClientTest.main(ClientTest.java:20)at   sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at   sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)     在   sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)     在java.lang.reflect.Method.invoke(Method.java:498)at   com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)

请问,我该如何解决此错误?难道我做错了什么?我在服务器上部署的工件的配置是对吗?

0 个答案:

没有答案