Я пытаюсь сохранить один и тот же объект как для баз данных MySQL, так и для Postgres (это в первую очередь для выявления любых несоответствий и выработки деталей любых проблем, связанных с двойной записью, - которые я здесь использовал), В статьях, которые я нашел, описаны все описанные решения, которые зависят от дополнительных фреймворков. Я пытаюсь решить это, используя Glassfish 4.0 из коробки, JPA 2.1 с EclipseLink 2.5 в качестве поставщика JPA. Я использую Eclipse и понимаю, что среда IDE не поддерживает настройку нескольких единиц сохранения в файле persistence.xml, поэтому я пишу XML для этого напрямую.
Я ожидал сделать что-то подобное в коде (в том же методе):
@PersistenceContext(name = "MyAppMySQLPU")
EntityManager emMySQL;
@PersistenceContext(name = "MyAppPostgresPU")
EntityManager emPostgres;
//...etc...
MyThing thing = new MyThing();
//...etc...
emMySQL.persist(thing);
emPostgres.persist(thing);
и используйте файл persistence.xml
, содержащий это:
<persistence-unit name="MyAppPostgresPU">
<jta-data-source>jdbc/PostgresPool_test</jta-data-source>
<class>model.MyThing</class>
</persistence-unit>
<persistence-unit name="MyAppMySQLPU">
<jta-data-source>jdbc/MySQLPool_test</jta-data-source>
<class>model.MyThing</class>
</persistence-unit>
Когда я это сделаю, я получаю следующую ошибку:
SEVERE: Exception while invoking class org.glassfish.persistence.jpa.JPADeployer prepare method
SEVERE: Exception while preparing the app
SEVERE: Exception while preparing the app : Could not resolve a persistence unit corresponding to the persistence-context-ref-name [MyAppPostgresPU] in the scope of the module called [MyApp]. Please verify your application.
Но если я включаю только одну из фраз <persistence-unit>
(неважно, какой из них), объект сохраняется в связанной базе данных - я просто не могу понять, как заставить его работать с обоими в то же время (без использования функций сохранения в дополнительных рамках).