Я немного смущен странным поведением связанных объектов JPA. У меня есть три пучка:JPA Entity (в нескольких единицах сохранения) в OSGi (Spring DM) Окружение меня смущает
Пользователь расслоение содержат некоторые пользовательские связанные объекты, но в основном User
объект.
Энергетический пакет содержит некоторые связанные с энергией объекты, в частности ConsumptionTerminal
, который содержит список пользователей.
Индексный пакет содержит объект Index, который не имеет никакой зависимости.
среда Моего OSGi заключается в следующем:
A DataSource расслоения, которые обеспечивают 2 услуги: DataSource и jpaVendorAdapter.
Три связки. Они потребляют
dataSource
иjpaVendorAdapter
.Их
module-context.xml
файл выглядит следующим образом:И все они имеют
persistence.xml
файл:пользователя
<?xml version="1.0" encoding="UTF-8"?> <persistence> <persistence-unit name="securityPU" transaction-type="JTA"> <jta-data-source>java:/securityDataSourceService</jta-data-source> <class>net.nextep.amundsen.security.domain.User</class> <!-- [...] --> <exclude-unlisted-classes>true</exclude-unlisted-classes> <properties> <property name="eclipselink.logging.level" value="INFO" /> <property name="eclipselink.ddl-generation" value="create-tables" /> <property name="eclipselink.ddl-generation.output-mode" value="database" /> <property name="eclipselink.orm.throw.exceptions" value="true" /> </properties> </persistence-unit> </persistence>
Energy Index
<?xml version="1.0" encoding="UTF-8"?> <persistence> <persistence-unit name="energyPU" transaction-type="JTA"> <jta-data-source>java:/securityDataSourceService</jta-data-source> <class>net.nextep.amundsen.security.domain.User</class> <class>net.nextep.amundsen.energy.domain.User</class> <!-- [...] --> <exclude-unlisted-classes>true</exclude-unlisted-classes> <properties> <property name="eclipselink.logging.level" value="INFO" /> <property name="eclipselink.ddl-generation" value="create-tables" /> <property name="eclipselink.ddl-generation.output-mode" value="database" /> <property name="eclipselink.orm.throw.exceptions" value="true" /> </properties> </persistence-unit> </persistence>
: Это один имеет самый простой persistence.xml с помощью всего класса Index (не общий класс).
Я использую по имени @PersistenceUnit
аннотацию, как @PersitenceUnit(name = 'securityPU')
(для пучка пользователя).
И, наконец, я использую EclipseLink в качестве поставщика JPA и Spring DM (+ Spring DM Server, в процессе разработки)
Проблема заключается в следующем:
- Когда пакет пользователя развернут , Я могу сохранить объекты User.
- Когда развертываются пакеты User bundle и Energy bundles, я не могу сохранять объекты User (ни объект Energy).Но у меня нет никаких исключений вообще!
- Нет проблем с комплектом индексов.
Ошибка является независимой от dataSource (я пытался использовать PostgreSQL и MySQL до сих пор).
Моим первым выводом было то, что <class>net.nextep.amundsen.security.domain.User</class>
в обоих устройствах настойчивости вызывают проблемы. Я пробовал без него (и скрывал объект, зависящий от пользователя, в пакете Energy), но он тоже не удался.
Я немного смущен этой ошибкой. В этом контексте я также не совсем уверен в управлении транзакциями.
я был не один, кто разработан этой архитектуры (но я сказать стажер OK, не проверив это .. позор мне), но если бы я мог понять эту ошибку, и, возможно, исправить ее, не переписать сверток (и перерыв мой стаж работы), я был бы признателен. Я делаю что-то неправильно ? (это очевидно, но что ..) Пропустил ли я что-то во время чтения документации?
Кстати, я также искал некоторые рекомендации или советы, когда дело доходит до JPA, EclipseLink (или любого другого поставщика JPA) и Spring DM (и OSGi в целом). Я нашел интересные слайды от Майка Кейта по этой теме (просмотрев Stackoverflow).
Ок, я, возможно, что-то нашел. Последний, развернутый с менеджером сущностей, является единственным, кто сможет что-то сохранить. Возможно, мне придется найти динамический способ добавления/удаления объектов в пакет службы Entity, чтобы исправить ошибку. –