Интегрировать в приложение CDI, чтобы контейнер его не поддерживал?

Мое приложение развернуто на JOnAS 5.2.2 это не поддерживает CDI за EJB, Мне нужно использовать CDI на что EJB, Я умею пользоваться CDI на WAR части приложения, но я не знаю, в EJB часть.

Есть ли способ добавить поддержку CDI за EJB приложение в контейнере, которое не поддерживает его?

Мой босс не будет обновлять сервер до версии, которая его поддерживает.

[РЕДАКТИРОВАТЬ] Я использую CDI-WELD: я нашел начало решения:

    //CDI uses an AnnotatedType object to read the annotations of a class
    AnnotatedType<DAOTest> type = beanManager.createAnnotatedType(DAOTest.class);
    //The extension uses an InjectionTarget to delegate instantiation, dependency injection 
    //and lifecycle callbacks to the CDI container
    InjectionTarget<DAOTest> it = beanManager.createInjectionTarget(type);
    //each instance needs its own CDI CreationalContext
    CreationalContext ctx = beanManager.createCreationalContext(null);
    //instantiate the framework component and inject its dependencies
    test = it.produce(ctx);  //call the constructor
    System.out.println("instance" + test);
    it.inject(test, ctx);  //call initializer methods and perform field injection
    it.postConstruct(test);  //call the @PostConstruct method

    test.test();

    it.preDestroy(test);  //call the @PreDestroy method
    it.dispose(test);  //it is now safe to discard the instance
    ctx.release();  //clean up dependent objects

У меня есть тест с инъекцией другого в DAOTest, как это:

@Named
@Dependent
public class DAOTest implements Serializable {
private static final long serialVersionUID = 1L;


@Persitence(value = "CDI-ejb")
private EntityManager em;

@Inject 
private User user; 

public void test(){
    System.out.println(user.getName());

    em.getClass();
}

public EntityManager getEm() {

    return em;
}

public void setEm(EntityManager em) {
    this.em = em;
}

public DAOTest() {
    // TODO Auto-generated constructor stub
}

}

Это работает, но EntityManager не разрешен с помощью @PersistenceContext. Я думаю, что я должен использовать аннотацию @Produce, но я не понимаю, как это сделать.

1 ответ

Вам нужно будет использовать Deltaspike с функциональностью BeanProvider.

http://deltaspike.apache.org/documentation.html

Другие вопросы по тегам