Я использую Apache Felix и сварной шов и у меня есть два класса:OSGi + Weld: FrameworkUtil getBundleContext() возвращает нуль
@ApplicationScoped
class A {
private B b= new B();
}
class B {
private void foo(){
BundleContext bc= FrameworkUtil.getBundle(this.getClass()).getBundleContext();
}
}
Объект класса А создается КДИ контейнером, и я думаю, что причина того, что в классе B FrameworkUtil.getBundle возвращает null. Может быть, проблема с загрузчиком или что-то в этом роде. Конечно, я могу получить ссылку на контекст пакета из класса A, поскольку Weld вводит его. Но я не хочу держать эту ссылку внутри A и передавать ее другим классам. Могу ли я получить ссылку на контекст связки внутри B (не беря его из A)? Я попытался в B:
@Inject
BundleContext bundleContext;
Но это не сработало. Это может быть важно - эти классы находятся в разных пучках.
Что заставляет вас поверить, что CDI и OSGi будут работать вместе из коробки? Они этого не делают, и поэтому существует проект под названием Pax CDI для обеспечения интеграции. –
@hwellmann Я знаю о paxcdi, так как это невозможно использовать сварить в javase без него. –