как изменить файл persistence.xml во время выполнения - PullRequest
3 голосов
/ 14 июня 2009

Я новичок в openJPA.

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

И не могли бы вы также сказать мне, каким образом это следует сделать, используя источник данных или просто поместив свойства в единицу постоянства.

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

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

1 Ответ

4 голосов
/ 14 июня 2009

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

Workshop, JPA и DataSources представляется особенно уместным для вас. Как и Настройка источника данных JNDI в WebSphere 6.0 / 6.1 и WebSphere + JNDI + Spring Framework + Hibernate .

Вы используете 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.

...