这真的不好笑。互联网上没有关于如何在 se 应用程序中运行 weld-osgi 第二版 (2.1.2.final) 的信息。版本 1 的说明不起作用。
让开发者为没有提供必要的样本而感到羞愧。我写给他们here .
所以,我有 OSGi 激活器,我想从中获取 bean。在 GF4 中我使用了这个:
private BeanManager getBeanManager() throws NamingException
{
try{
InitialContext initialContext = new InitialContext();
return (BeanManager) initialContext.lookup("java:comp/BeanManager");
}
catch (NamingException e) {
System.out.println("Couldn't get BeanManager through JNDI");
return null;
}
}
但是在 SE 应用程序中我无法通过 JNDI 获取它。 我也试过:
Weld weld=new Weld();
BeanManager beanManager=weld.getBeanManager();
但是在第二行我得到了
Caused by: java.lang.IllegalStateException: Singleton is not set. Is your Thread.currentThread().getContextClassLoader() set correctly?
如何从激活器开始使用 CDI?我的错误是什么?
编辑: 我做了什么 - 我找到了两个使用它的程序的两个源代码,但在它们的基础上编写真的不那么容易(至少对我而言)。第一个是 here第二个是here
最佳答案
Weld 2 不再支持 weld-osgi 子项目。相反,使用 Pax CDI 项目提供与 OSGi 的集成。
Pax CDI 文档可在此处找到:https://ops4j1.jira.com/wiki/display/PAXCDI/Pax+CDI
可在以下位置找到更多信息: - http://karaf.apache.org/manual/latest/users-guide/cdi.html - https://github.com/weld/core/blob/master/examples/osgi/README.md
关于java - 如何在 SE 应用程序中引导 weld-osgi 版本 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22878449/