0

クライアント内の Bean へのアクセスを適用するために、を試して実行しましRemoteた。正常に動作しますが、今度は Bean で同じプロセスを試してみたいと思いLocalます。Local インターフェイスの名前は PersonalData になり、Bean 実装クラスは Firstbean. ルックアップ名を作成するメソッドを次のように変更します。

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;
                }

次のようにメインから Bean にアクセスしようとしています。

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)

LocalJboss で Bean へのアクセスを使用するにはどうすればよいですか?

4

2 に答える 2

2

あなたの問題の正しさを理解していれば、あなたはリモート クライアントを使用してローカル インターフェイスを介して Bean にアクセスしようとしていますが、これは不可能です。

Local インターフェースで宣言されたサービスは、Bean の同じアプリケーションで実行されるクライアントのみが利用できます。ここには、Bean のクライアントがローカル サービスを使用するために満たさなければならないプロパティの詳細なリストがあります。

于 2013-10-27T15:18:45.467 に答える