3

我正在使用 JPA 项目做一些 EJB,该项目将一些实体映射/持久化到 mysql 数据库。我在 persistence.xml 中定义了持久性单元,如下所示:

  <persistence-unit name="MyAppPU" transaction-type="JTA">
    <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
    <jta-data-source>MyAppDS</jta-data-source>
    <properties>
      <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)" />
      <property name="openjpa.jdbc.DBDictionary" value="mysql" />
      <property name="openjpa.Log" value="DefaultLevel=WARN, Tool=INFO" />
    </properties>
  </persistence-unit>

然后,在 tomee/conf/tomee.xml 文件中,我定义了这样的数据源:

<Resource id="MyAppDS" type="DataSource">
    JdbcDriver          com.mysql.jdbc.Driver
    JdbcUrl             jdbc:mysql://127.0.0.1:3306/MyAppDB
    UserName            root
    Password            123
    JtaManaged          true
    DefaultAutoCommit   false
</Resource>

所有这一切都很好,我创建了 MyApp.jar,将其部署到 TomEE 服务器,对其进行测试,然后我在数据库中获取了 mysql 表。我的问题是“还有其他地方可以定义数据源资源吗?” 还是必须在 tomee/conf/tomee.xml 文件中?它可以在应用程序结构中的某个位置、某个 xml 文件中定义,并在应用程序 jar 文件中部署到服务器吗?

4

3 回答 3

3

这就是 JNDI 数据源的全部意义,将其外部化到您的应用程序之外,因此您可以修改它而无需重新编译或重新打包。所以最好这样离开它。

出于测试目的,一些 EE 服务器,例如 JBoss (Wildfly) 允许您在项目中定义它。

于 2013-10-21T16:40:38.627 回答
3

回答这个问题可能有点晚了,您可以在 tomee 中将资源定义放在WEB-INF/resources.xml.

于 2014-09-11T21:10:43.690 回答
0

您只需设置 tomee.xml。如果你使用的是 Eclipse,你必须将 tomee.xml 复制到服务器配置/Tomee 中才能将它识别到 web 项目中,否则你会遇到麻烦。

于 2016-03-23T03:09:16.730 回答