Я реализовал веб-сервис EJB3 / JPA без каких-либо серьезных проблем, и теперь я перешел на веб-сервис Spring-WS / JPA.Оба развертываются в Glassfish.
Мое понимание JPA ограничено, но по умолчанию транзакции управляются контейнером?Как вы измените это?С EJB3 все было просто, так как я мог просто вставить EntityManager
в «DAO» (обсуждение в другой раз!) С помощью @PersistentContext
, и контейнер позаботился бы о разграничении транзакций.С точки зрения базовой конфигурации, вот и все.Поскольку контейнер использует JTA, я указал тип транзакции "JTA" в модуле постоянства.В моем очень простом примере приложения с одним постоянным модулем мне не нужно заботиться о его названии. Ситуация усложняется, если у вас есть несколько постоянных модулей или контейнер позаботится об этом?
Теперь у меня естьпостроил равноценный веб-сервис с Spring-WS и повторно использовал мои сущности / дао, но я изо всех сил пытался заставить его работать.Я включил в контекст своего приложения определение компонента для EntityManagerFactory
(LocalContainerEntityManagerFactoryBean
), а также для JpaTransationManager
(ссылка на EntityManagerFactory
).Я также включил пространство имен PersistenceAnnotationBeanPostProcessor
и tx
.Я бы не подумал, что мне нужно делать что-то еще, но он не будет развертываться с Нет доступных поставщиков персистентности для ошибки "null" .
Нужно ли указывать фактическое сохранениеединица, для которой я хочу создать менеджера?
Спасибо,
Обновление:
Хорошо, я получаю следующую ошибку: javax.persistence.PersistenceException: Нет поставщика постоянствадля EntityManager с именем null.
Это, вероятно, моя весенняя конфигурация для фабрики / менеджера:
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManager" />
<bean
class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
<tx:annotation-driven/>
Я думаю, что мне может понадобиться или добавить что-то еще в нее ...
Еще одно обновление:
Исправлена эта проблема - Использовал LocalEntityManager
вместо LocalContainerEntityManager
.
Теперь у меня проблемы с сохранением моих объектов.У меня есть родительский объект с дочерним объектом в качестве свойства.Я вижу, что дочерний объект сохраняется в журналах, когда я вызываю em.persist(parent)
, но родительский объект не сохраняется.
Последнее обновление:
Родительский объект сохранялся, нотранзакция не была совершена до того, как я попытался ее получить (я так издеваюсь, не издеваясь).Думаю, теперь у меня есть суть.