【发布时间】:2012-11-29 22:44:49
【问题描述】:
我知道可以使用ServiceTracker 将 OSGi 服务注入 EJB。
但是,我应该如何使用OSGi Blueprint XML configuration 将服务注入标准 EJB,以便在其他地方使用 EJB 时可以使用服务? 还是真的不可能,因为 EJB 在它们自己的层中工作?
我一直在尝试使用 Aries Blueprint 和 Gemini Blueprint 以及 JBoss AS7 来做到这一点,但没有运气。
以 bean 为例:
import javax.annotation.PostConstruct;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import org.osgi.framework.BundleContext;
@Stateless
@LocalBean
public class SimpleStatelessSessionBean {
InformationService service; // how'd I go about to get this populated?
@PostConstruct
public void init() {
}
public String getMessage() {
if (service == null)
throw new IllegalStateException("Service not available");
return "EJB:" + service.getMessage();
}
}
【问题讨论】:
-
PAX CDI 专门用来解决这个问题。你应该调查一下。
-
@BjörnPollex 在team.ops4j.org/wiki/display/PAXCDI/Web+Applications 上说“Pax CDI 仅适用于传统的 Pax Web Jetty 容器。它还不支持 Pax Web Tomcat 容器。” - 我不认为它是其他容器的替代品
标签: jakarta-ee ejb osgi blueprint-osgi