在同一服务器上使用不同的数据源多次部署EAR

时间:2014-09-11 18:45:27

标签: java-ee jpa jndi wildfly

让我们假设一个Java EE 6应用程序打包为EAR(一个EJB-JAR,N个Web模块和一些库),使用JPA进行持久化。

要求是,在一台机器上需要运行多个客户的应用程序。每个客户都拥有自己的数据库。

现在的问题是,您在哪里为每个客户配置数据源,以及如何告知应用程序(部署时或何时)使用哪个数据源?

首先采取:将persistence.xml中特定于容器的JNDI名称替换为特定于应用程序的名称。在部署时,特定于应用程序的名称需要绑定到特定于容器的名称。

问题:从我读到的内容中无法使用persistence.xml进行引用,除非您禁用增强实体并因此降低性能,除非我完全误解了。 (来源:http://lists.jboss.org/pipermail/wildfly-dev/2014-January/001541.html

其次我发现无法在EAR级别上执行资源引用,我想必须在application.xml中执行它,这是我的情况下由maven生成的,因此我要在POM,但不知道如何,EJB插件的引用没有提到。

但也许我只是在错误的轨道上。任何帮助将不胜感激。

更新 - 2014-09-12:从POM.xml中删除application.xml的自动生成并将<resource-ref/>添加到a​​pplication.xml,映射本地JNDI名称数据源到容器特定的作品。 (这让我非常高兴。)

<resource-ref>
    <res-ref-name>jdbc/customer-alpha</res-ref-name>
    <res-type>javax.sql.XADataSource</res-type>
    <lookup-name>java:jboss/datasources/customer-alpha</lookup-name>
</resource-ref>

我仍然不确定这是不是真的会这样做。还有一些其他问题,但它们会被单独询问,例如:谁将映射添加到application.xml以及何时,部署此类应用程序的工作流程将是什么。


- 马丁

1 个答案:

答案 0 :(得分:1)

我意识到这个问题的日期有点过了,但只想指出属性替换功能: https://docs.jboss.org/author/display/WFLY8/Java+EE+Application+Deployment+Configuration

根据我的阅读(没有测试它 - 但是对于其他情况也这样做了),你应该能够将它应用到你的persistence.xml。

所以基本上你可以设置一个带有jndi-name的系统属性来用于给定的应用程序实例,并在你的persistence.xml中引用属性。

意味着您不需要开始接触您的耳朵,同时启用每个客户的特异性。