【发布时间】: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