2009-06-13 3 views
3

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

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

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

FYI Я использую приложение WS. сервер 7 и RAD 7.5

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

ответ

4

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

Workshop, JPA, and DataSources особенно подходит для вас. Как и Setting up a JNDI data source in WebSphere 6.0/6.1 и WebSphere + JNDI + Spring Framework + Hibernate.

Вы используете весну? Если это так, то проблему легко решить: вы не помещаете информацию источника данных в свой файл 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 

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

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

+0

Спасибо за ответ cletus i AM используя JSF на самом деле с openJPA IBM RAD. Не могли бы вы подробнее рассказать о том, как решить мою проблему, если я создаю источник данных с тем же именем на каждом сервере, тогда мне нужно имя источника данных в файле persistence.xml? ЕСЛИ так, не могли бы вы помочь мне с некоторым примером. – user122591

+0

Ссылки, добавленные в примеры источников данных JSDI Websphere. – cletus

+0

Для более подробного объяснения этого подхода ознакомьтесь - http://stackoverflow.com/questions/2061410/spring-hibernate-jpa – Vedran

Смежные вопросы