我的问题是:如何将数据源映射到wildfly中配置的特定jndi-name,以便多个部署的.war文件都可以使用自己的特定数据源。映射应该在部署时进行,以便wildfly和特定项目内的配置就足够了。
我们有一个支持多租户的项目。结构如下:
customerSpecificProject
|-- ui (generic)
|----database (generic)
|----services (generic)
|----etc...
在数据库项目中,指定标准数据源,该数据源由标准的jndi-name java:/ xyzDS 进行。由于我们从tomcat迁移到wildfly,我们希望利用在AS中托管多个应用程序的能力。
为实现这一目标,我们必须将 java:/ xyzDS 映射到standalone.xml中定义的数据源:
<subsystem xmlns="urn:jboss:domain:datasources:4.0">
<datasources>
<datasource jta="true" jndi-name="java:/customer1DS" pool-name="c1DS" enabled="true" use-ccm="true">
...
</datasource>
<datasource jta="true" jndi-name="java:/customer2DS" pool-name="c2DS" enabled="true" use-ccm="true">
...
</datasource>
因此,我们尝试使用位于customerProject的 WEB-INF 文件夹中的 jboss-web.xml :
<?xml version="1.0" encoding="UTF-8"?>
<jboss-web xmlns="http://www.jboss.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.jboss.com/xml/ns/javaee
http://www.jboss.org/j2ee/schema/jboss-web_5_1.xsd">
<resource-ref>
<res-ref-name>java:/xyzDS</res-ref-name>
<jndi-name>java:/customer1DS</jndi-name>
</resource-ref>
</jboss-web>
数据库中的persistence.xml - 项目:
<?xml version='1.0' encoding='UTF-8'?>
<persistence version="2.1"
xmlns="http://xmlns.jcp.org/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_1.xsd">
<persistence-unit name="xyzDB" transaction-type="JTA">
<jta-data-source>java:/xyzDS</jta-data-source>
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>...</class>
...
<class>...</class>
<shared-cache-mode>NONE</shared-cache-mode>
<validation-mode>NONE</validation-mode>
<properties>
<property name="eclipselink.weaving" value="static" />
</properties>
</persistence-unit>
</persistence>
它似乎不起作用。我与一位遇到类似问题的同事交谈,并以相应的方式解决了 websphere AS问题。我不知道问题是否存在于实际customerProject的另一个lib(ui)中嵌套了databaseProject的结构中,或者是否是由错误配置引起的。
我们也在一些DAO中使用@Resource Annotation:
@Resource(lookup = "java:/xyzDS")
private DataSource dataSource;
也许映射有效,但不适用于已编译的DAO中的注释?但我不明白为什么这不起作用。
Stacktrace中的当前错误:
11:18:20,839 ERROR [org.jboss.as.controller.management-operation](DeploymentScanner-threads - 1)WFLYCTL0013:操作(“完全替换 - 部署”)失败 - 地址:([]) - 失败描述:{ “WFLYCTL0080:服务失败”=&gt; {“jboss.deployment.unit。\”xyz.war \“。INSTALL”=&gt; “服务jboss.deployment.unit。\”xyz.war \“中的org.jboss.msc.service.StartException。安装:WFLYSRV0153:无法处理部署INSTALL部署\”xyz.war \“ 引起:java.lang.IllegalArgumentException:WFLYEE0047:java上的冲突绑定不兼容:/ xyzDS source:lookup(java:/ customer1DS)“},
编辑:已尝试添加:
<property name="wildfly.jpa.twophasebootstrap" value="false"/>
到persistence.xml
答案 0 :(得分:0)
您是否在wildfly-development.1055759.n5.nabble.com中查看了问题/答案?在此交换中,确定持久性单元需要以
的形式提示<property name="wildfly.jpa.twophasebootstrap" value="false"/>
我不知道这是否适用于您的情况,但值得一看。