2013-05-07 6 views
2

Weld CDI에서 @Singleton 및 @Startup 주석 (tomcat 7에서 실행)을 사용하여 응용 프로그램의 시작 클래스를 정의하려고하지만 PostConstruct 메소드가 호출되지 않습니다. Weld의 시작 클래스

import java.util.List; 
import java.util.logging.Logger; 

import javax.annotation.PostConstruct; 
import javax.ejb.Startup; 
import javax.inject.Inject; 
import javax.ejb.Singleton; 
import javax.persistence.EntityManager; 

import se.raindance.squid.core.domain.SquidSettings; 


@Singleton 
@Startup 
public class InitSquid { 

    @Inject 
    private Logger log; 

    @Inject 
    EntityManager entityManager; 

    @PostConstruct 
    public void init() { 

    System.out.println("startup!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! InitSquid"); 
    // Init Rainlets 
InitRainlets initRainlets = new InitRainlets(entityManager); 
    initRainlets.init(); 

    initSquidSettings();  
    } 

    private void initSquidSettings() { 
    List<SquidSettings> settingsList = (List<SquidSettings>) entityManager 
     .createQuery(
      "select squidsettings from SquidSettings squidsettings") 
     .getResultList(); 

    if (settingsList.size() == 0) { 
     log.info("No SquidSettings entity exists in system, creating one"); 

     SquidSettings settings = new SquidSettings(); 
     settings.setSubledgerRestResourceURI("http://localhost:8080/subledger-webapp/resteasy/"); 
     entityManager.persist(settings); 
    } 
    } 

} 

가 나는이 두 게시물 Startup POJO with WELDStartup EJB doesn't work에서 발견하지만 어느 당신은 @Startup 또는 @javax을 사용할 수 없습니다

+0

당신은 당신의'자바 class'의'import' 섹션을 게시하시기 바랍니다 수 있을까요? –

+0

모든 가져 오기로 Java 클래스를 업데이트했습니다. – Yashar

+0

Pease는'javax.ejb.Startup'과'javax.ejb.Singleton'을 제거하고'javax.inject.Singleton' 만 사용하려고합니다. 'EJB'와'CDI'를 섞지 마십시오. –

답변

2

도움이 힌트를 시도 :

여기 내 시작 클래스입니다. CDI 빈에 대한 ejb.Singleton 주석 :이 주석은 EJB 용입니다. 그리고 EJB는 (일반) Tomcat에서 작동하지 않습니다. Tomcat에서 EE 애플리케이션을 실행하려면 TomEE 프로젝트를 살펴보십시오.

그러나 모든 항목이 배포 된 후에 발생하는 AfterDeploymentValidation 이벤트가 있습니다. 현재이 블로그 게시물에서와 같이 관찰자의 방법은 해당 이벤트에 역할을 작성할 수 있습니다