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

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

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

但是在第二行我得到了

Caused by: java.lang.IllegalStateException: Singleton is not set. Is your Thread.currentThread().getContextClassLoader() set correctly?

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

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

最佳答案

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

关于java - 如何在 SE 应用程序中引导 weld-osgi 版本 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22878449/

相关文章:

java - 特定 LocalDateTime 的 UTC 日期时间

java - 是否可以只获取字符串的第一个字符?

java - 为什么我需要在应用程序中显式声明 REST 资源?

java - 使用 RequestBuilder 上传文件

android - 无法将空值注入(inject)类

java - 在两个简单类的上下文中掌握依赖注入(inject)

java - 为什么 java.net.HttpURLConnection 变成了 sun.net.www.protocol.http.HttpURLConnection?

java - 什么颜色混合算法用于使颜色变暗?

java - JPA 实体不刷新(为每个事务使用新的 EntityManger)

asp.net - 在 dotnet mvc 5 中,如何将服务注入(inject) View ?