这真的不好笑。互联网上没有关于如何在se app中运行weld-osgi第二版(2.1.2.final)的信息。 ver 1的说明不起作用。
让开发人员感到羞耻的是他们没有提供必要的样品。我写了here。
所以,我有和OSGi激活器,我想从中获取豆子。在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();
但是在第二行我得到了
引起:java.lang.IllegalStateException:未设置Singleton。是 你的Thread.currentThread()。getContextClassLoader()设置正确吗?
如何从激活器开始使用CDI?我的错是什么?
编辑: 我做了什么 - 我找到了两个使用它的程序的两个源代码,但是在它们的基础上编写它真的不那么容易(至少对我而言)。第一个是here,第二个是here
答案 0 :(得分:0)
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