0

まず、これは StackOverflow に関する私の最初の質問であり、私はドイツの会社でインターンをしているので、英語が少し壊れており、知識が限られている可能性があります。

Jboss 6.1.0 EAP にリモートで接続しようとしています。EJB と EAR の IDE として Eclipse を使用していますが、Jboss フォーム cmd を実行しています。

私の ejb3 定義は次のようになります。

package de.jack;

import javax.ejb.Remote;

@Remote
public interface TestServiceRemote {
    public void sayRemote();

}

package de.jack;

import javax.ejb.Stateless;

/**
 * Session Bean implementation class TestService
 */
@Stateless
public class TestService implements TestServiceRemote {

    public TestService() {  }

    public void sayRemote() {
        System.out.println("\n\nHello");
    }
}

.ear ファイルを生成した後、それらを JBoss AS にデプロイします。すべて正常に動作します。ブラウザーで localhost:9990 の下にそれらを表示し、デプロイされていることを確認できます。

次に、私が失敗した部分 - クライアント:

public static void main(String argv[]){

        Properties props = new Properties();
        props.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory");
        props.put(Context.PROVIDER_URL, "remote://localhost:4447");
        props.put(Context.SECURITY_PRINCIPAL, "jack");
        props.put(Context.SECURITY_CREDENTIALS, "katze");
        props.put("jboss.naming.client.ejb.context", true);
        // create a context passing these properties
        InitialContext context;
        Object test = null;
        try {
            context = new InitialContext(props);
        } catch (NamingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return;
        }

        try {
            test = 
                 context.lookup("ConnectorBean/TestService!de.jack.TestServiceRemote");
        } catch (NamingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return;
        }

実行時に例外が発生します:

org.jboss.naming.remote.protocol.NamingIOException: Failed to lookup [Root exception is java.io.IOException: java.lang.ClassNotFoundException: de.jack.TestServiceRemote]
    at org.jboss.naming.remote.client.ClientUtil.namingException(ClientUtil.java:49)
    at org.jboss.naming.remote.protocol.v1.Protocol$1.execute(Protocol.java:104)
    at org.jboss.naming.remote.protocol.v1.RemoteNamingStoreV1.lookup(RemoteNamingStoreV1.java:95)
    at org.jboss.naming.remote.client.HaRemoteNamingStore$1.operation(HaRemoteNamingStore.java:245)
...

何が間違っていたのか正確にはわかりません.1つの理由は、マシンに管理者権限がないか、クライアント側のプロパティを混同したことです.

私の悪い英語で申し訳ありません。助けてくれてとても感謝しています!

4

2 に答える 2

0

サーバー ログには、Bean の正しいグローバル JNDI 名が表示されるはずです。foo/EJB-NAME/remote のようにする必要があります。次に、context.lookup("ConnectorBean/TestService!de.jack.TestServiceRemote") で変更する必要があります。

確認してください - http://docs.jboss.org/ejb3/docs/tutorial/1.0.7/html/JNDI_Bindings.html

于 2013-10-11T07:49:16.833 に答える