TomEE指向错误的DataSource

时间:2014-07-14 10:52:36

标签: java sql jdbc persistence tomee

我正在使用单个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}}指向错误的架构?

1 个答案:

答案 0 :(得分:1)

在我看来,你的persistence.xml Application2永远不会被加载。这并不令人惊讶,因为已经有presistence.xml运行上下文。

尝试将Application2中的条目添加到应用程序1中,看看是否有效。

或者看一下这个问题:How can I make a JPA application access different databases?并查看它是否有帮助。

如果两者都没有从Application1解开Application2并在不同的上下文中运行它们,那么它们每个都有自己的persistence.xml运行,然后再次调试它。