2011-01-17 5 views
2

JSF、フィルタ、JPAを初めて使用し、NetBeansとGlassfishを使用しています。Javaサーブレット他のオブジェクトとエンティティマネージャのフィルタとスコープ

私はJSFフォームを提出して、オブジェクトのメソッドにアクセスして、ファサードオブジェクトメソッドを呼び出してDBクエリを実行します。しかし、

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

私がしようとすると(前または後chain.doFilter)フィルタクラスから同じファサードを呼び出し、ファサードクラスとのEntityManagerが仕事: ファサードクラスのEntityManagerへのアクセスを宣言するために注釈を使用しています私が自分のクラスをFilterクラスでインスタンス化し、Facadeにアクセスしようとするメソッドを呼び出すと、インスタンス化されず、呼び出し時にnull例外が発生します。

したがって、ClassをFacade/EntityManagerにアクセスするにはどうすればよいですか?ファサードは、フィルタークラスと同じ方法で宣言します。他の全てが既にインスタンス化されたとき、私は新しいに私のクラスを持っていないのはなぜ

@EJB 
private MyFacade myFacade; 

ありがとうございました。

答えて

2

JavaEE 6を使用している場合は、@Injectを使用して注入できます.CDIはこの機能を提供します。

もしそうでなければ、JNDI経由でそれを調べる必要があります。

管理対象のオブジェクトをインスタンス化しないでください。あなたがそうした場合、彼らはエンティティマネージャーを含む何も注入されません。

+0

ありがとうBozho。クラスをManagedBeanとして宣言しましたが、現在Glassfishはjavax.naming.NameNotFoundExceptionで500をスローします。このBeanをビルド時にピックアップするように宣言するにはどうすればよいですか? – JPC

+0

グラスフィッシュのバージョンは? – Bozho

+0

Ver 3.0.1では、faces-config.xmlにの宣言はありません。私はFilterクラスのマネージドBeanを宣言するときに@EJBアノテーションを使用します。どうもありがとう。 – JPC

0

私がそれを働かせたのは、ボズホの帽子よりも多くあります。フィルタクラスで 私はインポート:

import javax.inject.Inject; 

と、次のように私の豆を宣言:

@Inject 
private MyBean myBean; 

今、このオブジェクトが注入されます。 は、私はまた、作成しなければならなかった空のWEB-INF/beans.xmlの

<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" /> 

今では構築し、例外をスローせずに実行します。

関連する問題