2

@EJB依存性注入を機能させることができません。LinuxとMavenをビルドツールとして使用しています。

ソースコード、IDE、およびアプリサーバーについては、可能な限りシンプルにする代替手段を使用するのが好きです。Glassfish 3.1.2.2、NetBeans 7.2で試してみましたが、うまくいきませんでした。Glassfishで設定を行っていません。

ここにいくつかのソースコードの例がありますが、機能するコードがあれば役に立ちます。また、これらの種類の問題をデバッグする方法についてのアイデアをいただければ幸いです。すべての初心者がそれらを持っているようです...

LinkResource.java

package se.xyz.webapp;
import javax.ejb.EJB;
import javax.ws.rs.DefaultValue;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import se.xyz.server.LinkService;

@Path("links/{username}")
public class LinkResource {
    @EJB
    LinkService service;
    @GET
    @Produces("text/plain")
    public String link(@PathParam("username") @DefaultValue("NoName") String name ) {
       return service.store(name); // Always nullpointer exception here!
   }     
}

LinkServiceImpl.java

package se.xyz.server;

import javax.ejb.Stateless;

@Stateless
public class LinkServiceImpl implements LinkService {
    public String store(String name)
    {
        return "From eJB";
    }
}

LinkService.java

package se.xyz.server;

import javax.ejb.Local;

@Local
public interface LinkService {
    public String store(String name);
}

webappは表示されていますが、変数serviceは常にnullです。このコードを機能させることはそれほど重要ではありませんが、DIを機能させることができたとしてもです。遠い将来、私も頑張っていきたいと思いますが、アーキタイプから巨大なアプリを入手するのではなく、手動でやりたいと思っています。私の目標は、私が何をしているのかを理解することです...どんな助けもいただければ幸いです。

4

3 に答える 3

2

問題は、注入しようとしているクラスがJAX-RSリソースであるということです。

JAX-RSリソースは、管理対象Beanタイプのアラインメントに関係するJavaEEでは少し見落としがあります。Java EE 6が作成されたとき、たまたまJAX-RS(およびJSF 2)が早期に終了しましたが、CDIと包括的な「マネージドBean」の概念は遅れて終了しました。

JAX-RSコンテナ管理型のBeanですが、残念ながら公式の「管理対象Bean」の種類ではないため、@EJBを直接サポートしていません。

これをCDI管理対象Beanにしてから、@EJBの代わりに@Injectを使用できます。

于 2012-10-21T11:24:21.807 に答える
1

LinkService EJBへの参照をLinkResourceリソースに挿入する場合は、LinkResourceが管理対象コンポーネント、つまりステートレスセッションBeanである必要があります。LinkResourceクラスに@Statelessアノテーションを追加すると、問題ないはずです。

于 2012-10-21T07:10:30.610 に答える
1

プロジェクトごとにコンテキストと依存性の注入を有効にする必要があります。NetBeansでプロジェクトを右クリックし、「新規」>「その他」を選択します。

カテゴリの下でコンテキストと依存性注入を選択し、次にファイルタイプの下でbeans.xmlを選択します。

次に、[次へ]、[完了]の順にクリックします。

または、Web Pages/WEB-INFフォルダーにbeans.xmlファイルを手動で作成することもできます。内容は次のとおりです。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
</beans>
于 2012-10-21T07:13:15.607 に答える