2014-12-17 3 views
1

내 DAO가 포함 된 세 번째 파트 jar 라이브러리에 @PersistenceUnit으로 EntityManagerFactory를 주입하는 데 문제가 있습니다.JAR에서 PersistenceContext 삽입 lib

다음은 내 멀티 모듈 프로젝트 구조입니다.

-EAR 
\-WAR ==> the webapp (maven type war) 
    \-EJB ==> the service facade (maven type EJB (provided to War) 
    \CORE ==> the legacy DAO's library (maven type JAR) 

나는 ==> 모든 Maven 프로젝트에서 beans.xml 환경의 파일이 CDI 함께 모든 배선에 사용 ... 그리고 CDI 잘 작동합니다.

그러나 @PersistenceUnit 주석은 CORE 프로젝트에 넣을 때 작동하지 않습니다. (필드가 null 임)

EJB 프로젝트에서 @PersistenceUnit을 사용하면 모든 것이 잘 동작합니다.

내 persistence.xml 파일은 EJB 프로젝트의 META-INF 폴더에 있습니다 (하지만 핵심 프로젝트에도 넣었습니다 ... 성공하지 못했습니다).

public class HibernateSupport { 

@PersistenceUnit 
private EntityManagerFactory emf; 

... 
} 

이 클래스는 CDI와 EJB 프로젝트에 주입 (및 작동 ...하지만 기전력 필드가 null ...)

수있는 사람 : 여기

는 주입 지점이다 도와주세요?

편집 :

내가 EJB 프로젝트 (받는다는 형 EJB)에 내 핵심 프로젝트를 켜면

. 그런 다음

편집 2 ... 그것을 작동 ...하지만 내 핵심 프로젝트가 POJO 프로젝트를 유지하려는 :

생산자 코드 :

@PersistenceUnit 
private EntityManagerFactory emf; 

@Produces 
public SessionFactory getSessionFactory() { 
    return ((HibernateEntityManagerFactory)emf).getSessionFactory(); 
} 
+0

주입 지점을 알려주십시오. 이 클래스를 주입 한 곳을 어떻게 참조할까요? –

+0

persistence.xml은 어디에 있습니까? – Skizzo

+0

@Skizzo - EJB 프로젝트의 META-INF 폴더에있는 내 persistence.xml (하지만 핵심 프로젝트 아래에도 넣으려고했습니다) (이 정보로 업데이트 된 기본 게시물) –

답변

1

주석 @PersistenceUnit으로 만 EJB에 주입 할 수 있습니다. HibernateSupport은 EJB가 아닙니다. 그래서 문제를 해결하기 위해, 다음이 필요합니다

  • HibernateSupport는 EJB 확인;

또는 @Inject를 사용

  • 를 주입 EntityManager, 그것을 어떻게 here을 읽을;
+0

옵션 2 : entityManager를 "생성"하는 bean은 EJB 여야 함을 의미합니다. 권리? 따라서 EJB 프로젝트에이 제작자를 배치해야합니다. 클래스로드로 인해 삽입 지점에서 찾지 못했습니다. –

+0

핵심 (주입 지점)은 EJB 프로젝트 (생산자)의 종속 항목입니다 –

+0

예 . 당신은 그것을 EJB 프로젝트에 넣어야한다. 의존성의 방향은 중요하지 않습니다. 주입은 배포시에 해결됩니다. EJB 모듈에도 beans.xml 파일이 있어야합니다. –

0

시도는 코드 조각을 변경하려면 이 방법으로 :

public class HibernateSupport { 

@PersistenceUnit 
private EntityManager em; 

... 
} 
+0

동일한 효과가 있습니다. 나는 또한 @PersistenceContext를 시도했지만 여전히 null이다. –