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