2014-09-17 5 views
1

다른 서버 (각 고객에 대해 하나의 데이터베이스)에 동일한 구조로 할당 된 여러 데이터베이스가 있으므로 내 응용 프로그램에 연결해야합니다 그들 모두는 동적으로 을 사용합니다. 따라서 고객 X가 일부 데이터베이스 작업을 수행 할 때 응용 프로그램은 런타임에 데이터베이스가 연결되는 소리를 결정해야합니다.이 작업은이 특정 데이터베이스에서만 수행됩니다. 또 다른 문제가 있습니다. 하나의 연결 풀을 만들어야합니다. 내 고객 중 하나가 연결에 실패하면 글래스 피시가 시작되지 않습니다.하나의 동적 EntityManager, 트랜잭션 유형 = "JTA"인 여러 데이터베이스에 연결

나는 모든 곳에서 보았으며 좋은 해결책을 찾지 못했습니다. 누구든지 나를 도울 수 있을까? EclipseLink에서 EJB 3 및 JPA2를 사용하고 있습니다.

PersistenceContext 주석의 unitName 값을 런타임에 변경하면 작동 할 수 있습니다. 가능하면 누구에게 알릴 수 있습니까?

+0

응용 프로그램에서 원하는 것을 더 살피셔야합니다. 비슷한 데이터베이스 구조는 동일한 Java 엔티티 모델을 사용한다는 것을 의미합니까? 엔티티를 검색하려고하면 JPA에서 볼 데이터베이스는 무엇입니까? 어떤 데이터베이스가 쓰여지는지 어떻게 제어 할 것으로 예상합니까? 가장 간단한 솔루션은 각각 자체 데이터베이스에 자체 데이터 소스가있는 여러 지속성 유닛을 작성하는 것입니다. 그런 다음 xa 데이터 소스를 서버의 JTA에 연결합니다. – Chris

+0

질문에 답글이 있습니다. @Chris – lucianovcnt

+0

데이터 소스에 연결할 수없는 경우 Glassfish가 시작되지 않는 이유가 확실하지 않습니다. 글래스 피쉬에서 데이터 소스를 만드는 방법은 여러 가지가 있습니다. 글래스 피시가 데이터 소스와 독립적으로 시작될 수 있다고 가정합니다. 컨테이너 관리 지속성 유닛을 사용할 때 데이터 소스를 사용할 수 없을 때 응용 프로그램이 작동하지 않는다고 말하는가? – Chris

답변

0

하나의 단일 데이터베이스에 여러 데이터베이스 인스턴스를로드 할 수 없다고 생각합니다. EntityManager. 엔티티를 삽입하려면 어떻게해야합니까? 그것들 모두에 삽입 하시겠습니까? 두 명의 서로 다른 사용자를 찾고 두 ID가 다른 데이터베이스에서 동일한 ID를 사용하면 어떻게됩니까?

당신이 할 수있는 일은 각 데이터베이스 인스턴스에 대해 n 개의 기본 EntityManagers를로드 한 다음 기본 EntityManager에 작업을 위임해야하는 고유 한 EntityManager를 구현하는 것입니다.

Java EE 6 이상을 사용하는 경우 CDI를 사용하여 사용자 정의 된 EntityManager를 삽입 할 수 있습니다. 그냥 EJB (@Stateless으로 주석 달기)를 만든 다음 필드에 주석을 달 수있는 위치에 @Inject을 삽입하십시오.

+0

질문에 답글이 있습니다. – lucianovcnt

+1

@lucianovcnt 다시 쓰기/다시 쓰기/다시 쓰기 –

0

각 테넌트가 자체 데이터베이스를 보유하고있는 멀티 테넌트 애플리케이션이 무엇인지 묻고 싶습니다. 나는 당신이 그것을 설계하는 것이 더 낫다고 생각합니다. 여기에 설명 된대로 각각의 세입자는 자체 영속성 유닛을 가지고 있습니다. http://wiki.eclipse.org/EclipseLink/Examples/JPA/Multitenant

각 테넌트에 대해 PersistenceUnits를 생성하는 데 사용되는 특성을 제어해야하기 때문에이 경로로 가면 주입 할 수 없습니다. 하나의 persistence.xml 파일을 사용할 수 있습니다. 그러면 http://www.eclipse.org/eclipselink/api/2.5/org/eclipse/persistence/config/EntityManagerProperties.html#JTA_DATASOURCE을 통해 세입자가 사용할 데이터 소스를 전달하거나 테넌트를 기반으로 계산할 사용자 정의 프로그램을 사용합니다. EntityManager/EntityManagerFactory가 시작될 때가 아니라 처음 사용되는 경우에만 테넌트에 대한 리소스가 존재해야하므로, 데이터 소스를 구성하고 추가 할 수있는 한 동적으로 테넌트를 추가 할 수 있습니다.