【发布时间】:2011-07-15 20:52:15
【问题描述】:
我使用 OSGI、Weld 和 Glassfish3.1
我有一个带有 ServiceListener 的 OSGI 模块。在 ServiceListener 中,我需要将注册的服务输入到我的数据库中。
最初我想写一个 EJB 去 DB,并在 ServiceListener 添加查找/EJB 注入,这将带来 EJB(EJB 和 ServiceListener 在同一个包中)。
但是查找/EJB 注入不起作用:
@EJB
private AdminService adminService;
private class MyServiceListener implements ServiceListener {
private AdminService adminService;
public MyServiceListener(){
adminService = (AdminService) ctx.lookup("java:global/com.war_1.0.0.SNAPSHOT/AdminService");
...
}
public synchronized void serviceChanged(ServiceEvent event) {
switch (event.getType()) {
case ServiceEvent.REGISTERED:
ServiceReference reference = event.getServiceReference();
adminService.installService(...);
break;
default:
break;
}
}
我也尝试将 EJB 作为 OSGI 服务,但没有成功。
有没有办法解决这个问题?也许我不应该用 ServiceListener 来做?
谢谢
UPD:我找到了一种解决方案:添加一个启动单例 EJB,它注入 DAO 服务并向 OSGI 添加一个侦听器,但它从激活器的静态成员中获取 bundleContext。 但有时会抛出 IllegalStateException(bundleContext 不活跃)
【问题讨论】:
-
您应该在这个问题中添加“glassfish”标签。服务和 EJB 之间的集成是 Glassfish 特有的功能,因此通过适当地标记它可能会吸引了解 Glassfish 的人的注意。
标签: osgi glassfish-3 cdi ejb-3.1