ejb фиксирует соединение? - PullRequest
       14

ejb фиксирует соединение?

0 голосов
/ 06 декабря 2009

Я использую сессионный компонент в моем приложении, и транзакция контролируется только на уровне EJB. Проблема, с которой я столкнулся, заключается в некотором коммите. Я использую то же соединение, что и EJB, для вставки в одну таблицу, но если транзакция зафиксирована, тогда эта вставка не фиксируется в базе данных ... Может ли кто-нибудь помочь мне с проблемой ..

Ответы [ 2 ]

2 голосов
/ 06 декабря 2009

Я не эксперт по EJB, я обычно работаю с простыми старыми объектами Java, но ...

Ваша проблема, вероятно, связана с тем фактом, что EJB не выполняют управление транзакциями в соединенииуровень.Они используют Java Transaction Service для создания транзакций, которые могут использовать несколько соединений.Таким образом, чтобы ваша вставка стала частью транзакции EJB, вы должны получить эту транзакцию с сервера транзакций и сделать вашу вставку частью этой транзакции.Я считаю, что то, как вы это делаете, зависит от того, какая у вас среда EJB (EJB2 или 3 и т. Д.)

Но если вы находитесь в среде EJB и хотите вставить материал в те же транзакции, что и EJBимеет ли это смысл, разве не имеет смысла также создавать EJB для таблицы, в которую вы хотите вставить, и позволить серверу приложений выяснить это?

0 голосов
/ 06 декабря 2009

В общем, упрощенно, ответ на ваш вопрос - да, Connection.commit () вызывается, когда EJB фиксируется.

То, что фактически делает EJB, зависит от того, как определен источник данных (транзакционный или нет) и разрешена ли последняя оптимизация ресурса.

Я использую то же соединение, что и EJB

Откуда ты знаешь? Некоторые упаковщики соединений (например, Weblogic, если я правильно помню) не имеют возможности сравнить два соединения на равенство. Для этого нужно использовать API поставщика. Поэтому, даже если вы считаете, что два соединения одинаковы, это не обязательно.

Как вы получили эту связь? Отсюда? В зависимости от версии EJB вы должны получать соединение только из источника данных транзакций (EJB2) или использовать контекст постоянства и JPA (EJB3). Некоторый упрощенный код того, что вы делаете, очень помог бы указать на вашу ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...