2013-09-03 2 views
12

persistence.xml의 지속성 단위는 응용 프로그램을 빌드하는 동안 만들어집니다. 런타임시 데이터베이스 URL을 변경하려면 런타임에 지속성 단위를 수정할 수있는 방법이 있습니까? 배포 후 사전 바인딩 된 데이터베이스가 아닌 다른 데이터베이스를 사용해야합니다. 나는 당신이 플러그인 프레임 워크를 작성해야 수명이 긴 세션 아키텍처는 EclipseLink (JPA 2.1)동적으로 지속성 단위 변경 - JPA

+0

서버를 사용합니까? –

+0

Nop. 그것은 독립 실행 형 응용 프로그램입니다. 데이터베이스 서버는 Oracle-12c 및 SQL Server 9.0.x입니다. –

답변

25

지속성 파일 (Persistence.xml)을 그대로 유지하십시오. 다음과 같이 속성을 재정의 할 수 있습니다.

EntityManagerFactory managerFactory = null; 
Map<String, String> persistenceMap = new HashMap<String, String>(); 

persistenceMap.put("javax.persistence.jdbc.url", "<url>"); 
persistenceMap.put("javax.persistence.jdbc.user", "<username>"); 
persistenceMap.put("javax.persistence.jdbc.password", "<password>"); 
persistenceMap.put("javax.persistence.jdbc.driver", "<driver>"); 

managerFactory = Persistence.createEntityManagerFactory("<current persistence unit>", persistenceMap); 
manager = managerFactory.createEntityManager(); 
0

을 사용하고

.

따라서 다른 스레드 그룹 및 클래스 리포지토리를 만들어야합니다.

이 (보통 URLClassLoader를, 포함 Entitys) 당신의 클래스 로더 트리

  • 시스템 클래스 로더가 될
    • JPA-클래스 로더
      • JPA를로드 할 수 .jar 안에 persistence.xml이 있으면 응용 프로그램 클래스 로더에서 데이터베이스 구성을 지정하십시오.
      • entityManager/session-factory를 인스턴스화하십시오.
      • 데이터베이스를 사용하여 작업해야하는 모든 플러그인을로드하십시오. 유닛 테스트 (D) 및 플러그인 통합 테스트 실행.
2

당신은 데이터베이스 URL 및 기타 설정을 선택하는 속성을 전달하는 Persistence.createEntityManagerFactory (지도)를 사용할 수 있습니다.

+0

좋은 소리입니다. 내가 이것을 시도하자. –

관련 문제