0

Imは、JBoss 5(JBoss AS 5 Developmet)について読んでいる本Imから例を作成しようとしていましたが、本から直接コードを入力しても機能しません。

これは私のインターフェースです:

@Remote
public interface Mailer {

    public void sendMail(String aToEmailAddr, 
                         String aSubject, String aBody);

}

これは、このインターフェースを実装するEJBです。

@Stateless  
@RemoteBinding(jndiBinding="remote/MailerEJB")

public  class MailerBean implements Mailer {... }

そして、これはBeanを検索しようとするクライアントアプリケーションです。

public class MailClient {
     public static void main(String[] args) throws Exception
       {
          InitialContext ctx = new InitialContext();
          Mailer mailer = (Mailer) ctx.lookup("remote/MailerEJB");


       }

}

MailClientクラスを実行しようとすると、次の例外が発生しました

Exception in thread "main" javax.naming.NameNotFoundException: remote not bound

ビルドパスに追加したjndi.propertiesファイルもあります。これは次のようになります>

java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.provider.url=jnp://localhost:1099
java.naming.factory.url.pkgs=org.jnp.interfaces

jmx-consoleでも、remote /MailerEJBBeanが表示されません。

jboss-5.0.1.GA + JBDS +java1.7.0を使用しています

誰かが私を助けることができますか?

4

1 に答える 1

1

まず、EJBがJBossに適切にデプロイされ、バインド名が指定されていることを確認する必要があります。したがって、JMXコンソールのJNDIViewにBeanが表示されない場合は、デプロイメントの問題です。正しくデプロイされていることを確認するには、EJB(ejb-jarまたはear)をデプロイする瞬間にJBossログを確認し、次のような行を探します。

EJBBindingName - EJB3.x Default Remote Business Interface

あなたの場合、定義したバインディングが正しい場合は、次のようになります。

remote/MailerEJB - EJB3.x Default Remote Business Interface

この行は、EJBに付けられた実際のJNDI名を示しており、リモート呼び出しで使用する必要があります。

一方、アノテーションとクラス定義の間の線を削除してみてください。

@Stateless  
@RemoteBinding(jndiBinding="remote/MailerEJB")
public  class MailerBean implements Mailer {... }

さらに、この投稿では、単純なコマンドラインJavaプログラムからEJBをリモート呼び出しする方法に関する具体的な手順を見つけることができます。

于 2012-12-11T14:53:54.463 に答える