Java 如何在SE应用程序中引导焊接osgi版本2
这真的不好笑。互联网上没有关于如何在se应用程序中运行weld osgi第二版(2.1.2.final)的信息。版本1的说明不起作用 让开发人员为他们没有提供必要的样本而感到羞愧。我写的。 所以,我有和OSGi activator,我想从中获取bean。在GF4中,我使用了:Java 如何在SE应用程序中引导焊接osgi版本2,java,jakarta-ee,dependency-injection,osgi,jboss-weld,Java,Jakarta Ee,Dependency Injection,Osgi,Jboss Weld,这真的不好笑。互联网上没有关于如何在se应用程序中运行weld osgi第二版(2.1.2.final)的信息。版本1的说明不起作用 让开发人员为他们没有提供必要的样本而感到羞愧。我写的。 所以,我有和OSGi activator,我想从中获取bean。在GF4中,我使用了: private BeanManager getBeanManager() throws NamingException { try{ InitialContext initialContext = new Ini
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()设置是否正确
如何从activator开始使用CDI?我犯了什么错
编辑:
我所做的-我找到了两个使用它的程序的两个源代码,但在它们的基础上编写真的不那么容易(至少对我来说)。第一个是,第二个是,weld 2不再支持weld osgi子项目。相反,使用Pax CDI项目提供与OSGi的集成 Pax CDI文档可在此处找到: 有关更多信息,请访问: -
-只是猜测:您是否调用了
weld.initialize()
?我们有一个带有Weld的Java SE应用程序,并以Java org.jboss.Weld.environment.SE.StartMain
启动它(我们没有任何OSGi)。@palacint About-Weld.initialize()在这个版本中没有这样的方法。那org.jboss.weld.environment.se.StartMain呢?我试着运行了它,一切正常。但据我所知,它是在没有osgi的情况下使用的,因为weld se不是捆绑的。与osgi一样,我认为必须使用weld osgi。weld osgi bundle
不包含任何bundle Activator
头,我不知道应该如何启动它。它可能与以前的版本相似。无论如何,StartMain
解决了问题吗?如果是,我想我应该写下来作为答案。你不知道glassfish使用weld osgi或pax cdi,为什么?