• 1. OSGI 入门与实践18 十月 2018李军
  • 2. AgendaOSGI 简介 OSGI 应用场景 OSGI Framework开源实现 OSGI Framework OSGI Web App 实战 Q&A 参考资料 18 十月 2018
  • 3. 什么是OSGIOSGi的名称来源于其开源组织的名称Open Services Gateway initiative,OSGi是一个标准,它致力于提供给Java项目一个模块化的底层环境,以及一系列通用的服务(Service)。 和普通的JVM 程序相比的特点: 天生拥有动态模块的特点; 不同的模块(OSGi里称之为Bundle)有着独立的生命周期; 非常适合需要进行Plugin管理的项目 OSGi标准还规范了一系列我们常间的操作,日志、配置文件、事件队列、Web开发、JPA&JDBC等等,大部分部署 OSGi标准的框架都提供了这些服务,这样一方面规范了我们代码的结构,一方面节约了我们开发的时间。18 十月 2018
  • 4. OSGI发展史R1:The OSGi Service Gateway Specification Release 1.0 was released in May 2000. R2:OSGi Service Platform Release 2 was released in October 2001. R3:OSGi Service Platform Release 3 was released in March 2003. R4:OSGi Service Platform Release 4 Version 4.0 was first released in October 2005. Version 4.1 was released in May 2007. Core and Compendium Version 4.2 was released in September 2009. Enterprise Version 4.2 was released in March 2010.  Core Version 4.3 was released in April 2011.18 十月 20181、泛型 2、Capabilities 用于表达非代码的依赖 3、Remote Services( 4.2 定义,4.3实现) 4、适配 (于提供关于bundle的元信息,同时又不会使用特定类型的访问符污染bundle的接口。) 5、Weaving (Weaving支持也得以实现,这样扩展就可以插入到其他bundle的类加载机制中了。)
  • 5. AgendaOSGI 发展史 OSGI 应用场景 OSGI Framework 开源实现 OSGI Framework OSGI Web App 实战 Q&A 参考资料 18 十月 2018
  • 6. OSGI应用场景 OSGi服务平台的应用包括: 嵌入式领域 服务网关 汽车 工业自动化 建筑物自动化 PDA 网格计算 娱乐(如iPronto) Mobile(移动终端) IDE WEB APP18 十月 2018
  • 7. OSGI应用场景 —MobileOSGi的Mobile规范的定义基于JSR232,由Nokia和Motorola提交给JCP的。 Mobile OSGi framework 的实现支持的主要操作系统有: Android Windows Mobile Symbian Brew Linux18 十月 2018
  • 8. OSGI应用场景—典型案例1BMW汽车的应用控制系统 BMW汽车的应用控制系统采用OSGI作为其底层架构(EclipseCon 2006会议得到了证实),系统主要用来控制汽车上的音箱、灯光等等设备,总共由1000多个Bundle构成,但BMW汽车的应用控制系统启动时间却只需要3.5秒。18 十月 2018
  • 9. OSGI应用场景—典型案例2Eclipse Eclipse作为Java业界成功的IDE ,在3.0以前的版本它采用的是自己设计的一套插件体系结构,在3.0版本时直接采用OSGI作为其插件体系结构。 Eclipse 3.1版本以后大家可以明显的感觉到启动速度的提升。 Eclipse之所以要抛弃自己那套已经比较成熟的插件体系结构而转而采用OSGI,就是因为OSGI的规范性以及OSGI对于插件体系结构更为完整的定义。18 十月 2018OSGI WEB APP应用场景Spring OSGI/ Gemini BlueprintSpring DM/ VirgoJboss 7.0
  • 10. AgendaOSGI 发展史 OSGI 应用场景 OSGI Framework 开源实现 OSGI Framework OSGI Web App 实战 Q&A 参考资料 18 十月 2018
  • 11. OSGI Framework开源实现Apache Felix - (felix.apache.org) Eclipse Equinox - (www.eclipse.org/equinox/) FUSE ESB 4 - (www.fusesource.com) Knopflerfish - (www.knopflerfish.org) OSGI 先行者 ProSyst´s mToolkit - (www.prosyst.com) 支持Mobile 18 十月 2018
  • 12. AgendaOSGI 发展史 OSGI 应用场景 OSGI Framework 开源实现 OSGI Framework OSGI Web App 实战 Q&A 参考资料 18 十月 2018
  • 13. OSGI Framework18 十月 2018安全层是OSGI服务框架的一个可选层。它基于Java 2安全体系结构,提供了对运行在细粒度环境里面的应用部署和管理的基础架构。OSGi框架提供了一个 为Java模块化的通用化和标准化的解决方案。OSGI 框架定义了一个模块单元,称之为bundle。一个bundle是由java classes和其它资源文件组成,包括manifest 文件。在OSGi中,它是应用程序部署的唯一实体。( Bundle部署为jar包)
  • 14. OSGI BundleBundle 是OSGI 框架定义的一个模块单元。一个bundle是由 java classes 资源文件(包括manifest 文件META/ MANIFEST.MF ) 依赖的lib 组成。 在OSGi中, Bundle是应用程序部署的唯一实体。( Bundle部署为jar包) 18 十月 2018
  • 15. OSGI Bundle 生命周期18 十月 2018当框架已经成功地解决了包的清单( manifest 文件)中的依赖关系,就会进入RESOLVED状态
  • 16. OSGI Manifest Headers ReferenceHeaderAttributes and DirectivesOrganizationBundle-ActivatorOSGi AllianceBundle-ClasspathOSGi AllianceBundle-DescriptionOSGi AllianceBundle-Licensedescription linkOSGi AllianceBundle-LocalizationOSGi AllianceBundle-ManifestVersionOSGi AllianceBundle-NameOSGi AllianceBundle-SymbolicNamesingleton:OSGi Alliance18 十月 2018The only required header, this entry specifies a unique identifier for a bundle, based on the reverse domain name convention (used also by the java packages).
  • 17. OSGI Manifest Headers ReferenceHeaderAttributes and DirectivesOrganizationExport-Packagebundle-symbolic-name bundle-version exclude: include: specification-version uses: versionOSGi AllianceRequire-BundleWeb-ContextPathSpringSourceBundle-Required ExecutionEnvironmentOSGi Alliance (4.3不建议使用)18 十月 2018详请参考: http://www.osgi.org/Specifications/ReferenceHeaders
  • 18. OSGI Manifest Sample18 十月 2018
  • 19. Class Loading Architecture18 十月 2018
  • 20. Equinox Class Loading18 十月 2018判断是否交由parent classloader去完成加载 尝试调用Equinox提供的ClassLoaderDelegateHook的扩展来加载 在默认情况下,Equinox中没有ClassLoaderDelegateHook的实现 判断是否在import-package中,如在则交相应的PackageSource去加载 尝试从require-bundle中加载 尝试从当前Bundle中加载 尝试从DynamicImport-Package中加载 再次尝试调用Equinox提供的ClassLoaderDelegateHook的扩展来加载 这步和第2)步相同,因此在默认情况下继续下面的步骤。 尝试使用eclipse的buddy机制来加载 Buddy机制是Eclipse的扩展,并不符合OSGi规范,因此在此不做深入分析。 判断一定的条件,如符合则从parent classloader中加载
  • 21. Equinox Class Loading18 十月 2018
  • 22. AgendaOSGI 发展史 OSGI 应用场景 OSGI Framework 开源实现 OSGI Framework OSGI Web App 实战 Q&A 参考资料 18 十月 2018
  • 23. OSGI Web App 实战(演示)18 十月 2018
  • 24. 创建OSGI WEB工程使用maven构建osgi项目 mvn archetype:generate -DarchetypeCatalog=http://schema.hidev.net/osgi/archetype-catalog.xml mvn eclipse:eclipse 启动osgi bundle Windows运行deploy.bat,Linux运行./deploy.sh 打开浏览器 http://127.0.0.1:8080/ 18 十月 2018
  • 25. 18 十月 2018
  • 26. 参考资料http://www.osgi.org http://en.wikipedia.org/wiki/OSGi http://www.osgi.org/download/r4v43/r4.core.pdf http://www.prosyst.com/index.php/de/html/content/46/Mobile-OSGi-Runtimes/ http://www.jboss.org/jbossas/osgi 18 十月 2018