CDI: получить ссылку на beanManager через статический метод

Я использую сварку + paxcdi на java se. Я могу получить ссылку на beanManager, используя

@Inject
BeanManager beanManager;

Однако понятно, что я могу использовать этот способ только в объектах, которые управляются CDI-контейнером. Как я могу получить ссылку на beanmanager в объекте, созданном новым?


person Community    schedule 29.05.2015    source источник
comment
CDI.current().getBeanManager() не работает? См. blogs.oracle.com/arungupta/entry/   -  person Hein Blöd    schedule 29.05.2015
comment
@Hein Blöd Вызывает ошибку: java.lang.IllegalStateException: невозможно получить доступ к CDI на javax.enterprise.inject.spi.CDI.current(CDI.java:65)   -  person    schedule 29.05.2015
comment
Я упустил из виду, что вы используете Java SE; следовали ли вы инструкциям в справочном руководстве< /а> тогда?   -  person Hein Blöd    schedule 29.05.2015


Ответы (1)


Я предполагаю, что вопрос относится к OSGi, так как в противном случае не имеет смысла использовать Pax CDI.

Pax CDI создает отдельный контейнер CDI и, следовательно, отдельный менеджер компонентов для каждого пакета компонентов. По этой причине не совсем очевидно, каким должен быть текущий менеджер компонентов.

Начиная с Pax CDI 1.0.0.RC1, CDI.current() возвращает значимое значение при вызове из метода OsgiServiceProvider, если целью метода является точка внедрения в вызывающем классе. CDI.current() в противном случае не определено.

Pax CDI 0.x основан на CDI 1.0 и поэтому не поддерживает CDI.current().

person Harald Wellmann    schedule 30.05.2015
comment
Вы правы - это osgi+cdi. Не могли бы вы подробно объяснить, что нужно сделать, чтобы использовать CDI.current()? - person ; 30.05.2015
comment
Пожалуйста, взгляните на этот вопрос stackoverflow.com/questions/38871453/ - person Pavel_K; 10.08.2016