2014-11-17 4 views
2

누군가가 spring-data-jpa와 java-ee 응용 프로그램을 통합하려고 했습니까? glassfish3을 응용 프로그램 컨테이너로 사용하고 있습니다. CDI 환경에서 Spring-Data-JPA?

나는 공식 스프링 데이터 JPA 튜토리얼을 따라 클래스 생성 :

public class EntityManagerFactoryProducer { 

    @Produces 
    @ApplicationScoped 
    public EntityManagerFactory createEntityManagerFactory() { 
     return Persistence.createEntityManagerFactory("myPU"); 
    } 

    public void close(@Disposes EntityManagerFactory entityManagerFactory) { 
     entityManagerFactory.close(); 
    } 

    @Produces 
    @RequestScoped 
    public EntityManager createEntityManager(EntityManagerFactory entityManagerFactory) { 
     return entityManagerFactory.createEntityManager(); 
    } 

    public void close(@Disposes EntityManager entityManager) { 
     entityManager.close(); 
    } 
} 

를하지만 내 응용 프로그램을 배포 할 때, 나는 예외 받고 있어요 :

Error occurred during deployment: Exception while preparing the app : Could not resolve a persistence unit corresponding to the persistence-context-ref-name [org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean/entityManager] in the scope of the module called [App]. Please verify your application.. Please see server.log for more details. 
Command deploy failed. 

무엇 내가 빠졌어? 또 다른 설정 파일이나 xml 파일을 가져야하나요?

+0

나는 문제는 당신이 당신의 persistence.xml에 선언 된 이름 "myPU"와 퍼시스턴스 유닛을하지 않아도 될 것 같아요. 그러나 나는 이것이 올바른 접근이라고 생각하지 않는다. 자세한 내용은 내 대답을 참조하십시오. – Gandalf

+0

PU가 적절하게 선언되었습니다. – slnowak

답변

2

Java EE 응용 프로그램 컨테이너에 있기 때문에 자신 만의 Persistence 인스턴스를 만들고 싶지 않습니다. 사용 된 Spring Data 문서의 예제는 JPA 지원이 내장되어 있지 않은 CDI 환경을위한 것입니다. Glasfish는 EntityManagerFactoryEntityManager을 만듭니다. CDI 빈으로 다시 게시하기 만하면됩니다. 따라서 귀하의 경우에는 문서에 표시된 두 번째 예제를 사용하는 것이 중요합니다.

public class EntityManagerProducer { 

    @Produces 
    @RequestScoped 
    @PersistenceContext 
    private EntityManager entityManager; 
} 
+0

내가 기억하는 한, 나는 그것을 시도하고 그것은 작동하지 않았다. 하지만 다시 시도 할게. 고마워. – slnowak

0

공식 문서에서 말한 내용이 약간 까다 롭습니다.

  • 종속 엔티티 관리자 프로듀서

    @Produces @Dependent @PersistenceContext 
    EntityManager entityManager; 
    
  • 열망 저장소

    @Eager public interface TestRepository extends CrudRepository<TestEntity, Long> 
    

을 그리고하십시오 CDI의 ENV에 제대로 봄 저장소를 처리하기 위해, 당신은 선언 할 필요가 당신은 @Inject 수있는 CDI 관리 콩 저장소. @Dependent@Eager 주석을 사용하지 않으면 Spring은 저장소 초기화시 예외를 발생 시키므로 리포지토리에 대한 첫 번째 요청에서 예외가 발생합니다.

참고 문헌 :