2011-02-08 3 views
1

Я попытался использовать CDI для работы с распорками на стеклянной рыбке. Но java зависимость не работает для него. Он работает для JSF, но не для стойки. Как я читал - контейнер вводит зависимости любому экземпляру управляемого контейнера bean (bean, созданного контейнером).Что такое «объект, управляемый контейнером» в мире Java 6 EE?

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

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

ответ

3

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

Я не знаю, имеет ли Struts плагин, способный внедрять CDI-компоненты, но вы можете искать Bean Manager в дереве 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 вам нужно получить ссылку Bean

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

С уважением

+0

Спасибо! Но что такое «управляемый класс»? Почему сервлет управляется классом, а действие struts - нет? –

+0

, когда я говорю «управляемый», «управляется и создается экземпляром контейнера». Вы не создаете вручную экземпляр сервлета, используя «новый MyServlet». Создание сервлета управляется контейнером. Классы Struts создаются с помощью struts с использованием новых, поэтому контейнеру не удалось управлять этими классами. –

+0

Теперь это ясно для меня. Спасибо! –

0

Ну, Я нашел плагин struts2-CDI, но он все равно не работает. Он пытается найти BeanManager в java: comp/BeanManager, но он не может найти его там !!

Я использую приложение .war, установленное в стеклянной платке. Возможно, я должен использовать .ear для включения CDI?

Почему нет java: comp/BeanManager in glassfish?

Спасибо.

+0

solvd: http://download.oracle.com/javaee/6/tutorial/doc/gjbnz.html –

+0

@Ilya K У меня такая же проблема. Как вы его решили? – Alboz

Смежные вопросы