如何为Liquibase数据源配置和persistence.xml应用DRY?

时间:2014-11-19 14:39:51

标签: java java-ee jboss web.xml liquibase

我正在使用liquibase和Java EE与JBoss。我在项目中配置persistence.xml文件以指定我想要使用的数据源。

在JBoss配置中:

<datasources>
    <datasource jta="true" jndi-name="java:jboss/datasources/WebStoriesDS" pool-name="java:jboss/datasources/WebStoriesDS" enabled="true" use-java-context="true" use-ccm="true">
        <connection-url>jdbc:postgresql://127.0.0.1:5432/mydatabase</connection-url>
        <driver>org.postgresql</driver>
        <security>
            <user-name>postgres</user-name>
            <password>postgres</password>
        </security>
    </datasource>
    <drivers>
        <driver name="org.postgresql" module="org.postgresql">
            <xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class>
        </driver>
     </drivers>
</datasources>

在项目的persistence.xml中:

<persistence version="2.0" xmlns="http://java.sun.com/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_0.xsd">
  <persistence-unit name="PersistenceUnit">
    <jta-data-source>java:jboss/datasources/WebStoriesDS</jta-data-source>
  </persistence-unit>
</persistence>

项目的web.xml:

<context-param>
  <param-name>liquibase.datasource</param-name>
  <param-value>java:jboss/datasources/WebStoriesDS</param-value>
</context-param>

好吧,正如您所看到的,我在JBoss中有1个数据源引用,在我的项目中有2个引用。我如何在这里应用DRY原则,在JBoss配置中只使用1个引用,在我的项目中只使用1个引用?使用属性文件来保存数据源名称?

我只需要以一种方式配置它,当我需要更改名称时,我只在2个地方更改:在我的项目和JBoss配置中。

1 个答案:

答案 0 :(得分:0)

标准Liquibase和JPA都要求明确列出数据源。它是一个逻辑参考,因此您可以更改数据源指向的位置,而不会影响任何配置,除非您要更改数据源名称(如您所列)。

如果您想要从Liquibase或JPA中删除显式引用,最简单的可能是子类liquibase.integration.servlet.LiquibaseServletListener并覆盖getDataSource()方法以查找PersitanceUnit的引用并将其返回。这将允许您仅在persistance.xml中指定数据源,并且不再需要web.xml中的liquibase.datasource配置。