2013-05-07 47 views
2

我想在我的應用程序中使用@Singleton和@Startup註解(在tomcat 7上運行)爲Weld CDI定義啓動類,但是我的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發現但也幫助

+0

能否請您發表您的'的Java class'的'import'部分? – 2013-05-07 08:24:48

+0

我更新了所有導入的java類 – Yashar 2013-05-07 09:05:31

+0

Pease嘗試刪除'javax.ejb.Startup'和'javax.ejb.Singleton'並僅使用'javax.inject.Singleton'。請不要混合使用'EJB'和'CDI'。 – 2013-05-07 09:15:03

回答

2

您不能使用@Startup或@javax的提示。 ejb.Singleton註釋在CDI bean上:這些註釋是針對EJB的。而EJB在Tomcat上不起作用。如果您想在Tomcat上運行EE應用程序,請查看TomEE項目。

但是,在部署所有內容後都會拋出AfterDeploymentValidation事件。你可以寫一個觀察者方法作用於這種情況下,如本博客張貼在這裏: