我正在使用单个TomEE实例来部署2个Web应用程序。两个应用程序都使用不同的数据库和不同的实体。
应用程序2已集成到应用程序1中,因此我在运行时随时都需要该架构。
我在DataSources
中配置了tomee.xml
,如下所示:
<tomee>
<Resource id="testDBPool" type="DataSource">
jdbcDriver = "com.mysql.jdbc.Driver"
url = "jdbc:mysql://localhost:3306/testDB"
username = "admin"
password = "admin"
</Resource>
</tomee>
<tomee>
<Resource id="testDBPool2" type="DataSource">
jdbcDriver = "com.mysql.jdbc.Driver"
url = "jdbc:mysql://localhost:3306/testDB2"
username = "admin"
password = "admin"
</Resource>
</tomee>
在应用程序1中,我使用此persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="testDBPool" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>jdbc/testDBPool</jta-data-source>
</persistence-unit>
</persistence>
在应用程序2中,我使用此persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="testDBPool2" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>jdbc/testDBPool2</jta-data-source>
</persistence-unit>
</persistence>
当我尝试运行应用程序时,它正在抛出testDB.table1 is not exist
,而实际table1
存在于testDB2
架构中但不在testDB
中,我不明白为什么它是{{1}}指向错误的架构?
答案 0 :(得分:1)
在我看来,你的persistence.xml
Application2永远不会被加载。这并不令人惊讶,因为已经有presistence.xml
运行上下文。
尝试将Application2中的条目添加到应用程序1中,看看是否有效。
或者看一下这个问题:How can I make a JPA application access different databases?并查看它是否有帮助。
如果两者都没有从Application1解开Application2并在不同的上下文中运行它们,那么它们每个都有自己的persistence.xml
运行,然后再次调试它。