As is sometimes happens, there is an important issue that fell through
the cracks in the 2.2.0.Final release. Therefore, we release 2.2.0.SP1
which addresses it. See http://weld.cdi-spec.org/download/
I have two OSGI bundles:
The first contains: service, servlet, pojo
The second contains: consumer (of the service).
A) I inject service (bundle 1) to consumer (bundle 2) via CDI (@OSGiService) - everything is OK.
B) I inject pojo to servlet via CDI (manually using beanManager.getBeans,beanManager.resolve) - everything is OK.
C) I inject pojo to service via CDI (manually using beanManager.getBeans,beanManager.resolve) - Error - can't locate the bean.
The reason why I use manual injection is that that I couldn't get it to work with @Inject and started googling. And I found this
>CDI allows injection into non-component classes, but the instances must still be created by CDI. Your activator is instantiated by OSGi framework and CDI has no way to hook into that process. You can programmatically get hold of the CDI injection manager and request an instance from it instead of using @Inject in your main class.
I think that (C) must work, because instance is created via CDI but it doesn't. Is this a bug? How can it be fixed?