2010-06-10 5 views
1

여러 데이터베이스/데이터 소스에서 예상되는 결과를 나타내며 실행 된 다른 쿼리가 될 수 있지만 항상 동일한 결과가 반환되는 엔티티 bean이 있습니다. 따라서 빈은 동적으로 선택할 수 있어야하는 다른 데이터 소스에서 다시 사용됩니다.엔티티 런타임에 동적으로 데이터 소스를 선택하십시오.

JPA에서 런타임 중에 쿼리를 실행하는 데 사용할 데이터 소스를 선택하고 동일한 유형의 엔터티 빈을 반환 할 수 있습니까? 또한 내 ejb/응용 프로그램에서 사용할 데이터 소스를 정의해야합니까? 아니면 항상 jndi를 통해 어떤 데이터 소스를 사용할지를 지정할 수 있습니까? 새 데이터 소스가 생성 될 때마다 응용 프로그램을 수정하고 응용 프로그램을 다시 배포하는 것은 옵션이 아닙니다.

미안하지만 질문이 100 % 감각이 아니라면 아이디어를 얻는 것이 어렵습니다.

답변

0

JPA에서 쿼리를 실행하는 데 사용할 데이터 소스를 런타임 중에 선택하고 동일한 유형의 Entity Bean을 반환 할 수 있습니까?

런타임에 지속성 단위의 데이터 소스를 변경할 수 없습니다. 그러나 여러 지속성 장치를 구성하고 하나 또는 다른 하나를 사용하여 EntityManagerFactory을 사용할 수 있습니다. 어쩌면 JPA가 귀하의 유스 케이스에 적합한 도구가 아닐 수도 있습니다.

새 데이터 소스를 만들 때마다 설명자를 수정하고 응용 프로그램을 다시 배포하는 것은 옵션이 아닙니다.

그리고 응용 프로그램은 "사용 가능한 데이터 소스"를 어떻게 알 수 있습니까?

+0

고맙습니다. 그렇습니다. JPA는 올바른 도구가 아닙니다. 나는 그것이 사실이 아니길 바랐다. 두 번째 질문에서 나는 j2ee 컨테이너가 모든 데이터 소스를 구성했지만 애플리케이션 자체는 그렇지 않다는 것을 의미했습니다. 하지만 JPA에서 벗어나면별로 중요하지 않습니다. 감사합니다. – guyumu

+0

올바르지 않습니다. 런타임시 persistence-unit의 데이터 소스를 수정할 수 있습니다. 일단 수정되면, 더 이상 생성 된'EntityManagerFactory'는 새로운 데이터 소스를 가질 것입니다. 방법에 대해서는 [내 대답] (http://stackoverflow.com/a/21157691/698168)을 참조하십시오. –

0

런타임에는 JPA 데이터 소스를 변경할 수 있지만 접근 방법은 까다 롭습니다 (인트로 스펙 션, JPA 구현 특정, ...).

나는 org.hibernate.ejb.HibernatePersistence을 무시하고 단지 EntityManagerFactory를 작성하기 전에 모두 MapPersistenceProviderPersistenceUnitInfo에서 데이터 소스를 설정 javax.persistence.spi.PersistenceProvider 내 자신의 구현을 구현했습니다. 이렇게하면 내 EntityManagerFactory에는 런타임에 구성된 데이터 소스가 있습니다. 응용 프로그램을 배포 취소 할 때까지 내 EntityManagerFactory을 유지합니다.

동일한 방법을 사용하여 N 개의 서로 다른 EntityManagerFactory을 만들 수 있습니다. 각각 특정 데이터 소스가 있습니다. 그러나 각 ÈntityManagerFactory은 많은 메모리를 사용합니다.

관련 문제