стартовый класс в Weld

Я пытаюсь определить класс запуска для своего приложения в Weld CDI с аннотациями @Singleton и @Startup (работает на tomcat 7), но мой метод 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);
    }
  }

}

Я попробовал подсказки, которые нашел в этих двух сообщениях Запуск POJO с помощью WELD и Запуск EJB не работает, но это не помогло


person Yashar    schedule 07.05.2013    source источник
comment
Не могли бы вы опубликовать раздел import вашего java class?   -  person Charlee Chitsuk    schedule 07.05.2013
comment
Я обновил класс Java со всеми импортами   -  person Yashar    schedule 07.05.2013
comment
Пожалуйста, попробуйте удалить javax.ejb.Startup и javax.ejb.Singleton и использовать только javax.inject.Singleton. Пожалуйста, не смешивайте EJB и CDI.   -  person Charlee Chitsuk    schedule 07.05.2013
comment
Но я хочу создать класс для запуска при запуске сервера. Могу ли я запустить одноэлементный класс при запуске сервера без использования аннотации Startup!?   -  person Yashar    schedule 07.05.2013
comment
У меня такая же проблема. Не знаю, как вы справляетесь с этим, но в моем случае javax.inject.Singleton НЕ запускается при запуске Tomcat. Он запускается только после запуска ресурса, в который вводится синглтон.   -  person stackoverflower    schedule 11.11.2013


Ответы (1)


Вы не можете использовать аннотации @Startup или @javax.ejb.Singleton для компонента CDI: эти аннотации предназначены для EJB. И EJB не будет работать на (простом) Tomcat. Если вы хотите запустить приложение EE на Tomcat, взгляните на проект TomEE.

Однако существует событие AfterDeploymentValidation, которое брошен после того, как все было развернуто. Вы можете написать метод наблюдателя для обработки этого события, как показано в этом сообщении в блоге:

person Marco    schedule 06.03.2014