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);
    }
  }

}

これらの 2 つの投稿で見つけたヒントを試してみました WELD を使用した Startup POJOStartup EJB は機能しませんが、どちらも役に立ちませんでした

4

1 に答える 1

2

CDI Bean で @Startup または @javax.ejb.Singleton アノテーションを使用することはできません。これらのアノテーションは EJB 用です。また、EJB は (プレーンな) Tomcat では機能しません。Tomcat で EE アプリケーションを実行したい場合は、TomEEプロジェクトを参照してください。

ただし、すべてがデプロイされた後にスローされるAfterDeploymentValidationイベントがあります。このブログ投稿に示されているように、そのイベントに作用するオブザーバー メソッドを記述できます。

于 2014-03-06T12:03:54.057 に答える