2009-11-04 4 views
3

일부 EJB, 엔티티 등이있는 귀 내부의 GlassFish v2 서버에 완벽하게 작동하는 응용 프로그램 클라이언트가 배포되었습니다. eclipselink를 사용하고 있습니다.Java EE의 Persistence.createEntityManagerFactory()가 JTA 소스를 무시합니다.

<persistence-unit name="mysource"> 
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
    <jta-data-source>jdbc/mysource</jta-data-source> 
    <class>entities.one</class> 
    <class>entities.two</class> 
    ... 
    <properties> 
     <property name="eclipselink.target-server" value="SunAS9"/> 
     <property name="eclipselink.logging.level" value="FINE"/> 
    </properties> 
</persistence-unit> 

을 그리고 나는 EJB에 EntityManager을 주입 할 때이 잘 작동 : 현재

내의 persistence.xml에있는

@PersistenceContext(unitName="mysource") 
private EntityManager em; 

가 지금은 동적으로 지속성 단위를 전환하는 요구 사항이/데이터베이스.

em = Persistence.createEntityManagerFactory("mysource").createEntityManager(); 

하지만 나는 다음과 같은 오류가 발생합니다 : 은 내가 프로그래밍 방식 EntityManager를 얻을 수 있습니다 파악

Unable to acquire a connection from driver [null], user [null] and URL [null] 

에도 Map에 javax.persistence.jtaDataSource "에서"JDBC/MYSOURCE "를"무시 " 및 createEntityManagerFactory("mysource", map)를 호출하면 차이를 만들지 않습니다.

을 나는 무엇을 놓치고?

+0

이것은 작동해야하며 persistence.xml이 올바른 것처럼 보입니다. 클래스 경로에 여러 persistence.xml이 없는지 확인하십시오. – James

답변

1

을 엔티티 관리자를 프로그래밍 방식으로 생성하여 컨테이너를 우회하려고합니다. 이는 JTA가 아닌 데이터 소스 (컨테이너 외부에 있으며 트랜잭션 유형은 RESOURCE_LOCAL 여야 함)를 생성하므로 원본 구성이 쓸모가 없다는 것을 의미합니다.

다른 unitName 속성을 가진 엔티티 관리자를 삽입하거나 RESOURCE_LOCAL 트랜잭션 유형 지속성 단위를 만드십시오.

+0

내가하려고하는 것은 주석이하는 일이지만 코드에서는 programName을 unitName으로 설정할 수 있습니다. 기본적으로 컨테이너에 이름으로 주어진 PU의 엔티티 관리자를 요청하고 싶습니다. 만약 createEntityManagerFactory가없는 다른 방법이 있다면 괜찮습니다. – Draemon

관련 문제