【发布时间】:2014-01-12 13:16:19
【问题描述】:
我对这个(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的东西。
谢谢你的时间
【问题讨论】:
标签: osgi osgi-bundle knopflerfish