웹 응용 프로그램 (jsp/servlets)에서 EntityManagerFactory를 가져 오는 가장 좋은 방법은 무엇입니까? 이 좋은 방법입니다. When should EntityManagerFactory instance be created/opened?, 또는 JNDI 등에서 얻는 것이 더 낫습니다 ...EntityManagerFactory를 얻는 모범 사례
18
A
답변
57
그들은 중량이 너무 커서 응용 프로그램 범위에 있어야합니다. 따라서 응용 프로그램을 시작할 때 열어 응용 프로그램을 종료 할 때 닫아야합니다.
수행 방법은 대상 컨테이너에 따라 다릅니다. EJB 3.x (Glassfish, JBoss AS 등)를 지원합니까?
이@Stateless
public class FooService {
@PersistenceContext
private EntityManager em;
public Foo find(Long id) {
return em.find(Foo.class, id);
}
// ...
}
대상 컨테이너 아무튼 경우 : 그렇다면, 당신은 단지 @PersistenceContext
으로 일반적인 방법을 EJB와의 JPA 작업을하는 모든 경우에 (도 거래에 대해)을 폐쇄/개방에 대해 걱정할 필요가 없습니다 OpenEJB과 같은 EJB (예 : Tomcat, Jetty 등) 및 EJB 애드온은 어떤 이유로 든 옵션이 아니므로 수동으로 EntityManager
(및 트랜잭션)을 직접 생성하고 나서 가장 좋은 방법입니다 ServletContextListener
입니다.
@WebListener
public class EMF implements ServletContextListener {
private static EntityManagerFactory emf;
@Override
public void contextInitialized(ServletContextEvent event) {
emf = Persistence.createEntityManagerFactory("unitname");
}
@Override
public void contextDestroyed(ServletContextEvent event) {
emf.close();
}
public static EntityManager createEntityManager() {
if (emf == null) {
throw new IllegalStateException("Context is not initialized yet.");
}
return emf.createEntityManager();
}
}
:
(참고 : 서블릿 3.0 전에,이 클래스가 web.xml
대신 @WebListener
의에 <listener>
등록 할 필요가있다)로 사용할 수 있습니다 : 여기 기본 킥오프 예입니다
EntityManager em = EMF.createEntityManager();
// ...
관련 문제
- 1. 모범 사례
- 2. 모범 사례?
- 3. 모범 사례 : 상대 URL
- 4. 모범 사례 또는 불량 사례
- 5. OSGI 응용 프로그램에서 EntityManager를 제공하는 모범 사례
- 6. HTML에서 숨겨진 값 저장 (모범 사례, 오류, 기본값) 모범 사례
- 7. INotifyPropertyChanged 모범 사례
- 8. C# : 모범 사례 Debug.Print
- 9. PyLint 모범 사례?
- 10. 모범 사례 - C#을
- 11. 공유 요소, 모범 사례
- 12. 레일스 모범 사례 필터링
- 13. PhpUnit을 사용한 모범 사례
- 14. 현지화 모범 사례
- 15. 모범 사례 - 디렉토리 구조
- 16. 백본보기 저장 (모범 사례)
- 17. UIViewController 모범 사례 - 로딩
- 18. 모범 사례 - oop 디자인
- 19. 캐싱 - 모범 사례
- 20. nhibernate에서 FindAll 모범 사례
- 21. UITableView reloadData 모범 사례
- 22. NAnt 모범 사례
- 23. 데이터 영역 모범 사례
- 24. HttpRuntime.Cache 모범 사례
- 25. JPA 모범 사례
- 26. 순환 종속성 모범 사례
- 27. Android 서버 모범 사례
- 28. 메서드 모범 사례 - VB.NET
- 29. WPF 툴팁 모범 사례
- 30. @SessionAttributes를 사용하는 모범 사례
"unitName"속성이없는 @PersistenceContext를 사용할 때 항상 우수하지만 예를 들어 추가하기를 원한다면 (i n 선언적이지 않은 방식으로) "persistence.xml"에 정의 된 유일한/default persistence-unit을 사용합니다. 여러 개의 데이터 소스/지속성 단위가있는 경우 이것이 어떤 것인지 혼란스럽게 할 수 있습니다. –
누락 된 것이 무엇인지 모르겠지만 답을 따르지 만 런타임 오류가 있습니까? > 원인 : org.springframework.beans.factory.NoSuchBeanDefinitionException : [javax.persistence.EntityManagerFactory] 유형의 고유 bean이 정의되지 않았습니다 : 예상 된 단일 bean이지만 발견 됨 0 : – huahsin68
@ huahsin68 : 원래 질문에는 전혀 관련이 없습니다 나는 봄도하지 않는다. 그냥 "Ask Question"을 누르십시오. – BalusC