我的问题是:如何将数据源映射到wildfly中配置的特定jndi-name,以便多个部署的.war-files都可以使用自己的特定数据源 . 映射应该在部署时进行,以便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 -Project:
<?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问题 . 我不知道问题是否存在于具有嵌套的databaseProject在另一个lib(ui)中的实际customerProject的结构中,或者是否是由错误的配置引起的 .
我们还在一些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:Failed services”=> {“jboss.deployment.unit . \”xyz.war \“ . INSTALL”=>“org.jboss.msc.service.StartException in service jboss.deployment.unit . \” xyz.war \“ . 安装:WFLYSRV0153:无法处理部署INSTALL部署\”xyz.war \“引起:java.lang.IllegalArgumentException:WFLYEE0047:java上的冲突绑定不兼容:/ xyzDS source:lookup(java:/ customer1DS)“},
编辑:已经尝试添加:
<property name="wildfly.jpa.twophasebootstrap" value="false"/>
to persistence.xml
1 回答
你在wildfly-development.1055759.n5.nabble.com检查了问题/答案吗?在这次交换中,确定持久性单元需要以形式提示
我不知道这是否适用于您的情况,但值得一看 .