2012-02-22 4 views
0

私は基本的なEJBを持っている3.0(JavaのEE 5)私はEARプロジェクト、(EJBの)EJBプロジェクト、JPAのプロジェクトを(作成したIBM RAD(別名のEclipse 3.4)およびWebSphere 7.0私の@EJBが私のWebサービスに注入されないのはなぜですか?

プロジェクトドメインオブジェクト)、およびDynamic Webプロジェクト(JAX-RS Webサービス用)があります。

EJBプロジェクトはEJBが含まれていますので、同じよう:

@Stateless 
public TestBean implements TestBeanLocal { 
/* ... */ 

@Local 
public TestBeanLocal { 
/* ... */ 

WebプロジェクトがそうのようなJAX-RS Webサービスが含まれます。

@Path(value="/mywebservice") 
public MyWebService implements Application { 
    @EJB 
    private TestBeanLocal myBean; 

    @GET 
    @Produces({"text/plain"}) 
    public String getList() { 
    return myBean.getList(); 
    /* ... */ 

を私の問題は、MyWebServiceで "MyBeanと" 属性であります注射されることはありません。それは常にnullです。

私が逃したアイデアはありますか?

おかげで、 ロブ

+0

WebSphere 7.0は、JAX-RSサポートをそのまま使用することはできません。 JAX-RS実装としてどのフレームワーク(またはWebSphereフィーチャー・パック)を使用していますか? –

+0

私はJAX-RSチュートリアルで使用しているApache Wink 1.0を使用しています。これはIBM RADヘルプドキュメントにあります。 –

答えて

2

は、Java EEコンテナは、それが管理するコンポーネントに@EJBインジェクションを実行します。 Java EE 5の場合、これにはサーブレット、Webサービス、およびEJBが含まれます。あなたのケースでは、コンポーネントはWinkによって管理されているので、質問はWinkが@EJBを解釈するかどうかです(私はそう思わない)。 JAX-RSはそのJava EEバージョンの一部であり、コンポーネントはサードパーティのフレームワークではなく、コンテナによって管理されるため、Java EE 6注入が機能します。

0

はずっと髪引っ張った後、私はきれいな新しいプロジェクトを(次は若干異なるクラス名を持っている)作成した...私は、WebSphereのように、EJBはJNDI名を持っていたログ起動に気づきましたWebサービスのコンストラクタでEJBをJNDIで検索しようとしました...

String sJNDI = "ejblocal:testEAR/testEJB.jar/TestBean#test.TestBeanLocal"; 
TestBeanLocal testBeanLocal = (TestBeanLocal) new InitialContext().lookup(sJNDI); 

...となっています。

私の質問は今、私の豆を見るためにこれを行う必要がありますか?それとも私が逃した何かがありますか? GlassFishのJava EE 6バージョンを使用している別のプロジェクトでは、@ EJBに入れなければならなかったので、うまくいきました。これはJava EE 5/WebSphere 7では機能しませんか?それとも、IBM RAD 7(別名Eclipse 3.4)の制限ですか?

おかげで、 ロブ

関連する問題