2013-03-11 5 views
1

@Singleton EJBs как это:синглтон с PersistenceContext EJB и LockType.READ

@Singleton 
    public class MySingleton { 
    @PersistenceContext 
    private EntityManager em; 
    ... 

    @Lock(LockType.READ) 
    public void doPersistanceAction() { 
    } 

    } 

Таким образом, все абоненты из MySingleton # doPersistanceAction() будет использовать один и тот же экземпляр EntityManager одновременно. И контекст постоянства с прикрепленными объектами будет делиться между вызывающими. И транзакция, начатая одним вызывающим абонентом, может быть совершена другим. Является ли контейнер ejb такой ситуацией?

ответ

1

Таким образом, все абоненты из MySingleton # doPersistanceAction() будет использовать тот же самый экземпляр EntityManager одновременно

Да, но это не является предпочтительным & не поточно-. Вместо этого вы должны ввести EntityManagerFactory &, затем в рамках метода вы можете получить EntityManager.

и сохранение контекста с прикрепленными entitys разделят между звонящие

Да, это же EntityManager экземпляра совместно.

И транзакция запускается одним абонентом может быть поручены другим

LockType.READ: только для чтения операций. Позволяет одновременный доступ к методам, обозначенным как READ, до тех пор, пока не будет заблокирована блокировка WRITE.

Поэтому, поскольку у вас есть операция только для чтения, это не имеет значения, но вам нужно пересмотреть дизайн.

Должен ли контейнер ejb обрабатывать такую ​​ситуацию?

Контейнер будет отвечать за инициализацию, впрыск, параллелизм и т. Д. Для одноточечного компонента, но вы должны использовать его правильно.

Смежные вопросы