首页 文章

如何使用部署描述符在Wildfly中映射数据源

提问于
浏览
1

我的问题是:如何将数据源映射到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 回答

  • 0

    你在wildfly-development.1055759.n5.nabble.com检查了问题/答案吗?在这次交换中,确定持久性单元需要以形式提示

    <property name="wildfly.jpa.twophasebootstrap" value="false"/>
    

    我不知道这是否适用于您的情况,但值得一看 .

相关问题