0

それは疑問の余地があります(struts 2 Beanは作成されません)私はTomcatの下の非常に単純なWebアプリケーションでstruts2+トップリンクを使用しています。このページでは、反復タグを使用したいと思います。そのため、エンティティのコレクション(Entity)を解決するファクトリ(SomeFactory)を宣言しました。記事ごと:http ://download-uk.oracle.com/docs/cd/B32110_01/web.1013/b28221/usclient005.htm#CIHCEHHG 必要なのは宣言だけです:

@PersistenceContext(unitName="name_in_persistence_xml")
public class SomeFactory
{
    @PersistenceUnit(unitName="name_in_persistence_xml")
    EntityManagerFactory emf;

    public EntityManager getEntityManager() {
       assert(emf != null); //HERE every time it is null
       return emf.createEntityManager();
    }
    public Collection<Entity> getAll()
    {
       return getEntityManager().createNamedQuery("Entity.findAll").getResultList();
}
}

なにが問題ですか?web.xmlで何かを見逃している可能性がありますか?インジェクションを許可するためにWebアプリケーションのトップリンクを事前に初期化する方法は?

4

1 に答える 1

0

Java EEコンテナではないTomcatによってインジェクションされるものはありません(Java EE 5コンテナを使用しても、インジェクションは、サーブレット、フィルタ、リスナー、EJB、Webサービスエンドポイントなどの管理対象コンポーネントに対してのみ機能します)。したがって、EntityManagerFactory手動で(通常はサーブレットまたはヘルパークラスで)作成し、EntityManagerそこから取得する必要があります。

EntityManagerFactory emf  = Persistence.createEntityManagerFactory(PU_NAME);
EntityManager entityManager = emf.createEntityManager();

の作成EntityManagerFactoryはコストのかかる操作であり、リクエストごとに実行しないでください。ただし、を作成することEntityManagerはできません。スレッドごとに1つ取得する必要があります。しかし、あなたの場合、これを処理するためにstruts2-persistencepluginを使用することをお勧めします。

ありがとう、しかし[...]JavaEEはインジェクションの使用に必須ではないようです[...]Springはそれに必要なエンジンをもたらします。

それはそう。しかし、あなたは他の質問で「春はまったくありません」と書き、箱から出して注射を提供できるものをリストしませんでした。とにかく、 struts2-persistencepluginをチェックしてください 、それはあなたのニーズに十分かもしれません。

于 2010-04-04T09:49:47.403 に答える