2014-07-13 3 views
0

Grails의 Bootstrap.groovy와 비슷하게 앱을 시작할 때 초기 데이터를 추가하는 방법은 무엇입니까?EJB3 : 애플리케이션이 Grails 부트 스트랩처럼 시작될 때 초기 데이터를 삽입하는 올바른 방법은 무엇입니까?

@PostContstruct 메소드에서 Stateless 세션빈에서 EntityManager를 사용할 수 없으므로 (또는 내가 잘못된 것을하고 있습니까?) 일부 초기 데이터를 삽입하는 올바른 방법은 무엇입니까?

예. 응용 프로그램이 시작될 때 시스템에 하나의 관리자 계정을 추가하고 싶습니다. @PostContstruct 방법에서부터

답변

3

는 EntityManager의는 @PostConstruct 보통 데시벨에서보기위한 초기 데이터를 검색 할 수있는 권리 장소입니다, 이것은 사실이 아니다

사용할 수 없습니다.

응용 프로그램은 관리자 계정을 추가하는 등 시작 작업을위한 싱글 EJB를 사용하고 @Startup으로 EJB를 주석을 달 수 있습니다 시작 : 싱글 같은

@Startup 
@Singleton 
public class MySingleton implements Serializable { 
    @PersistenceContext 
    private EntityManager em; 

    @PostConstruct 
    public void init() { 
     // here you can perform queries or transactions 
    } 
} 

엔터프라이즈 자바 빈즈는, 기본적으로 트랜잭션입니다. Java EE 7에서 CDI 빈은 @Transactional이라는 주석이있는 경우 트랜잭션이됩니다.

링크 : 모든

+0

첫째, 귀하의 회신에 대한 감사합니다! 나는 Stateless SessionBeans를 사용하여 PostConstruct에서 항상 EntityManager null을 얻었습니다. (질문이 업데이트 됨) –

+0

EJB를 직접 인스턴스화하는 경우 null이 될 수 있습니다. 대신, CDI 빈과 같은 다른 컨테이너 관리 빈에서 EJB를 사용하고'@ EJB' 주석을 사용하여 주입해야합니다. – perissf

+0

아닙니다. 하나의 EJB 모듈과 하나의 war 모듈로 기본 앱을 만들었습니다. 그리고 ReST 경로 주석을 통해 SessionBeans 메소드를 노출 시켰습니다. - 그냥 'hello world'- 작동합니다. 그런 다음 데이터베이스를 구성하고 SessionBean에 EM을 다음과 같이 추가했습니다. @Resource private EntityManager entityManager; 실제로는 항상 null입니다 ... –