1

struts 1.3 APIを使用して、EJB3.0で小さなアプリケーションを作成しようとしました。残念ながら、@ EJBアノテーションを使用して、アクションクラス内からBeanオブジェクトを呼び出すことはできません。さまざまな回避策を使用してこの問題を解決しました(最初の回避策は、Beanのグローバルjndi名を使用することであり、もう1つは、最初に別のクラスを呼び出し、そのクラスの@EJBアノテーションを使用することです)。それでも、これら2つの回避策には重大な欠点があります。アクションクラスからEJBを直接呼び出したい。「java:comp / env / beanName」JNDI名を使用して多くの例を読みましたが、それを実行する方法を理解しておらず、名前が見つからないという認識を得ることができません。ローカルEJBクラスのフルネームをcom.ejb.myEjbPackage.MyEJBLocalとします。コンテキストルックアップを使用して呼び出すにはどうすればよいですか?(web.xmlとsun-webを変更せずに実行できますか?

前もって感謝します

4

2 に答える 2

2

@EJBは、標準のpojoでは機能しません。これは、管理対象オブジェクト(つまり、別のセッションBean)でのみ実行できます。

それで...

これがあなたの豆です

@Stateless(mappedName="beanName")
public class beanName implements beanNameRemote {

これがあなたのルックアップです

Context context = new InitialContext();  //default lookup pulls from jndi properties file
context.lookup("beanName");

マップされた名前をさらに読んで、それを使用するかどうかを確認できます。

于 2010-11-29T15:58:19.757 に答える
1

私は答えを見つけました:Beanを呼び出したいクラスでEJBアノテーションを使用できない場合:Beanを定義するためにXML記述子をいじりたくない場合は、Beanクラス自体でそれを行う必要があります。したがって、GameBeanクラスで次のアノテーションを使用しました

     @Stateless
     @EJB(name="ejb/GameBean",beanInterface=GameBeanLocal.class,beanName="GameBean")
     public class GameBean implements GameBeanLocal {.....

beanNameはオプションです。アノテーションは、クラスの宣言の上の行で宣言する必要があります。次に、他のクラスからBeanを呼び出すために、次のことができます。

     InitialContext ic = new InitialContext();
     ic.lookup("java:comp/env/ejb/GameBean");
于 2010-12-21T12:05:16.767 に答える