2016-07-23 5 views
0

私の上位目標は、NetBeansによって生成されたJPAコードを、自分のサーブレットの「データベースからのRESTfulなWebサービスの作成」ウィザードを使用して使用することです。ステートレスセッションBeanをサーブレットに挿入するにはどうすればよいですか?

具体的には、サーブレットからファサードに直接アクセスして、クライアント側でJavaScriptを使用してデータの一部を読み込まないようにしたいと考えています。

私のファサードの関連部分は次のようになります。

@Stateless 
@Path("wgm.rest.balanceview") 
public class BalanceViewFacadeREST extends AbstractFacade<BalanceView> { 

    @PersistenceContext(unitName = "WGManagerPU") 
    private EntityManager em; 

    @GET 
    @Override 
    @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) 
    public List<BalanceView> findAll() { 
    return super.findAll(); 
    } 

} 

今、私が試したものを以下の通りです:

@WebServlet(name = "BalanceServlet", urlPatterns = "/balance/*") 
public class BalanceServlet extends HttpServlet { 

    @Inject 
    private BalanceViewFacadeREST balanceFacade; 


    @Override 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws 
    ServletException, IOException { 
    List<BalanceView> balances = balanceFacade.findAll(); 
    // ... 
    } 
} 

のGlassFishにデプロイする場合しかし、私は次の例外を取得:

インジェクタがBalanceViewFacadeRESTを見つけられなかったかのように私には聞こえます。私は何が欠けていますか?

答えて

2

あなたはサーブレットとあなたのEJBが互いにローカルであると推測します。私の前提は、EJBがリモートインタフェースを持たないことに基づいています。

サーブレットとEJBが同じコンテナにある場合は、コンテナ内にContextとDependncyの注入がある場合は@EJBまたは@Injectでアノテーションを付けることもできます。

あなたはREMOTEもLOCALインターフェースも提示していないので、EJBはインタフェースなしのタイプです。これは、あなたが@LocalBean

@Stateless 
@LocalBean 
@Path("wgm.rest.balanceview") 
public class BalanceViewFacadeREST 



//@Inject 
    OR 
// @EJB 
    private BalanceViewFacadeREST balanceFacade; 
+0

と感謝をEJBに注釈を付けなければならない意味します!残念なことに、私はEJBには本当に新しいので、なぜ私が@LocalBeanが必要なのかわからないのですが、私はこのトピックを深く掘り下げなければなりません。 これで上記の問題は解決しましたが、重大なログメッセージが表示されるようになりました: "重大:クラス[Lwgm/rest/service/BalanceViewFacadeREST;]が見つかりません。[class wgm.servlets.BalanceServlet]をロード中にエラーが発生しました。すべての私のパス(または/バランスに無関係なもの)に対して404を得る。それは関連しているのでしょうか、それともこの別の問題ですか? Btw、私はGlassfishバージョン4.1.1を使用しています。 – Severin

+0

私はアプリケーションを完全にきれいにして再ビルドし、Glassfishの 'generated'と 'osgi-chache'ディレクトリを削除したので、重大なログメッセージは表示されなくなりました。 NetBeansをGlassfishに配備することは、問題であるようです。 war-archiveをGlassfishのautodeployフォルダに手動でコピーすると、正常に動作します。しかし、私はその問題について新しい質問をするつもりだと思う。 – Severin

関連する問題