2

我正在尝试使用 @Singleton 和 @Startup 注释(在 tomcat 7 上运行)在 Weld CDI 中为我的应用程序定义一个启动类,但我的 PostConstruct 方法从未被调用。

这是我的启动课程:

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但都没有帮助

4

1 回答 1

2

您不能在 CDI bean 上使用 @Startup 或 @javax.ejb.Singleton 批注:这些批注适用于 EJB。并且 EJB 不能在(普通)Tomcat 上工作。如果您想在 Tomcat 上运行 EE 应用程序,请查看TomEE项目。

但是,在部署完所有内容后会引发AfterDeploymentValidation事件。您可以编写一个观察者方法来对该事件采取行动,如此处的博客文章所示:

于 2014-03-06T12:03:54.057 回答