サーブレットとサーブレットへのEJBの挿入に関して、以下のブログに出くわしました。著者は標準的な観点から書いています。
http://tamanmohamed.blogspot.ie/2012/03/jpa-why-we-need-to-specizes-type-level.html http://tamanmohamed.blogspot.ie/2012/03/jpa-thread-safety -when-injecting.html
「EJB3ステートフルBeanをサーブレットインスタンスフィールドに注入することはスレッドセーフではありません。同じように、@PersistenceContextを使用してEntityManagerをサーブレットインスタンス変数に注入することもスレッドセーフではありません。EntityManagerはスレッドセーフになるように設計されていません。」
とにかく、Glassfish-3.1.2の実装で同僚と書いているコードについて心配し始めています。下記参照。Dukeの個別指導チュートリアルで見たコードに似ていると思ったので、問題ないはずです(FaceServletsが@PersistnceContext EntityManagerを使用してステートレスリクエストBeanを呼び出す場合)。
ただし、コンテナ管理のEntityManagerは、サーブレットの多くのインスタンスによって呼び出されるステートレスBeanの多数の同時呼び出しに対処できると思います。
これは、Oracleデータベースを使用するGlassfish-3.1.2の正しい仮定ですか?これまでは問題なく動作しているようですが、高負荷では動作しない可能性があります。
洞察を事前に感謝します。申し訳ありませんが、私はこれにとても慣れていません。フィオナ
Servlet
{
@EJB
private StatelessbeanBlah
:
}
@Stateless
StatelessBeanBlah
{
@PersistenceContext(unitname = "...")
private EntityManager em;