zoukankan      html  css  js  c++  java
  • 转载:OSGI组件依赖

    原文链接:

    OSGi组件依赖

        OSGi doesn’t allow you to specify class visibility at the class level, but instead at the level of the containing package.

    1. The header:Export-Package and The directives for the Export-Package header

        当指定一个package export,默认的它的subpackage是没有exportde,需特别指定。

        Directives for the Export-Package header:

        (1)exclude : Specifies a list of packages that must be invisible to the component importing the

             package.
        (2)include : Specifies a list of packages that must be visible to the component importing the

             package.
        (3)mandatory Specifies a list of mandatory properties that must be specified when using the

            exported package in other components.
        (4)uses : Specifies a list of packages that an exported package uses. This directive is used by 

            the dependency resolver to ensure that imported package versions correspond to those
            specified here.

        默认情况下,在Export Package是,OSGi框架会自动将ExportBundles的bundle-symbolic-name和Bundle

        -Version属性添加上。

        例如:Export-Package:
                 org.springframework.beans.factory.serviceloader;
                 uses:="org.springframework.util,
                 org.springframework.beans. factory.config,
                 org.springframework.beans.factory";
                 version=2.5.5, 
                 org.springframework.beans.annotation;
                 uses:="org.springframework.util,
                 org.springframework.beans";
                 version=2.5.5,

                 ...

    2. The header:Import-Package and It's stand attributes

        Standard attributes usable with the Import-Package header:

        (1)version : Specifies the version range for matching exported packages. If this attribute
            isn’t specified, the default value is [0.0.0, ∞). 
        (2)bundle-symbolic-name : Specifies the symbolic name of the component that exports the

            packages. In the case of a fragment bundle, the name will correspond to the host bundle’s

            symbolic name instead. A fragment is a special bundle that allows extending an existing

            bundle.

        (3)bundle-version : Specifies the version of the component that exports the packages. As
            with version, the default value is [0.0.0, ∞) and the fragment behavior is as for bundle-

            symbolic-name.

        例如:

        Import-Package: javax.el;version="[2.1.0, 3.0.0)";resolution:=optional
        net.sf.cglib.proxy;version="[2.1.3, 2.2.0)";resolution:=optional,
        org.apache.commons.logging;version="[1.0.4, 2.0.0)",
        org.springframework.core;version="[2.5.6, 2.5.6]";resolution:=optional,
        org.springframework.core.annotation;version="[2.5.6, 2.5.6]";
        resolution:=optional

        In addition to the previous attribute, the resolution directive of the Import-Package header

        makes it possible to change the behavior of this resolution mechanism.The first possible value

        of the directive is mandatory, which is also the default.When a package is marked as

        mandatory, it means that if the package can’t be resolved, the component itself can’t be

        resolved. The other value is optional. In this case, if the package isn’t present during the

        resolution phase, the package isn’t considered imported by the component.

    3. The header: DynamicImport-Package

        It bypass the regular class-resolution mechanism we have described and instead allows

        classes to be loaded on demand at runtime. Dependencies specified in this way are ignored

        during the transition between the installed and resolved states.

        The DynamicImport-Package header can contain a list of packages, but it also supports two 

        wildcards for specifying package names. Moreover, these imports are searched for in the order

        in which they are specified. This ordering is important, especially when using wildcards,

        because it determines the order in which matching occurs. In the following snippet, packages

        with the value test for the attribute myattribute will be preferred over other packages.

        DynamicImport-Package: *;myattribute=test, *

        
        No directives are defined for this header, but the standard version, bundlesymbolic-name,  

        and bundle-version attributes can all be used for package matching with the same semantics

        as Import-Package.

    4. The header: Require-Bundle

        The Require-Bundle header is provided by the OSGi specification so you can consume all

        exported packages from other components based on component symbolic names.

        The Require-Bundle only has one attribute:bundle-version,the bundle-version attribute uses

        the same semantics as the version attribute of the Import-Package header and specifies
        the component version of the dependency.

        例如:

        Manifest-Version: 1.0
        (...)
        Import-Package: javax.servlet;version="2.5.0",
        javax.servlet.http;version="2.5.0",
        javax.servlet.jsp;version="2.0.0",
        (...)
        Require-Bundle: com.springsource.javax.servlet.jsp.jstl;
        bundle-version=1.1.2,com.springsource.org.apache.taglibs.standard;
        bundle-version=1.1.2

        注意:同一份MANIFEST.MF配置文件中,Import-Package header takes priority over the Require

        -Bundle header.

        Directives usable with the Require-Bundle header:

        (1)visibility : When set to private (the default value), the exported packages of the

        corresponding bundles aren’t re-exported. Setting this to reexport will achieve the opposite.
        (2)resolution : Controls dependency resolution. If set to mandatory (the default value), the
        dependency must be successfully resolved for the bundle to resolve. With the optional value,

        dependencies are only resolved if they’re present, and the bundle will resolve regardless.

    5. Split packages

        You saw that referencing bundles with the Require-Bundle header is equivalent to importing

        all of their exported packages. A problematic case occurs when two different required bundles 

        export the same package. Such packages are named split packages because their content

        comes from several bundles.
        Although OSGi allows split packages, you’ll notice that they have several obvious drawbacks.
        When different bundles provide the same classes, unpredictable shadowing of classes can arise.

    6. Matching and Versioning

    6.1 Version Matching

        The different parts of a version value:

        (1)Major number : For major updates with no provision for compatibility with previous major     

             versions.
        (2)Minor number : For functional updates compatible with the current major version (compatible

            for clients using an interface, but not for implementers).
        (3)Micro number : For bug fixes.
        (4)Qualifier : Values like “–SNAPSHOT” for the current development version can also be added

            at the end of the value. The version number with a qualifier is lower than the number without.

    6.2 Optional Depedencies

        OSGi supports optional dependencies on both packages and bundles with the Import-Package

        and Require-Bundle headers.

    6.3 Attribute Matching

        模式:

        Header-Name: header-value1;directive-name1:=directive-value1;attribute-name1= attribute

        -value1;attribute-name2=attribute-value2, 
        (...)

        例如:

        Export-Package: com.manning.osgi.simple;criteria="Manning";mandatory:="criteria"

        Import-Package: com.manning.osgi.simple;criteria="Manning"

  • 相关阅读:
    让一个 csproj 项目指定多个开发框架
    推荐近乎免费的调试神器——OzCode
    再也不用克隆多个仓库啦!git worktree 一个 git 仓库可以连接多个工作目录
    .NET Core 和 .NET Framework 中的 MEF2
    将 WPF、UWP 以及其他各种类型的旧样式的 csproj 文件迁移成新样式的 csproj 文件
    .NET 中的轻量级线程安全
    卡诺模型(KANO Model)
    C#/.NET 匿名函数会捕获变量,并延长对象的生命周期
    迫不及待地体验了一把 C#8.0 中的可空引用类型(Nullable Reference)
    异步任务中的重新进入(Reentrancy)
  • 原文地址:https://www.cnblogs.com/anrainie/p/3014652.html
Copyright © 2011-2022 走看看