如何从Java中以编程方式动态加载OSGI片段?
如何从Java以编程方式加载OSGI片段及其包中的所有资源(配置文件等)如何从Java中以编程方式动态加载OSGI片段?,java,osgi,Java,Osgi,如何从Java以编程方式加载OSGI片段及其包中的所有资源(配置文件等) 我想通过getResource()访问资源,就像它们在内部Jar中一样。首先,您需要一个句柄来绑定上下文。在此基础上,您可以监听bundle引用,获得一个bundle实例并使用它的类加载器来执行您想要的操作 使用Servlet连接到捆绑包上下文并侦听出现的osgi捆绑包的示例 public class AnotherHelloWorldServlet extends HttpServlet { private Mes
我想通过getResource()访问资源,就像它们在内部Jar中一样。首先,您需要一个句柄来绑定上下文。在此基础上,您可以监听bundle引用,获得一个bundle实例并使用它的类加载器来执行您想要的操作 使用Servlet连接到捆绑包上下文并侦听出现的osgi捆绑包的示例
public class AnotherHelloWorldServlet extends HttpServlet {
private MessageService service = null;
private BundleContext context;
@Override
public void init(final ServletConfig config) throws ServletException {
super.init(config);
context = (BundleContext) config.getServletContext().getAttribute("osgi-bundlecontext");
final AnotherHelloWorldServlet servlet = this;
ServiceTracker tracker = new ServiceTracker(context,
MessageService.class.getName(), null) {
@Override
public Object addingService(final ServiceReference sref) {
log.infof("Adding service: %s to %s", sref, servlet);
service = (MessageService) super.addingService(sref);
return service;
}
@Override
public void removedService(final ServiceReference sref, final Object sinst) {
super.removedService(sref, service);
log.infof("Removing service: %s from %s", sref, servlet);
service = null;
}
};
tracker.open();
}
}
通过ServiceReference,您可以调用以获取捆绑包实例,并为此获取所需的内容
如果您不能使用servlet或类似的工具(=如果您不在JavaEE/servlet容器中),那么就没有我所知的那么多标准方法来连接到bundle上下文中。在这种情况下,你可能需要求助于获得它