2012-04-11 5 views
2

サーブレットFilterdoFilterメソッド内のEntityManagerFactoryからEntityManagerを取得しています。これをサーブレットに渡し、途中で閉じます。EntityManagerのライフタイムはサーブレットリクエストごとにする必要がありますか?それとももっと長い?

寿命がEntityManagerである限り、これは良い方法ですか?または、私はEntityManagerの生涯を変えなければなりませんか?

答えて

5

いいですね。

フィルタとサーブレットは、ステートレスまたはステートフルEJBとは異なり、複数のスレッドによって同時に使用されます。したがって、EntityManagerはリクエストごとに検索する必要があります。

また、SingleThreadModelが必要であることを指定することで、Webコンテナにサーブレットへのアクセスを同期させることもできます(フィルタの場合は、EntityManagerを一度フィルタまたはサーブレットに挿入できます)。

上記の情報はPersistenceContext in a web appについてのこの記事からのものです。

EntityManagerを取得することは、安価な操作(工場自体を取得することとは異なります)と考えています。少なくとも、これはHibernateのSessionとSessionFactoryのケースでした。だから私はあなたのオリジナルのデザインに行きます。

+0

ご了承いただきありがとうございます: – necromancer

+1

あなたがリンクしている記事はいいですが、ひどく誤解を招くタイトルがあります。それは "サーブレットで@PersistenceContextを使用しないでください"でした。 – BalusC

関連する問題