2016-07-26 3 views
0

내 데이터베이스를 설계하고 있는데 Entity 자체에서 데이터베이스에 액세스해야하는 상황에 이르렀습니다.EntityListener에서 EJB를 사용하려면 어떻게해야합니까?

나는 Why sometimes a reference to an EntityManager inside JPA entities is needed을 읽었습니다.

그리고 EntityListener에서 EJB에 액세스 할 수 있는지 궁금합니다.

public class MyEntityListener { 

    @PrePersist 
    private void onPrePersist(final Object object) { 
     // find an EJB 
     // and set those required values 
     // which each resides in a specific table. 
    } 
} 

이것이 가능합니까 (또는?)?

+1

엔티티 청취자에서 EJB를 주입하는 것은 Weld + Hibernate (WildFly 8 ~ 10)의 CDI'@ Inject'를 통해 항상 효과가있었습니다. 그러나 실제로 작동하지 않는 것으로보고 한 사용자, 실제로 사용한 환경의 정확한 버전을보고하지 않은 이유에 대해 확신 할 수 없었습니다. 적어도이 버전은 특정 GlassFish 버전 (Hibernate 대신 EclipseLink를 사용함)에서 실패하는 것으로 알려져 있습니다. – BalusC

+0

@BalusC 클래스 패스에있는 클래스의 인스턴스가 아닌 EJB를 주입하고 있습니까? –

답변

0

답변을 찾았습니다. JSR 338: JavaTM Persistence 2.1에 따라 CDI injection in EntityListeners

  • https://blogs.oracle.com/arungupta/entry/jpa_2_1_early_draft
  • 것이 가능 보인다

    • .

      3.5.1 엔티티 리스너 컨텍스트 중독 사출 API (CDI)을 통해 자바 EE 환경 지원 의존성 주입에

      엔티티 리스너 클래스 [10] CDI 활성화 될 때 [43]. CDI 삽입을 사용하는 엔티티 리스너 클래스는 PostConstructPreDestroy 주석이있는 라이프 사이클 콜백 메소드를 정의 할 수도 있습니다. 이 메소드는 삽입이 수행 된 후 엔티티 리스너 인스턴스가 각각 파기되기 전에 호출됩니다.

      지속성 공급자는 CDI SPI를 사용하여 엔티티 수신기 클래스의 인스턴스를 생성합니다. 그러한 경우에 주사를 수행하는 것; 있는 경우 PostConstructPreDestroy 메서드를 호출합니다. 엔티티 리스너 인스턴스를 처리 할 수 ​​있습니다.