2011-01-31 2 views
2

안녕 얘들 아, Java SE 프로젝트에서 JPA 용 Eclipse 링크를 사용하고있다. 내 데이터베이스에서 각 테이블에 대해 "jpa 컨트롤러"클래스를 사용하고 있습니다 (올바른 방법입니다). 또한 "jpa 컨트롤러 클래스"마다 EntityManagerFactory를 제공하므로 entitymanager를 얻을 수 있습니다. 프로그램이 시작되면 AnalyzerPU 로그인이 2 번 성공한 것으로 표시됩니다. 하나의 EntityManagerFactory 만 사용해야합니까? 내가 가진 모든 사람들이 로그인을하는 것처럼 보입니다. 계속해서 데이터베이스에있는 각 테이블에 대해 12 개의 로그인을 갖게됩니다. 이게 맞을 수 없다는 거 알아? 나는 "m 내 컨트롤러를 배치하는 방법지속성 단위의 다중 로그인?

public class PkgLineControllerImpl extends AbstractController implements PkgLineController { 

private EntityManagerFactory emf = null; 

public PkgLineControllerImpl() { 

    super(StateHistoryImpl.class); 
    emf = Persistence.createEntityManagerFactory("StateHistoryAnalyzerPU"); 
} 

public EntityManager getEntityManager() { 
    return emf.createEntityManager(); 
} 

@Override 
public List<PkgLine> findAll() { 
    EntityManager em = getEntityManager(); 

    List<PkgLine> pkgLineList = new ArrayList<PkgLine>(); 

    try { 
     pkgLineList = em.createNamedQuery("PkgLine.findAll").getResultList(); 
     return pkgLineList; 
    } finally { 
     em.close(); 
    } 
} 

은}

입니다. 어떤 도움을 주셔서 감사합니다. 때로는

는이 작업을 수행 할 것입니다. 때로는

[EL Info]: 2011-02-01 14:34:07.991--ServerSession(18450577)--EclipseLink, version: Eclipse Persistence Services - 2.0.2.v20100323-r6872 
[EL Info]: 2011-02-01 14:34:08.381--ServerSession(18450577)--fileStateHistoryAnalyzerPU login successful 
100 
200 
100 
200 
100 
null 
null 
null 
null 
null 

는이 작업을 수행 할 것 .

Persistence Services - 2.0.2.v20100323-r6872 
[EL Info]: 2011-02-01 14:34:08.381--ServerSession(18450577)--fileStateHistoryAnalyzerPU login successful 
100 
200 
100 
200 
100 
Persistence Services - 2.0.2.v20100323-r6872 
[EL Info]: 2011-02-01 14:34:08.381--ServerSession(18450577)--fileStateHistoryAnalyzerPU login successful 
null 
null 
null 
null 
null 

null는 일부 데이터를 반환하는 JPAController 클래스 메서드 중 하나이며 숫자는 데이터를 반환하는 다른 JPA 컨트롤러 클래스입니다. 하나의 entitymanagerfactory를 AbstractClass에 넣었지만 여전히 그것을 수행하고 있습니다.

답변

1

트랜잭션/요청/세션 당 하나의 EntityManagerFactory와 하나의 EntityManager가 있어야합니다. 또한 모든 클래스가 포함 된 하나의 지속성 단위가 있어야합니다.

동일한 지속성 단위 이름과 인수가없는 여러 팩토리를 기술적으로 생성하면 동일한 지속성 단위 인 캐시/연결 풀을 공유해야하지만 다른 지속성 단위가있는 경우 각 캐시/연결 풀을 공유하게됩니다.

+0

안녕하세요. 내 게시물을 업데이트했습니다. 그래서 모든 메소드에 대한 EntityManagerFactory "로그인"을 갖는 것이 좋습니다. –

+0

여러 스레드를 사용하고 있습니까? 하나의 영속성 단위에 대해 하나의 로그인 만 가져야합니다. 일반적으로 정적 변수에서 EntityManagerFactory를 관리하여 하나만 존재하도록해야합니다. – James

+0

안녕하세요. 감사합니다. 아니요. 다중 스레드를 사용하지는 않지만있을 수 있습니다. 실제로 하나의 managerfactory (static final)을 생성하고 jpa 컨트롤러 클래스에 전달하여 entitymanagers를 만들었습니다. 멀티 스레드 응용 프로그램에서 괜찮습니까? –