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