如何在SE应用程序中引导weld-osgi版本2

时间:2014-04-05 08:26:01

标签: java java-ee dependency-injection osgi jboss-weld

这真的不好笑。互联网上没有关于如何在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

1 个答案:

答案 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