サーブレットFilter
のdoFilter
メソッド内のEntityManagerFactory
からEntityManager
を取得しています。これをサーブレットに渡し、途中で閉じます。EntityManagerのライフタイムはサーブレットリクエストごとにする必要がありますか?それとももっと長い?
寿命がEntityManager
である限り、これは良い方法ですか?または、私はEntityManager
の生涯を変えなければなりませんか?
サーブレットFilter
のdoFilter
メソッド内のEntityManagerFactory
からEntityManager
を取得しています。これをサーブレットに渡し、途中で閉じます。EntityManagerのライフタイムはサーブレットリクエストごとにする必要がありますか?それとももっと長い?
寿命がEntityManager
である限り、これは良い方法ですか?または、私はEntityManager
の生涯を変えなければなりませんか?
いいですね。
フィルタとサーブレットは、ステートレスまたはステートフルEJBとは異なり、複数のスレッドによって同時に使用されます。したがって、EntityManager
はリクエストごとに検索する必要があります。
また、SingleThreadModel
が必要であることを指定することで、Webコンテナにサーブレットへのアクセスを同期させることもできます(フィルタの場合は、EntityManager
を一度フィルタまたはサーブレットに挿入できます)。
上記の情報はPersistenceContext in a web appについてのこの記事からのものです。
EntityManager
を取得することは、安価な操作(工場自体を取得することとは異なります)と考えています。少なくとも、これはHibernateのSessionとSessionFactoryのケースでした。だから私はあなたのオリジナルのデザインに行きます。
ご了承いただきありがとうございます: – necromancer
あなたがリンクしている記事はいいですが、ひどく誤解を招くタイトルがあります。それは "サーブレットで@PersistenceContextを使用しないでください"でした。 – BalusC