• osgi学习


    Bundle可以被动态地安装、启动、停止和卸载。
    Bundle是服务(Service)和组件(Component)的载体。
    在OSGi中,每个Bundle都有自己独立于其他Bundle的ClassLoader,正因为这样,各个Bundle内部的类是隔离的

    Bundle之间的交互方式:
    1.通过Package的Export(对外暴露自己的一个或多个package)和Import(导入别人的一个或多个package)来进行。
    2.通过Service的方式进行。一个Bundle作为Service提供方,对外提供Servcie .使用者可以查找到提供的Service. 并使用这个ServÎce. 而提供/使用Service又存在两种方式:一种是经典的做法,通过BundlcContext ( Bundle 的上下文)来提供和获取.一种是使用Declarative Service来实现.

    生命周期层
    Bundle的生命周期被OSGi框架所管理,具有如下几个状态:INSTALLED 、RESOLVED 、UNINSTALLED 、STARTING 、ACTIVE、STOPPING

    重要接口

    生命周期层的API主要是由以下三个核心接口来组成的:BundleActivator,BundleContext 和 Bundle。
    BundleActivator:让你能够捕捉bundle的start和stop事件,并对这两个事件作出自定义的反应。
    BundleContext:一个bundle在框架中的执行时上下文,这个上下文提供了和框架进行交互的方法。
    Bundle:在逻辑上表示了一个bundle,OSGi环境中的一个物理bundle对应了一个bundle对象。该对象中包含了bundle的基本信息和bundle生命周期的控制接口。

    Bundle-SymbolicName --> 在osgi容器中的全局唯一标识符
    当且仅当两个bundle的bundle-SymbolicName和bundle-version都一样,它们才是完全相同的
    Export-Package:com.jar;filter="true" --> Import-Package:com.jar;filter="true"(或不写,可导入成功)
    Export-Package:com.jar;filter="true";mandatory:="filter" --> Import-Package:com.jar;filter="true"(可导入成功)
    mandatory默认为optional-->可选的

    Import-Package:com.jar;resolution:="mandatory" -->必须的(默认),如果没有任何bundle导出com.jar-->报错

    Import-Package:com.jar;resolution:="optional" -->可选的,如果没有任何bundle导出com.jar-->不报错

    DynamicImport-Package:com.jar -->动态导入com.jar,真正使用到com.jar类时才导入package是否存在

     Export-Package:com.jar;uses:="com.http.jar"  -->  com.jar使用了com.http.jar中的API

    #导入整个bundle(不提倡)

    a、
    bundleA:
    require-Bundle:bundleB
    Export-Package:P

    bundleB:
    Export-package:p;partial=true;mandatory:partial

    如果Bundle没有声明属性partial。它会从bundleA中导入Package p;

    b、

    bundleA:

    require-Bundle:bundleB;visibilit:=reexport -->com.jar是否需要重新导出?默认(private:com.jar不会重新导出)
    bundleB:
    Export-package:com.jar

    #spring-dm
    http://docs.spring.io/osgi/docs/1.2.0-rc1/reference/html/
    #在设计时要遵循的原则是不要静态化地依赖任何服务
    ##4大 Java OSGi 框架比较 (Knopflerfish, Apache Felix, Equinox, Spring DM)

  • 相关阅读:
    indy tcpclient tcpServer
    Delphi生成即调用带窗体的Dll
    本地同步到网络时间
    tfield的字段名和显示名
    Delphi流的操作_文件合并
    Delphi7 流操作_压缩
    delphi内嵌汇编
    给rar文件加个自定义头
    fastreport小入门
    delphi 单例模式
  • 原文地址:https://www.cnblogs.com/sprinng/p/5935886.html
Copyright © 2020-2023  润新知