CDI備忘録

CDIクラスから CDI bean を取得

http://d.hatena.ne.jp/Kazuhira/20150519/1432044528
https://stackoverflow.com/questions/8166187/can-i-and-how-lookup-cdi-managed-beans-using-javax-naming-contextlookup-in-ej

BeanManager bm = null;
try {
    InitialContext context = new InitialContext();
    bm = (BeanManager) context.lookup("java:comp/BeanManager");
} catch (Exception e) {
    e.printStackTrace();
}

Bean<CrudService> bean = (Bean<CrudService>) bm.getBeans(CrudService.class).iterator().next();
CreationalContext<CrudService> ctx = bm.createCreationalContext(bean);
CrudService crudService = (CrudService) bm.getReference(bean, CrudService.class, ctx);

CDI を最初に初期化する(EJBの@Startupのように) 要 CDI 1.1

@ApplicationScoped
public class JbpmServiceBean {
    @Inject
    @Singleton
    private RuntimeManager runtimeManager;

    // WORKAROUND: Init RuntimeManager outside of transaction
    public void init(@Observes @Initialized(ApplicationScoped.class) Object init) {
        System.out.println("JbpmServiceBean was successfully initialized on start-up!");
    }