7

Различные частичные описания объекта привели меня к подозрению, что BMT сильно привязан к управляемому приложениям EntityManager (и использованию UserTransaction) и что CMT сильно привязан к управляемому контейнером EntityManager.Какова связь между BMT/CMT и управляемым приложениями/контейнером EntityManager?

Может ли кто-нибудь дать (или указать мне) четкое объяснение того, как именно BMT/CMT относится к управляемому приложениям/контейнерам EntityManager?

Какие сочетания допускаются между типами демаркации транзакций и типами управления EntityManager?

  • Могу ли я объединить управляемый приложениями EntityManager с CMT?
  • Могу ли я объединить управляемый контейнером EntityManager с BMT?

Кроме того, какова связь между UserTransaction и BMT/CMT, а также управляемым EntityManager или управляемым контейнером?

  • Могу ли я использовать UserTransaction вместе с управляемым контейнером EntityManager?
  • Использует ли UserTransaction BMT и наоборот?

EDIT: Согласно http://www.byteslounge.com/tutorials/container-vs-application-managed-entitymanager Я могу комбинировать CMT/BMT с управляемыми EntityManager приложениями/контейнерами любым способом, который мне нравится. Это все еще оставляет мне вопрос о взаимоотношениях между UserTransaction и BMT. Означает ли это другое?

EDIT: вопреки ссылке размещено выше, http://docs.oracle.com/javaee/6/tutorial/doc/bnbqw.html#bnbra утверждает, что "Применение управляемого менеджеры сущностей автоматически не распространяется контекст транзакции JTA Таких приложения необходимости ручного доступа усиления менеджера JTA транзакций и . добавьте информацию о демаркации транзакции при выполнении операций с объектами. Интерфейс javax.transaction.UserTransaction определяет методы для начала, фиксации и откат транзакций. Внесите экземпляр UserTransaction, создав переменную экземпляра, аннотированную с помощью @Resource ». Для меня это звучит так, как «управляемые сущностью управления сущностями требуют демаркации транзакций, управляемых бином». Кто такой? Oracle или Byteslounge?

ответ

3

Я постараюсь ответить на ваши вопросы, но есть больше комбинаций возможных сценариев, чем вы просили, и что я не буду пытаться ответить на них. В следующем ответе по контейнеру управляемого я имею в виду JTA (не RESOURCE_LOCAL), сделка в области видимости EntityManager (вводится с PersistenceContextType.TRANSACTION вместо PersistenceContextType.EXTENDED)

Могу ли я комбинировать прикладную управляемого EntityManager с КРТ?

Да, хотя это не обычный прецедент. В основном созданный администратор сущностей автоматически присоединяется к текущей транзакции. Вы можете найти пример, что в 2.0 спецификации JPA,

7.7.1.1 Application-managed Persistence Context used in Stateless Session Bean 

Могу ли я объединить управляемые контейнером EntityManager с BMT?

Да, я видел unofficialexamples и могут быть использованы для того, чтобы контролировать только когда начать/совершить/откатить транзакцию, как впрыскивается EntityManager автоматически вступил в сделку (т.е. вы не контролируете, когда EntityManager присоединяется к текущей транзакции JTA). Я не видел официальных примеров (если да, пожалуйста, предоставьте их в комментариях для полноты).

Могу ли я использовать UserTransaction вместе с управляемым контейнером EntityManager?

Вопрос не правильно выразился: с UserTransaction вы пытаетесь контролировать сделку и таким образом, правильный вопрос будет то, что комбинация возможна: UserTransaction с СМТ (что не имеет смысла, так как сделка контролируется контейнером) или с BMT (это типичный юридический случай). И теперь вы получаете ответ на свой исходный вопрос с управляемым контейнером сущ. Человек (в зависимости от CMT или BMT).

Использует ли UserTransaction BMT и наоборот?

Я бы так сказал, потому что в CMT транзакция JTA автоматически начинается с контейнера.

К вашему последнему вопросу: что вы найдете на веб-странице Oracle, кажется мне неправильным. Как я уже сказал в своем первом вопросе (с официальным примером), вы можете комбинировать управляемый сущностью объект entitymanager в CMT (без UserTransaction, пожалуйста, проверьте пример в спецификации).

Кроме того, я нашел некоторые другие недоумения в разных местах, и я считаю, что официальная документация на самом деле является спецификацией JPA (вместе с Java EE). Если там что-то написано, это не работает, подумайте (и, пожалуйста, сообщите!) Это ошибка.

+0

Благодарим вас за этот очень подробный ответ! – Student

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