【问题标题】:How to bootstrap weld-osgi version 2 in SE application如何在 SE 应用程序中引导weld-osgi 版本 2
【发布时间】:2014-05-17 16:34:58
【问题描述】:

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

但是在第二行我得到了

原因:java.lang.IllegalStateException:未设置单例。是 你的 Thread.currentThread().getContextClassLoader() 设置正确吗?

如何从激活器开始使用 CDI?我的错误是什么?

编辑: 我所做的 - 我找到了两个使用它的程序的两个源代码,但在它们的基础上编写真的没那么容易(至少对我来说)。第一个是here,第二个是here

【问题讨论】:

  • 只是猜测:你打电话给weld.initialize()了吗? docs.jboss.org/weld/reference/latest/en-US/html/…
  • 我们有一个带有 Weld 的 Java SE 应用程序,并以 java org.jboss.weld.environment.se.StartMain <args> 开头运行良好(我们没有任何 OSGi)。
  • @palacsint 关于 -weld.initialize() 在这个版本中没有这样的方法。 org.jboss.weld.environment.se.StartMain 怎么样?我尝试运行它,一切正常。但据我了解,它在没有 osgi 的情况下使用,因为weld-se 不是捆绑包。使用osgi,我认为必须使用weld-osgi。
  • weld-osgi-bundle 不包含任何 Bundle-Activator 标头,我不知道应该如何启动它。它可能与以前的版本相似。
  • 无论如何,StartMain 解决了问题吗?如果是,我想我应该把它写成答案。

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


【解决方案1】:

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

【讨论】:

  • 你不知道 glassfish 使用weld-osgi 或pax cdi 吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-22
  • 1970-01-01
  • 2017-06-25
  • 1970-01-01
  • 2016-07-10
  • 2017-02-02
  • 1970-01-01
相关资源
最近更新 更多