EJB и Hibernate в приложении Struts

У меня есть приложение, в котором есть комбинация struts 1.1 и EJB 2, но теперь мы вводим в него новую часть - hibernate 3.2. DAO гибернации запускается параллельно с DAO сессионных компонентов EJB 2 с чистым JDBC. В этом случае меня беспокоит управление соединениями jdbc. Поскольку EJB 2.0 имеет управляемые контейнером соединения и транзакции. Но в случае гибернации мы начинаем и фиксируем транзакцию гибернации. Можно ли с уверенностью предположить, что с этой архитектурой не будет никаких проблем.

Нужна помощь в анализе.

PM


Я размышлял над той же проблемой, если модуль спящего режима, который может получить доступ к существующим таблицам, используется JDBC DAO, транзакция которого управляется Session Beans. Но вот мой подход:

  1. У меня будет делегат, который вызывает сеансовый компонент EJB, и, поскольку этот компонент будет отвечать за управление транзакциями, я создам свои DAO в спящем режиме и буду вызывать их из этого сеансового компонента, что, как я предполагаю, не будет иметь никаких проблем.

  2. Фабрика сеанса hibernate для этого приложения будет создана один раз с использованием плагина hibernate, который будет частью конфигурации struts config xml и будет сохранен как часть контекста сервлета, а затем класс действия передаст этот экземпляр sessionfactory из делегата сеансового компонента EJB. в спящий режим DAO.

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

Пожалуйста, помогите мне, если я на правильном пути со своими предположениями?


person Gopal    schedule 09.11.2010    source источник


Ответы (3)


Транзакции разграничивают логическую единицу работы и, следовательно, по своей сути изолированы. Но мне интересно, зачем вам сочетание того и другого. Если вы уже используете EJB2 + JDBC, почему бы не придерживаться этого?

person Aravind Yarram    schedule 09.11.2010

Hibernate можно без проблем использовать с сессионными компонентами CMT (или BMT), совместно использовать пул соединений с кодом JDBC и участвовать в той же транзакции.

См. Весь раздел 11.2. Демаркация транзакций базы данных и, в частности, 11.2.2. Используя JTA.

Что не ясно, так это то, будет ли модуль Hibernate «изолирован» от объектов, управляемых через JDBC. Если вы будете обращаться к одним и тем же таблицам через оба API, вам придется принять некоторые меры предосторожности:

  • не ожидайте смешивания сущностей JDBC в графе сущностей Hibernate (хотя возможно и обратное).
  • уважать и имитировать оптимистичную стратегию параллелизма Hibernate при обновлении строк через JDBC
  • обход API Hibernate не приведет к обновлению кеша (если вы используете кеш 2-го уровня), и в этом случае вам придется запускать его самостоятельно.
person Pascal Thivent    schedule 10.11.2010

Вот одно из возможных решений

Общий источник данных JNDI, который будет использоваться как в EJB, так и в Hibernate.

person Ratna Dinakar    schedule 06.12.2010