EntityManager定義上、スレッドセーフではありません。サーブレットの仕様によると、非分散環境で を実装していない場合、定義ごとにサーブレット インスタンスは 1 つしかSingleThreadModelありません。
したがって、Java EE でサーブレットのフィールドにEntityManagerスルーを挿入すると、スレッドセーフではありません。@PersistenceContext
public class MyServlet extends HttpServlet {
// Not thread-safe, should be using EMF instead.
@PersistenceContext
private EntityManager em;
}
Spring Bean のデフォルトのスコープはシングルトンですが、Springがトランザクションをバインドするために
EntityManager使用するため、これはスレッドセーフであると言うのは正しいですか?ThreadLocalEntityManager上記のサーブレットの例は Spring でも有効ですか? まだスレッドセーフではありませんか?
この
ThreadLocalアプローチは Spring 管理 Bean に対してのみ機能し、プレーンなサーブレットはその 1 つではありませんか?私が覚えている限りでは、 を注入するのはコンテナの責任
EntityManagerです。Glassfish Java EE 実装では、@PersistenceContextas インジェクション ポイントを発見するのはアプリケーション サーバーでした。
春にはどのように見えますか?Spring Framework はそれらのアノテーションを発見する責任がありますか、それとも JPA 実装者の責任ですか?