문제

나는 OpenJPA를 처음 접했다.

응용 프로그램이 실행중인 서버에 따라 설정을 Persistance.xml로 변경 해야하는 시나리오가 있습니다. 예를 들어. 서버 A에서 실행중인 경우 다른 데이터베이스 (다른 URL), 다른 비밀번호 등을 사용해야하며 응용 프로그램이 서버 B에서 실행중인 경우 다른 정보를 사용해야합니다.

또한 데이터 소스를 사용하거나 단순히 Persistence-Unit에 속성을 넣는 방법을 말해 줄 수 있습니다.

참고로 WS 앱을 사용하고 있습니다. 서버 7 및 RAD 7.5

모든 유형의 도움은 높이 평가 될 것입니다.

도움이 되었습니까?

해결책

응용 프로그램 서버를 사용하고 있으므로 persistence.xml 파일에서 데이터베이스 연결 설정을 설정할 필요가 없습니다. AppServer에서 JNDI 데이터 소스를 작성한 다음 사용할 수 있어야합니다. 각 서버에는 데이터 소스에 동일한 JNDI 이름이있을 수 있으며 지속성 .xml 차이가 필요하지 않습니다.

워크숍, JPA 및 데이터 소스 특히 당신과 관련이있는 것 같습니다. 마찬가지로 WebSphere 6.0/6.1에서 JNDI 데이터 소스 설정 그리고 WebSphere + JNDI + 스프링 프레임 워크 + 최대 절전 모드.

스프링을 사용하고 있습니까? 그렇다면 문제를 쉽게 해결할 수 있습니다. 데이터 소스 정보를 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.username=scratch
database.password=scratch
database.class=oracle.jdbc.OracleDriver
database.url=jdbc:oracle:thin:@localhost:1521:XE

런타임에서 rowing rowestence.xml은 실제로 JPA가 설계된 방식이 아니기 때문에 문제가 될 것입니다.

물론 Spring과 함께 JNDI 데이터 소스를 사용할 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top