@PersistenceContext EntityManager thread -безопасность в Spring и Java EE

EntityManagerявляется небезопасным для резьбы -по определению. Спецификации сервлетов говорят, что в нераспределенной -среде и без реализации SingleThreadModelсуществует только один экземпляр сервлета для каждого определения .

Следовательно, в Java EE, когда вы вставляете EntityManagerчерез @PersistenceContextв поле сервлета -, это не является потокобезопасным:

public class MyServlet extends HttpServlet {

    // Not thread-safe, should be using EMF instead.
    @PersistenceContext
    private EntityManager em;
}
  1. Правильно ли говорить, что хотя областью действия компонентов Spring по умолчанию является одноэлементный, EntityManagerявляется потокобезопасным -, поскольку Spring использует ThreadLocalдля привязки своей транзакции и EntityManagerк ней?

  2. Приведенный выше пример сервлетов по-прежнему актуален для Spring? Это все еще не потокобезопасно -?

  3. Подход ThreadLocalработает только для управляемых компонентов Spring, а простой сервлет не является одним из них?

  4. Насколько я помню, за вставку EntityManagerотвечает контейнер. В реализации Glassfish Java EE именно сервер приложений обнаруживает @PersistenceContextкак точку внедрения.
    Как это выглядит весной? Отвечает ли Spring Framework за обнаружение этих аннотаций или за это отвечает разработчик JPA?

12
задан Piotr Nowicki 30 April 2012 в 08:22
поделиться