как мне изменить persistence.xml во время выполнения

StackOverflow https://stackoverflow.com/questions/991750

  •  13-09-2019
  •  | 
  •  

Вопрос

Я новичок в OpenJPA.

У меня есть сценарий, в котором, в зависимости от сервера, на котором запущено мое приложение, мне нужно изменить настройки на persistance.xml.Например.если он запущен на сервере A, то он должен использовать другую базу данных (другой URL), другой пароль и т.д.и если приложение запущено на сервере B, то оно должно использовать другую информацию.

И не могли бы вы также сказать мне, каким способом это следует сделать, используя datasource или просто помещая свойства в persistence-unit .

К вашему сведению, я использую приложение WS.сервер 7 и RAD 7.5

Любая помощь была бы высоко оценена.

Это было полезно?

Решение

Вы используете сервер приложений, поэтому вам не нужно устанавливать параметры подключения к базе данных в файле persistence.xml.Вы должны иметь возможность создать источник данных JNDI на вашем appserver и затем использовать его.Каждый сервер может иметь исходные данные имеют то же имя JNDI и тогда не будет необходимости ни persistence.xml различия.

Семинар, JPA и источники данных кажется, это особенно актуально для вас.Как и делает Настройка источника данных JNDI в WebSphere 6.0/6.1 и WebSphere + JNDI + Spring Framework + Переход в спящий режим.

Используете ли вы Spring?Если это так, то проблему легко решить:вы не помещаете информацию об источнике данных в свой persistence.xml, вы помещаете ее в контекст вашего приложения, и это будет иметь разную конфигурацию на каждом сервере.

Например:

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location" value="classpath:database.properties"/>
</bean>

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="${database.class}"/>
    <property name="url" value="${database.url}"/>
    <property name="username" value="${database.username}"/>
    <property name="password" value="${database.password}"/>
</bean>

и у каждого сервера может быть свой файл database.properties на каждом сервере (где каждый находится где-то в пути к классу в этом примере):

database.username=scratch
database.password=scratch
database.class=oracle.jdbc.OracleDriver
database.url=jdbc:oracle:thin:@localhost:1521:XE

Изменение persistence.xml во время выполнения будет проблематичным, поскольку на самом деле JPA разработан не так.

Конечно, вы также можете использовать источники данных JNDI с Spring.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top