Что такое «управляемый контейнером объект» в мире Java 6 EE? - PullRequest
1 голос
/ 08 февраля 2011

Я пытался использовать CDI для своих стоек, работающих на стеклянной рыбе. Но внедрение зависимости Java не работает для этого. Это работает для JSF, но не распорки. Пока я читаю - контейнер внедряет зависимости в любой экземпляр управляемого компонента (компонент, созданный контейнером).

Итак, что такое "управляемый контейнером компонент"? Любой POJO? Или только jsf back bean, ejb-bean и так далее?

А как это происходит? У Glassfish есть специальный загрузчик классов?

1 Ответ

3 голосов
/ 08 февраля 2011

Я могу внедрить ваши компоненты CDI только в управляемые классы. Struts создает свои собственные экземпляры, поэтому bean-компоненты Struts не управляются контейнерами.

Я не знаю, есть ли в Struts плагин, способный вставлять бины CDI, но вы можете найти менеджер бинов в дереве JNDI.

public BeanManager getBeanManager() {
    try {
        Context jndiContext = new InitialContext();
        return (BeanManager) jndiContext.lookup("java:comp/BeanManager");
    } catch (NamingException e) {
        // handle the exception
    }
}

В вашем приложении вы можете использовать это:

BeanManager manager = BeanManagerUtil.getBeanManager();
manager.getBeans(MyClass.class); 

Для каждого компонента, возвращаемого методом getBeans, необходимо получить ссылку на компонент

CreationalContext ctx = manager.createCreationalContext(bean);
MyClass myClass = manager.getReference(bean, MyClass.class, ctx);

Привет

...