0

Eclipse の JBOSS 4.2 で Basic EJB3 アプリケーションを開発しようとしています。

Eclipse で EJB プロジェクトを作成しました。

以下は、私のリモート インターフェイスとローカル インターフェイスです。

package com.test;
import javax.ejb.Local;

@Local
public interface HelloWorldLocal 
{
  public String getGreeting();
}

package com.test;
import javax.ejb.Remote;

@Remote
public interface HelloWorldRemote 
{
   public String getGreeting();
}

私のejb実装は

package com.test;
import javax.ejb.Stateless;

@Stateless
 public class HelloWorld implements HelloWorldRemote, HelloWorldLocal {


public HelloWorld() {
    // TODO Auto-generated constructor stub
}

public String getGreeting() {
    // TODO Auto-generated method stub
    return "First EJB People";
}

}

これを展開された JAR として JBoss にデプロイしましたが、問題なく動作します。

私の最初の質問は次のとおりです。

この分解された jar に他に何を追加する必要がありますか?

次に、スタンドアロンのクライアントを作成し、上記の jar をそのクラスパスに追加しました

クライアントコードは次のとおりです

パッケージcom.testejb;

java.io.FileInputStream をインポートします。java.util.Properties をインポートします。

import javax.naming.InitialContext;

public class TestBean {

/**
 * @param args
 */
public static void main(String[] args) 
{
    // TODO Auto-generated method stub
      HelloWorldRemote getMess = null;
      try {
          Properties props = new Properties();
            Properties props = new Properties();
             props.setProperty("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
            props.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming");
            props.setProperty("java.naming.provider.url", "localhost:1099"); 

          InitialContext ic = new InitialContext(props);

          //


          getMess = (HelloWorldRemote) ic.lookup("HelloWorldRemote/remote");
          System.out.println(getMess.getGreeting());
    } catch (Exception e) 
    {
        // TODO: handle exception
        e.printStackTrace();
    }

}

}

jar の名前は FirstEJB です。FirstEJB/HelloWorldRemote/remote としてルックアップを試みました。

しかし、プログラムを実行するとエラーが発生します

javax.naming.NameNotFoundException: HelloWorldRemote not bound

ルックアップを HelloWorld/remote と入力すると、エラーが発生します

Caused by: java.io.InvalidClassException: org.jboss.ejb3.remoting.BaseRemoteProxy; local class incompatible: stream classdesc serialVersionUID = 1126421850898582900, local class serialVersionUID = -2711693270411201590
4

1 に答える 1

1

この分解された jar に他に何を追加する必要がありますか?

なんとなく、使えます。

FirstEJB/HelloWorldRemote/remote としてルックアップを試みました

JBoss では、JNDI 名は次のようになります。

<myEarName>/<EJB-Name>/remote

指定されていない場合、EJB-Name はデフォルトで Bean 名になります。したがって、EAR パッケージを使用しない場合、JNDI 名は次のようになります。

HelloWorld/remote

ちなみに、これはデプロイ時にサーバーログに記録されるはずです。

ルックアップを HelloWorld/remote と入力すると、エラーが発生します (...)

ルックアップに使用される JNDI 名は正しいです。このエラーは、 EJBTHREE-1118によく似た別の問題です。JBoss 4.2.3.GA で試してみませんか?

于 2010-10-23T02:21:29.617 に答える