《深入理解OSGi:Equinox原理、应用与最佳实践》一3.6 Bundle上下文

简介: 本节书摘来自华章出版社《深入理解OSGi:Equinox原理、应用与最佳实践》一 书中的第3章,第3.6节,作者:周志明 谢小明,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.6 Bundle上下文

OSGi容器中运行的各个Bundle共同构成了一个微型的生态系统,Bundle的许多行为都无法孤立进行,必须在特定的上下文环境中才有意义,因为要与上下文的其他Bundle或OSGi框架进行互动。在代码中使用BundleContext对象来代表上下文环境,当Bundle启动的时候,OSGi框架就创建这个Bundle的BundleContext对象,直到Bundle停止运行从OSGi容器卸载为止。Bundle在进行以下操作时,需要通过BundleContext对象来完成。
安装一个新的Bundle到当前OSGi容器之中(BundleContext.installBundle()方法)。
从当前OSGi容器中获取已有的Bundle(BundleContext.getBundle()方法)。
在OSGi容器中注册服务(BundleContext.registerService()方法)。
从当前OSGi容器中获取已有的服务(BundleContext.getService()方法)。
在OSGi容器中注册事件监听器(BundleContext.addBundleListener()、Bundle- Context.addFrameworkListener()方法)。
从Bundle的持久储存区中获取文件(BundleContext.getDataFile()方法)。
获取Bundle所处环境的环境属性(BundleContext.getProperty()方法)。
每个Bundle的BundleContext对象都是在调用Bundle.start()方法时由OSGi框架创建并以方法参数的形式传入到Bundle中,实现Bundle时一般会把这个对象的引用保留起来,以便在Bundle其他代码中使用,示例如下:

public class Activator implements BundleActivator {

    private static BundleContext context;

    // Bundle中其他代码调用Activator.getContext()方法获取
    // BundleContext对象
    public static BundleContext getContext() {
        return context;
    }

    public void start(BundleContext bundleContext) throws Exception {
        // 将BundleContext对象的引用保留起来
        Activator.context = bundleContext;
    }
}

上下文对象涉及Bundle的数据安全和资源分配,它应当是Bundle私有的,不应当传递给其他Bundle使用。在Bundle的stop()方法执行完之后,Bundle对象就会随之失效,如果在Bundle停止后继续使用BundleContext对象,那么OSGi框架就会抛出IllegalStateException异常。

相关文章
|
Java 程序员 数据中心
《深入理解OSGi:Equinox原理、应用与最佳实践》一第1章 Java模块化之路
本节书摘来自华章出版社《深入理解OSGi:Equinox原理、应用与最佳实践》一 书中的第1章,第1.1节,作者:周志明 谢小明,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1439 0
|
容器
《深入理解OSGi:Equinox原理、应用与最佳实践》一3.1 Bundle标识
本节书摘来自华章出版社《深入理解OSGi:Equinox原理、应用与最佳实践》一 书中的第3章,第3.1节,作者:周志明 谢小明,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1133 0
《深入理解OSGi:Equinox原理、应用与最佳实践》一3.5 系统Bundle
本节书摘来自华章出版社《深入理解OSGi:Equinox原理、应用与最佳实践》一 书中的第3章,第3.5节,作者:周志明 谢小明,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1188 0
《深入理解OSGi:Equinox原理、应用与最佳实践》一2.2 Bundle
本节书摘来自华章出版社《深入理解OSGi:Equinox原理、应用与最佳实践》一 书中的第2章,第2.2节,作者:周志明 谢小明,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1394 0
|
Java 容器
《深入理解OSGi:Equinox原理、应用与最佳实践》一3.2 Bundle状态及转换
本节书摘来自华章出版社《深入理解OSGi:Equinox原理、应用与最佳实践》一 书中的第3章,第3.2节,作者:周志明 谢小明,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1730 0
|
Java Spring 容器
《深入理解OSGi:Equinox原理、应用与最佳实践》一2.4 Bundle的组织与依赖
本节书摘来自华章出版社《深入理解OSGi:Equinox原理、应用与最佳实践》一 书中的第2章,第2.4节,作者:周志明 谢小明,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1400 0
《深入理解OSGi:Equinox原理、应用与最佳实践》一3.4 事件监听
本节书摘来自华章出版社《深入理解OSGi:Equinox原理、应用与最佳实践》一 书中的第3章,第3.4节,作者:周志明 谢小明,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1058 0
|
Java 应用服务中间件
《深入理解OSGi:Equinox原理、应用与最佳实践》一导读
笔者自2007年接触OSGi以来,曾在数个大型系统中使用过OSGi作为软件的基础架构,这一方面使笔者深刻感受到了OSGi带来的诸多好处以及OSGi设计思想的魅力;另一方面也使笔者注意到OSGi的入门门槛相对较高,如果没有足够的指导材料,开发人员从零开始学习并探索出OSGi的最佳实践需要很高的成本。
1398 0
《深入理解OSGi:Equinox原理、应用与最佳实践》一1.3 本章小结
本节书摘来自华章出版社《深入理解OSGi:Equinox原理、应用与最佳实践》一 书中的第1章,第1.3节,作者:周志明 谢小明,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1183 0
《深入理解OSGi:Equinox原理、应用与最佳实践》一3.7 本章小结
本节书摘来自华章出版社《深入理解OSGi:Equinox原理、应用与最佳实践》一 书中的第3章,第3.7节,作者:周志明 谢小明,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1265 0