使用JBoss访问客户端中的本地Bean

时间:2013-10-26 18:19:15

标签: java-ee jboss ejb

我已经尝试并运行example以便在客户端中对Bean进行Remote访问。它运行正常,但现在我想尝试使用{{1 }} 豆。 Local接口的名称现在是PersonalData,bean实现类是Local。将创建查找名称的方法更改为:

Firstbean

并尝试从main访问Bean:

private static String getLookupLocalName() {
            /*
            The app name is the EAR name of the deployed EJB without .ear suffix.
            Since we haven't deployed the application as a .ear,
            the app name for us will be an empty string
            */
                    String appName = "";

                    /* The module name is the JAR name of the deployed EJB
                    without the .jar suffix.
                    */
                    String moduleName = "EJBTest";

            /*AS7 allows each deployment to have an (optional) distinct name.
            This can be an empty string if distinct name is not specified.
            */
                    String distinctName = "";

                    // The EJB bean implementation class name
                    String beanName = FirstBean.class.getSimpleName();

                    // Fully qualified remote interface name
                    final String interfaceName = PersonalData.class.getName();

                    // Create a look up string name
                    String name = "ejb:" + appName + "/" + moduleName + "/" +
                        distinctName    + "/" + beanName + "!" + interfaceName;

                    return name;
                }

它会抛出public static void main(String[] args) { PersonalData bean = doLookup(getLookupLocalName()); System.out.println(bean.getName()); }

NoSuchEJBException

如何使用 javax.ejb.NoSuchEJBException: No such EJB[appname=,modulename=EJBTest,distinctname=,beanname=FirstBean,viewclassname=com.al.ejbtest.PersonalData] at org.jboss.ejb.client.remoting.NoSuchEJBExceptionResponseHandler.processMessage(NoSuchEJBExceptionResponseHandler.java:64) at org.jboss.ejb.client.remoting.ChannelAssociation$ResponseReceiver.handleMessage(ChannelAssociation.java:395) at org.jboss.remoting3.remote.RemoteConnectionChannel$5.run(RemoteConnectionChannel.java:437) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:722) Exception in thread "main" java.lang.IllegalStateException: No EJB receiver available for handling [appName:,modulename:EJBTest,distinctname:] combination for invocation context org.jboss.ejb.client.EJBClientInvocationContext@67a524a7 at org.jboss.ejb.client.EJBClientContext.requireEJBReceiver(EJBClientContext.java:584) at org.jboss.ejb.client.ReceiverInterceptor.handleInvocation(ReceiverInterceptor.java:119) at org.jboss.ejb.client.EJBClientInvocationContext.sendRequest(EJBClientInvocationContext.java:181) at org.jboss.ejb.client.EJBClientInvocationContext.retryRequest(EJBClientInvocationContext.java:206) at org.jboss.ejb.client.EJBReceiverInvocationContext.retryInvocation(EJBReceiverInvocationContext.java:95) at org.jboss.ejb.client.remoting.NoSuchEJBExceptionResponseHandler.processMessage(NoSuchEJBExceptionResponseHandler.java:78) at org.jboss.ejb.client.remoting.ChannelAssociation$ResponseReceiver.handleMessage(ChannelAssociation.java:395) at org.jboss.remoting3.remote.RemoteConnectionChannel$5.run(RemoteConnectionChannel.java:437) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:722) at ...asynchronous invocation...(Unknown Source) at org.jboss.ejb.client.remoting.NoSuchEJBExceptionResponseHandler$ResultProducer.getResult(NoSuchEJBExceptionResponseHandler.java:101) at org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:270) at org.jboss.ejb.client.TransactionInterceptor.handleInvocationResult(TransactionInterceptor.java:47) at org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:272) at org.jboss.ejb.client.ReceiverInterceptor.handleInvocationResult(ReceiverInterceptor.java:132) at org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:260) at org.jboss.ejb.client.EJBClientInvocationContext.awaitResponse(EJBClientInvocationContext.java:399) at org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:140) at org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:121) at org.jboss.ejb.client.EJBInvocationHandler.invoke(EJBInvocationHandler.java:104) at com.sun.proxy.$Proxy0.getName(Unknown Source) at com.ibytecode.client.EJBApplicationClient.main(EJBApplicationClient.java:20) 使用Jboss访问bean?

2 个答案:

答案 0 :(得分:2)

如果我理解您的问题是正确的,那么您正尝试使用远程客户端通过其本地接口访问Bean,这是不可能的。

在Local接口中声明的服务仅适用于在Bean的同一应用程序中运行的客户端。 Here您有一个更详细的列表,列出了Bean的客户端使用本地服务必须满足的属性。

答案 1 :(得分:-1)

仔细观察远程bean的bean名称。

例如,在WildFly中,检索远程bean的完整名称包含“已导出” - 您可以从服务器的启动日志中找到实际名称。