私は IBM RAD を使用して、いくつかの JPA エンティティーを開発し、それらから対応する JPA マネージャー Bean を開発しています。Manager Bean (RAD によって生成される) には、次のメンバーがあります。
@PersistenceUnit
private EntityManagerFactory emf;
ステートレス EJB (3.0) からこのマネージャー Bean を正しくインスタンス化する (または参照を取得する) 方法がわからないので、EntityManagerFactory
インスタンスを渡すことができるマネージャー Bean にコンストラクターを追加しました。EntityManagerFactory
次のように `@PersistenceUnit' アノテーションを使用して、EJB でへの参照を取得します。
@PersistenceUnit
private EntityManagerFactory _entityManagerFactory;
これはかなり不必要に思えます。JPA マネージャー Bean への参照をすぐに取得できるように、コンテナー (私の場合は Websphere 7.0) に何らかの方法でこれを「ブートストラップ」するように指示する方法が必要だと思います。それは...ですか?
更新: 十分に詳しく説明していないようです。そのために残念。
- 関連する 3 つのオブジェクトがあります。JPA エンティティ、JPA エンティティ マネージャ、およびステートレス EJB です。
- JPA Entity Manager クラス (EJB ではない) は RAD によって作成され、それに便利なメソッド (名前付きクエリ) があります。member も定義されてい
@PersistenceUnit private EntityManagerFactory emf
ます。直接使用できることはわかっていますEntityManager
が、便利なメソッドに MyEntityManager を使用したいと思います。 - 上記のアノテーションを使用して、ステートレス EJB で EntityManager または EntityManagerFactory への参照を取得できます (また、Bozho が提案するように)。
- ステートレス EJB で JPA Entity Manager への参照を取得したいと考えています。それを「新規」にすると (new MyEntityManager())、emf フィールドは null になります。回避策は、EJB で @PersistenceUnit フィールドを宣言し、それを JPA Entity Manager に渡して使用することです。
- 考えてみれば、JPA Entity Manager を EJB として宣言して、それで完了できるかもしれません... (これもまた不必要に思えますが)。おそらく行方不明になっている PersistenceContext.getJpaManager(MyEntityManager.class) の行に沿ったメソッドがあると思いました。