我对这个(OSGI)真的很陌生,试图做一些简单的例子。我不能让懒惰的行动起作用。我知道有一些 Blueprint impl 可以解决此类问题,但在继续使用之前,我认为学习一些基础知识会很好。
捆绑数据服务: 清单版本:1.0 捆绑版本:1.0.0 捆绑名称:DataService 捆绑清单版本:2 捆绑激活器:DataService.Activator 导入包:org.osgi.framework Bundle-SymbolicName:数据服务 导出包:DataService;version="1.0.0" Bundle-ActivationPolicy:懒惰 捆绑数据服务客户端: 清单版本:1.0 捆绑版本:1.0.0 捆绑名称:DataServiceClient 捆绑清单版本:2 捆绑激活器:DataServiceClient.Activator 导入包:org.osgi.framework, DataService;version="[1.0.0,1.0.0]" 捆绑符号名称:DataServiceClient
好的,我已经更改了代码,但仍然没有运气。
外部应用程序,安装包,启动框架,然后只启动 DataServiceClient 包。无法访问任何捆绑类。
文件 bundleDir = new File("./bundles/"); 字符串[] bundleResources = bundleDir.list(); for(字符串捆绑资源路径:捆绑资源){ 文件 bundleResource = new File(bundleDir, bundleResourcePath); InputStream bs =new FileInputStream(bundleResource); mFramework.getBundleContext().installBundle(bundleResource.getName(), bs); } mFramework.start(); bl = mFramework.getBundleContext().getBundles(); for(捆绑 b:bl){ if (b.getBundleId() != 0 && b.getSymbolicName().contains("DataServiceClient")) { b.开始(); } }
这是 DataServiceClient 的开始:
System.out.println("DataServiceClient 启动"); IDataService 服务 = new DummyService(); System.out.println(service.getData());
这是“DataService”包中的 DummyService 类。
公共类 DummyService 实现 IDataService { @覆盖 公共字符串 getData() { 返回“虚拟服务数据”; } }
这是“DataService”包的开始:
System.out.println("数据服务启动");
我得到的输出:
数据服务客户端启动 虚拟服务数据
但是我希望看到:
数据服务客户端启动 数据服务启动 虚拟服务数据
来自http://www.osgi.org/Design/LazyStart的一个小例子
延迟激活
延迟激活是一种生命周期策略,它要求必须在第一次成功请求从该包加载类时激活包。
但是,由于它不起作用,我想我完全误解了延迟激活的概念,或者我做错了什么。
除非我为 DataService 包显式调用 start ,否则它似乎不会为 DataService 包调用 Activator.start 。这就是我没有得到atm的东西。
谢谢你的时间