2014-11-19 1 views
0

Я использую Liquibase и Java EE с JBoss. Я настраиваю файл persistence.xml в проекте, чтобы указать источник данных, который я хочу использовать.Как применить DRY для конфигурации источника данных Liquibase и 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> 

Ну, как вы можете видеть, что я имеют 1 источник данных в JBoss и 2 ссылки в моем проекте. Как мне применить принцип DRY здесь и использовать только 1 ссылку в конфигурациях JBoss и 1 ссылку в моем проекте? Использовать файл свойств для хранения имени источника данных?

Мне нужно просто настроить его таким образом, что, когда мне нужно изменить имя, я меняю только на 2 места: в моем проекте и в конфигурациях JBoss.

ответ

0

Оба стандарта Liquibase и JPA требуют, чтобы источник данных был явно указан. Это логическая ссылка, поэтому вы можете изменить, где точки источника данных не влияют на любую конфигурацию, если вы не хотите изменять имя источника данных (как вы указали).

Если вы хотите удалить явные ссылки либо из Liquibase, либо из JPA, самым простым является, вероятно, подкласс liquibase.integration.servlet.LiquibaseServletListener и переопределить метод getDataSource(), чтобы найти ссылку с вашего PersitanceUnit и вернуть его. Это позволит вам указывать только источник данных в файле persistance.xml и больше не нуждаться в конфигурации Liquibase.datasource в web.xml.

+0

Можете ли вы подробнее объяснить, почему явно перечисление источника данных является «логической ссылкой»? Есть ли надежда получить его из коробки (скажем, два режима конфигурации). –

+0

Под «логической ссылкой» я имел в виду, что вы ссылаетесь на источник данных с логическим именем «java: jboss/datasources/WebStoriesDS». Вы можете полностью перенастроить фактическую информацию о подключении, и она может отличаться в разных средах, но WebStoriesDS никогда не изменится. Имея это в рабочем состоянии, это вариант, но есть и другие изменения, которые имеют более высокий приоритет, поэтому я не скоро доберусь. Конечно, вы можете отправить запрос на тяну, и я могу посмотреть на его включение. –