>>>OSGi适合什么场景: 

(1).有多个不同版本的库包,都需要被加载到同一JVM中,==>根据类全路径和版本号(组合关键字)创建类==> 

(2).不适合用于bundle整个应用,适合用于接入很多包时,做到自动、纠错处理;==>在接入很多包时,有自动、纠错处理的优点 

>>>使用OSGi的优势:热部署、动态配置,也就是Karaf所具备的特征中的前两个; 

>>>Comparing Java EE with OSGi is like comparing apples and oranges with the additional bonus of not knowing what is what. ==>不能单纯的比较J2EE和OSGi 

 ==>类似苹果和橘子的比较,要知道在什么时候用什么东西。谁更适合用于哪种场景 

 ==>J2EE聚焦于异构环境和企业级范围的信息系统集成的可扩展、多层业务应用 

 ==>OSGi只是一个小范围,通过集成多个独立的代码库到同一个JVM中; 

 ==>OSGi是一个容器技术,类似于J2EE技术中的Servlet、JDBC、EJBs、JMS等,不对J2EE有什么影响; 

 ==>OSGi目前还不会变为J2EE的规范,至少在JDK8之前。 

>>>OSGi框架:Eclipse Equinox, Apache Felix, Knoplerfish. 

>>>Eclipse就是用OSGi框架写的,还有其他的中间件产品和开源产品,包括应用服务器、企业服务总线、IDE也是用OSGi框架的。 

>>>Apache Aries ==> 实现了部分OSGi规范的元部件或者组件 

>>>Apache Aries ==>提供了企业级OSGi元部件,Aries是对OSGi一些企业级规范的实现,目前包含如下实现: 

 (1)Blueprint规范 ==>Blueprint Specification 

 (2)JTA事务服务规范 ==>JTA Transaction Service Specification 

 (3)JMX管理模型规范==>JMX Management Model Specification 

 (4)JNDI服务规范==>JNDI Service Specification 

 (5)JPA服务规范==>JPA Service Specification 

 (6)服务加载器仲裁规范==>Service Loader Mediator Specification 

 (7)子系统服务规范==>Subsystem Service Specification 

>>>Blueprint服务是从Spring框架组件模型映射来的,Blueprint Container 规范为OSGi定义了一个依赖性注入(dependency injection)框架 

 ,目的是处理OSGi的动态特性,即服务可以在任何时间变得可用和不可用,但blueprint container需要OSGi框架来运行。 

>>>OSGi R5或者R4有三大部分规范:Core、Compendium<纲要>、Enterprise 

>>>Manifest Headers==>重要属性项如下==>属性值间是逗号隔开,每个属性值中的区分间隔是分号 

/begin 

Bundle-Activator: org.apache.felix.cm.impl.ConfigurationManager 

Bundle-ManifestVersion: 2 

Bundle-Name: Apache Felix Configuration Admin Service 

Bundle-SymbolicName: org.apache.felix.configadmin 

Bundle-Version: 1.6.0 

DynamicImport-Package: org.osgi.service.log; version="1.3" 

Embed-Dependency: 

Export-Package: 

Export-Service: 

Import-Package: 

Import-Service: org.osgi.service.log.LogService; availability:=optional; multiple:=false 

/end// 

>>>一个bundle是一个规则的jar文件,附加的元数据放在MANIFEST文件中。bundle就是jar文件,但必须有MANIFEST文件。 


>>>基于OSGi开发,你需要做什么? 

(0)选择OSGi框架 

(1)编写OSGi bundle ==>最关键的是Manifest文件 

 ==>开发环境可以通过Eclipse结合Ant或者Maven 

 ==>需要继承OSGi框架中的类或者实现其接口 

(2)准备OSGi运行时环境==>karaf 

(3)部署这些OSGi bundle 


***、What is OSGi ==>OSGi是什么? 

>>The dynamic modular system for Java ==>Java领域的动态模块系统 

>>Defines a way to create true modules and a way for those==>定义了创建真正模块的方式,定义了通过在运行时进行的模块交互来构建模块化系统的方式 

modules to interact at runtime to create a modular system 

>>A module: a bundle ==>模块就是bundle,jar+manifest(bundle元数据) 

A jar + manifest (bundle metadata) 

>>Can be installed, updated, and uninstalled without restarting the JVM==>在不重启JVM的前提下可以安装、升级、卸载模块(bundle) 

***、How does OSGi help?==>OSGi是如何起作用? 

OSGi helps to break down a complex systems into a collection of 

interacting modules ==>OSGi有助于将一个复杂系统切割成一组交互的模块。 

>>Modularity ==>模块性 

 >>>A bundle can share/hide information at package level ==>一个bundle可以在包级别共享或者隐藏信息; 

>>Lifecycle Management ==>生命周期管理 

 >>>Separate class loader for each bundle ==>每个bundle的类加载是隔离的; 

 >>>A bundle-lifecycle can be managed dynamically==>一个bundle的生命周期可以被动态管理 

>>Services ==>服务 

 >>>Each bundle provides it's functionality as OSGi services to other bundles==>每个bundle可以作为OSGi服务,将其功能提供给其他bundle。 

 >>>Services are simply Java objects that implement a given interface==>服务是实现了指定接口的简单Java对象。 

 >>>Implementation is loosely coupled==>实现是松耦合的。 

 >>>Bundles reuse a single Java object registered==>Bundle可以重用被注册的单个Java对象 

 >>>In VM collaborative SOA model==>在同一个JVM中,可协作的SOA模型 

***、A Middleware platform provides;==>中间件平台提供以下能力 

>>Integration ==>集成 

>>Governance ==>监管 

>>Data Services ==>数据服务 

>>Business Processes ==>业务流程 

>>Connectivity Services ==>连接性服务 

>>Identity and Security ==>身份和安全 

>>Application Management ==>应用管理 

>>API Management ==>API管理 

***、OSGi in Middleware==>OSGi在中间件(用处) 

>>Each SOA component can be represented by an OSGi bundle==>每一个SOA组件可以通过一个OSGi bundle来表示。 

 >>>Application Management ==>应用管理 

 >>>Mediation ==>仲裁 

 >>>Service Hosting etc. ==>服务属主等等 

>>Separation of concern ==> 关注点分离 

 >>>Each OSGi bundle to provide a set of well-defined services==>每一个OSGi bundle提供了一组定义好的服务 

 >>>Loosely coupled components==>松耦合组件 

>>Dynamic loading of modules ==>动态模块加载 

 >>>Can extend the system dynamically by installing new bundles==>通过安装新的bundle,能够做到动态扩展系统 

 >>>Is supported by an underlying provisioning platform==>通过下层的预配置平台来支撑 

***、Carbon: An open-source fully componentized enterprise 

middleware platform based on OSGi ==>Carbon是一个基于OSGi的开源的、完全组件化的企业级中间件平台。 


***、模块化和版本化是中间件项目的两个核心问题