Стартап класс по сварке
Я пытаюсь определить класс запуска для своего приложения в Weld CDI с помощью аннотаций @Singleton и @Startup (работает на tomcat 7), но мой метод PostConstruct никогда не вызывается.
Вот мой класс Startup:
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 и Startup EJB не работает, но не помог
1 ответ
Вы не можете использовать аннотации @Startup или @javax.ejb.Singleton для компонента CDI: эти аннотации предназначены для EJB. И EJB не будет работать на (обычном) Tomcat. Если вы хотите запустить приложение EE на Tomcat, взгляните на проект TomEE.
Однако есть событие AfterDeploymentValidation, которое генерируется после того, как все было развернуто. Вы можете написать метод наблюдателя, который будет воздействовать на это событие, как показано в этом посте здесь: