Java 如何在SE应用程序中引导焊接osgi版本2

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

这真的不好笑。互联网上没有关于如何在se应用程序中运行weld osgi第二版(2.1.2.final)的信息。版本1的说明不起作用

让开发人员为他们没有提供必要的样本而感到羞愧。我写的。

所以,我有和OSGi activator,我想从中获取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();
但在第二行我得到

原因: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,为什么?