JTA транзакция в JPA - PullRequest
       33

JTA транзакция в JPA

0 голосов
/ 21 февраля 2011

Мой проект включает в себя JPA2.0 на платформе Hibernate, HSQLDB2.0 и JBoss5.1.

Я также определил источник данных в JBoss под именем hmc.

Persistence.xmlвыглядит так: <persistence-unit name=HMC><jta-data-source>java:/hmc</jta-data-source>...</persistence-unit>

Может кто-нибудь дать мне знать

  1. В чем разница между определением источника данных jta и non-jta в JPA persistence.xml.

  2. Как получить соединение, запустить транзакцию в режиме JTA?

Я немного запутался, как начать транзакцию для сохранения сущностей.

EntityManager работает всякий раз, когда выполняется запрос select, но не работает для сохранения данных.

Я пытался

  1. с EntityManager, он выдавал исключение IllegalStateException : A JTA EntityManager cannot use getTransaction().

  2. при поиске источника данных и ему удалось получить объект подключения, но не удалось запустить транзакцию из этого объекта javax.sql.Connection.

  3. с @Inject, @Resource для EJBContext, EntityManager и UserTransacНация.

С уважением,

Сатья

Ответы [ 2 ]

2 голосов
/ 22 марта 2011

Различия между JTA и не-JTA можно найти в этой статье

Чтобы получить доступ к соединению JDBC в режиме JTA, вы можете обратиться к этой статье

с EntityManager, он бросил IllegalStateException: JTA EntityManager не может использовать исключение getTransaction ().

Я думаю, что эта ошибка возникает из-за того, что контейнер управляет вашей транзакцией, а не вы (в противном случае это будет не jta, и вы будете использовать application-managed-entityManager)

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

с поиском источника данных и был в состоянии получить объект подключения, но не мог начать транзакцию с этого javax.sql.Connection object.

Я думаю, это уже здорово, так как вы уже можете получить соединение из источника данных, который является чистым способом сделать это. Я не думаю, что вам нужно беспокоиться о транзакции, поскольку она уже управляется используемым вами контейнером Java EE. Так почему бы просто не заняться делами со связью уже? : -)

0 голосов
/ 19 июня 2012

Ммм .. А как насчет пакетной обработки? Мы весьма ограничены!

http://docs.jboss.org/hibernate/orm/4.0/hem/en-US/html/batch.html

Мне нужен сеанс, мне нужна транзакция.

...