OSGi 理论: 一些认知

什么是 OSGi

开放式服务网关工作小组

Open Service Gateway Initiative

Java动态模块

Enabled greater dynamic modularity in Java

为我们带来的帮助

  • 建立面向服务(SOA in VM)模块化的 Java 应用
  • 帮助我们分离接口和实现
  • 更好的使用基于接口的开发模式,创建模块和管理应用
  • 将要软件要处理的每个具体问题放入分离的逻辑单元
  • 每个逻辑单元具有自已的逻辑边界
  • 逻辑单元保持简单和可维护性(Unix Slang: do one thing well!)

我们以前的几个主要问题

Java 模块化是建立在面向对象的类文件上
  • 并不支持更粗粒度的模块化
  • 其代码级是访问修饰符在于完成很细粒度的面向对象封装,而不是逻辑单元
Java 通过包( package ) 划分代码单元
  • 进行跨包访问Java的类需要将被访问类申明为 public (或protected, 如果是通过类继承的方式)
  • 这样会暴露实现细节破坏封装,会让客户端程序员误用我们的非公共 API
Java VM 通过 Class Path 加载类
  • 缺少代码的版本,类依赖,和一致性的约束 (Returns the first version it finds)
  • 我们无法部署指定版本的依赖和无法演进已部署的组件

OSGi 帮助我们解决了

  • 通过依赖检查,避免在运行期出现 ClassNotFoundException
  • 通过指定版本的依赖,避免在运行期出现错误的类依赖
  • 避免出现由于层次类装载体系出现的 bar instanceof Bar == false
  • 分逻辑单元打包部署 Jar 文件
  • 对包申明访问控制,更好的隐藏实现保护封装
  • 为应用提供强大扩展机制,包括运行期扩展

后续导读

OSGi 理论: 分层
OSGi 理论: 模块元数据 (Bundle's manifest file)
OSGi 实践: 包装 OSGi bundle

上一篇:SSH 安全加固篇:通过“运维密码”小程序实现 SSH 双因子认证


下一篇:如何正确地使用Redis(附性能测试实验结果)