私は Java と EJB の初心者です。単純な EJB を作成したい。
そこで、Eclipse 経由で EJB プロジェクトを作成しました (Eclipse Java EE IDE Juno Service Release 1 Build ID: 20120920-0800)。次に、リモート インターフェースとローカル インターフェースを備えたステートレス セッション Bean をそこに追加しました。次に、2 つの数値の合計を返す単純なメソッドを追加しました。コードは次のとおりです。
テスト.java:
package ejb;
import javax.ejb.Stateless;
import javax.ejb.TransactionManagement;
import javax.ejb.TransactionManagementType;
/**
* Session Bean implementation class Test
*/
@Stateless
@TransactionManagement(TransactionManagementType.BEAN)
public class Test implements TestRemote, TestLocal {
/**
* Default constructor.
*/
public Test() {
// TODO Auto-generated constructor stub
}
public int getSum(int a , int b) {
return (a + b);
}
}
TestLocal.java:
package ejb;
import javax.ejb.Local;
@Local
public interface TestLocal {
public int getSum(int a , int b);
}
TestRemote.java :
package ejb;
import javax.ejb.Remote;
@Remote
public interface TestRemote {
public int getSum(int a , int b);
}
EJB プロジェクトを右クリックして、JAR ファイルとしてエクスポートしました。次に、それを GlassFish3 サーバーにデプロイしました。1) アプリケーション - デプロイなど。2) JNDI - カスタム リソース。Resource Type を にejb.TestRemote
、Factory Class を に設定しましたorg.glassfish.resources.custom.factory.EjbFactory
。JNDI 名はTest
. 次に、単純なクライアントをコーディングしました。
Main.java:
import javax.naming.InitialContext;
import ejb.TestRemote;
public class Main {
public static void main(String arg[]) {
try {
TestRemote testR = (TestRemote) new InitialContext().lookup("Test");
//System.out.println(new InitialContext().lookup("Test").toString());
//.toString displays: Reference Class Name: ejb.TestRemote
System.out.println(testR.getSum(50, 500));
} catch(Exception e) {
e.printStackTrace();
}
}
}
EJB プロジェクトの JAR ファイルを Java Build Path (Project-Properties) に追加gf-client-module.jar
しました。C:\glassfish3\glassfish\modules
次に、Eclipse でクライアントを起動しようとすると、すぐに次のメッセージが表示されました。
com.sun.enterprise.v3.server.CommonClassLoaderServiceImpl findDerbyClient
INFO: Cannot find javadb client jar file, derby jdbc driver will not be available by default.
その後、次のメッセージを受け取りました。
java.lang.ClassCastException: javax.naming.Reference cannot be cast to ejb.TestRemote
at Main.main(Main.java:16)
それで、誰か私を助けてくれませんか?.. 私は本当に混乱しています: .toString メソッドを参照で呼び出すと、前に述べたように、それが適切な ejb.TestRemote クラス参照であることが表示されます。しかし...うまくいきません((
何か案は?前もって感謝します。
私にとっては解決しましたが、別の方法があります
Eclipse と個別にインストールされた GlassFish で作成するという希望を失いました。そこで、GlassFish サーバーを Eclipse にインストールし、EJB プロジェクトをそこにデプロイしました。それはうまくいきました:今、私のクライアントはうまくいきます。唯一の変更点は、完全なパッケージ名を .lookup: like に指定する必要があること.lookup("ejb.TestRemote")
です。
助けようとした/望んでいた/助けたいと思ったすべての人に感謝します!