OSGi起步(2):与框架进行交互

基于Equinox框架开发OSGi应用的实践教程 </element> 阅读详情

优快云在我发帖的时候出问题了,真不爽。

-----------------
原文出处:http://www.eclipsezone.com/eclipse/forums/t90448.html
原作者:Neil Bartlett (http://www.eclipsezone.com/forums/profile.jspa?userID=186272)
------------------


OSGi起步:与框架进行交互

欢迎回到EclipseZone的OSGi教程系列。

上一次我们写了一个简单的Hello World bundle,它可以在启动和停止的时候输出消息。这是通过实现BundleActivator接口,并提供stop和start方法来实现的。现在我们再看一下它的代码,在start和stop的方法中,你是否注意到我们传递了一个参数,BundleContext。在今天的教程里,我们将把注意力集中到BundleContext上,看看通过它可以做什么。

--------(以下这段翻译得很别扭-_-!)-----

BundleContext是OSGi框架传递给我们的bundle的一个魔法卡片(-__-!)。我们可以使用BundleConect来与框架进行交互。事实上,这是与OSGi API交互的唯一途径。每个bundle被启动时,框架通过BundleActivator接口传递给它们这样一个魔法卡片。

--------

如果你的Equinox还在运行,那就没有必要重新启动它了。否则在命令行窗口输入以下命令来启动它:

java –jar equinox.jar –console

在提示符下输入ss,你将看到Hello World bundle从上次安装后一直存在着。哪怕你关闭并重启Equinox,这种情况也会一直保持,因为OSGi框架将在每次运行之间持久化它的状态。

(译者注:只有在正常退出的时候,当前状态才会被保存,比如用close命令退出,如果是用非正常退出或者exit命令,则状态不会被保存。)

作为练习,我们写一个bundle来查找并卸载Hello World。虽然我们可以很容易地通过uninstall 命令来实现,但是我们想看看如何通过程序调用OSGi API来实现。好吧,创建一个文件HelloWorldKiller.java,复制以下代码:

import org.osgi.framework.*;

public class HelloWorldKiller implements BundleActivator ...{

    
public void start(BundleContext context) ...{

         System.out.println(
"HelloWorldKiller searching...");

         Bundle[] bundles
= context.getBundles();

        
for(int i=0; i<bundles.length; i++) ...{

            
if("HelloWorld".equals(bundles[i]

                                    .getSymbolicName()))
...{

                
try ...{

                     System.out.println(
"Hello World found, "

                                     
+ "destroying!");

                     bundles[i].uninstall();

                    
return;

                 }
catch (BundleException e) ...{

                     System.err.println(
"Failed: "

                                     
+ e.getMessage());

                 }


             }


         }


         System.out.println(
"Hello World bundle not found");

     }




    
public void stop(BundleContext context) ...{

         System.out.println(
"HelloWorldKiller shutting down");

     }


}



再创建一个manifest文件。注意,别忘记作为结尾的空行。复制以下内容到HelloWorldKiller.mf :

Manifest-Version: 1.0

Bundle-Name: HelloWorldKiller

Bundle-Activator: HelloWorldKiller

Bundle-SymbolicName: HelloWorldKiller

Bundle-Version:
1.0.0

Import-Package: org.osgi.framework



然后编译并创建jar:

javac -classpath equinox.jar HelloWorldKiller.java
jar -cfm HelloWorldKiller
.jar HelloWorldKiller.mf HelloWorldKiller.class

现在,回到OSGi控制台,安装新的bundle,命令是:

install file:HelloWorldKiller.jar

然后,输入ss,应该能看到以下状态:

id       State            Bundle

0        ACTIVE        system.bundle_3.2.1.R32x_v20060919

1        ACTIVE        HelloWorld_1.0.0

2        INSTALLED    HelloWorldKiller_1.0.0

输入 start 2启动Hello World Killer。你将看到以下输出:

HelloWorldKiller searching...

Hello World found
, destroying!

Goodbye EclipseZone Readers!

注意到,最后一行输出来自于之前的Hello World bundle。因为它在被卸载之前处在活动状态,所以需要先停止才能被卸载。这将导致它的BundleAcitvator的stop方法被调用。

再次输入ss查看,可以发现Hello World不见了:

id       State        Bundle

0        ACTIVE       system.bundle_3.2.1.R32x_v20060919

2        ACTIVE       HelloWorldKiller_1.0.0

你们可能会问,这样是否有安全问题。因为看起来似乎任意一个bundle都可以随意卸载别的bundle。幸运的是,OSGi提供了一个设计周密的安全层用于控制与框架的交互。你可以限定只有指定的“管理员”bundle才能卸载bundle。但是,安全问题其实只是一个配置问题,这里,我们主要把注意力放在代码上J

这部分的内容就到这里。在进行下一步分之前,你可以花点时间看看BundleContext接口都能做些什么?例如,你可以通过程序来安装一个新的bundle,对应的方法是installBundle。或者你可以查看所有的bundle的列表,并输出它们的最近一次修改的时间和日期。你可以在OSGi第四版编程接口Java文档中(Javadocs for the OSGi Release 4 APIs http://www2.osgi.org/javadoc/r4/)找到一些帮助。

 
OSGI基础与Spring框架整合实战指南 Bundle是OSGi中的基本模块单元,由一组Java包、资源和相关的元数据组成。这些元数据通常存放在META-INF/MANIFEST.MF文件中,包含Bundle的描述信息,如名称、版本、所需依赖等。Bundle可以执行各种生命周期的操作,例如安装、启动、停止、更新和卸载。从结构上来说,一个典型的Bundle包括以下几个主要部分:元数据:包含在Manifest文件中,提供关于Bundle的详细信息,如Bundle名称、版本、以及它所依赖的其他Bundle的标识符和版本。 阅读详情

相关推荐

密码学小白必看:三大顶级会议论文下载与阅读指南(附完整资源链接)

本文为密码学初学者提供了系统获取和阅读三大顶级会议(Crypto、Eurocrypt、Asiacrypt)论文的实战指南。详细介绍了通过IACR官方渠道、ePrint预印本等权威资源免费下载论文的方法,并分享了高效筛选、精读核心章节及构建个人知识体系的具体策略,帮助读者快速切入密码学研究前沿。

weixin_28363123的博客 393

import org.osgi包导入失败,手动导入jar包

在Libraries添加需要的jar包即可。点击Project Structure。点进去,选择需要的版本下载。

daydream_1010的博客 619

c语言【分糖果】2023蓝桥杯4124(枚举,递归,dfs)

但是这是不符合我们糖果刚好分完的条件的,我们应该往回退到上一层,也就是孩子6这层,然后j+1=3,孩子7分到3个第二种糖果,这也不符合我们糖果刚好分完的条件,然后就会再次回退到孩子6这里,然后j+1=4,让我们的孩子7获得5块第二种糖果,然后还是不符合糖果刚分完的条件,于是再一次退回到孩子6这里,然后就会有外循环i+1=1,j=1,孩子7分到1块第一种糖果1块第二块糖果......然后就是这样的不停地回溯,试探,直到把整棵树遍历一遍,并且记录所有的满足条件的组合。先放一下我的代码,我的代码超时啦救命!

weixin_74331419的博客 730

Getting Started with OSGi_ Part2

      欢迎回到EclipseZone的OSGi系列课程来!这是我们的第二次课——“与OSGi框架进行交互”        上节课我们看了一个简单的Hello World Bundle,它在启动和停止的时候打印了一些信息。它继承了接口BundleActivator,并且实现了start和stop方法。我们来再看一下代码。特别是start方法和stop方法的实现,你是否注意到我们在方法里传入...

蓝天上,白云飘;茶碗中,加瓦游 203

基于Xilinx的I2S Receiver IP核和I2S Transmitter IP核音频验证

基于Xilinx的I2S Receiver IP核和I2S Transmitter IP核音频验证 文章目录前言一、工程构架二、Xilinx IP的配置1.I2S Transmitter IP配置:2.I2S Receiver IP配置:3.WM8960的配置:总结 前言 本实验基于Xilinx ZU4EV平台,也适用于ZYNQ平台。音频验证完成,记录调过程。 ①Xilinx 音频IP只支持主模式,左对齐或右对齐方式,16bit或24bit字长。 ②WM8960器件作为从模式;24bit字长;数据传输格

weixin_45637597的博客 6812

攻防世界 web高手进阶区 9分题 Web_python_flask_sql_injection

继续ctf的旅程,开始攻防世界web高手进阶区的9分题,本文是Web_python_flask_sql_injection的writeup

闵行小鱼塘 1473

osgi模块交互实例

osgi模块间交互有两种方式:导出包方式,与服务方式,导出包方式比较简单,因此只给出实例。 一般模块之间的交互是单向的。假设A使用B项目中的某个功能 新建插件项目B,项目B结构图: [img]http://dl.iteye.com/upload/attachment/465416/ba452bde-cfc5-326b-b0c5-8992a8101f04.jpg[/img] HelloSer...

125

Ubuntu22.04下ROS2与PX4仿真环境搭建全流程解析

本文详细解析了在Ubuntu22.04系统下搭建ROS2与PX4仿真环境的全流程,包括系统准备、ROS2 Humble安装、PX4飞控环境部署、ROS2与PX4通信桥梁搭建等关键步骤。针对常见问题提供了解决方案,并分享了性能优化和开发调试技巧,帮助开发者快速构建无人机仿真开发环境。

weixin_29248653的博客 607

在OSGi容器外和OSGi进行交互 (by quqi99)

                  在OSGi容器外和OSGi进行交互     在使用OSGi时,有些时候会需要在OSGi容器外获取OSGi服务,加载OSGi容器加载的class,或者说需要内嵌OSGi容器,本篇blog以一个简单的例子来说明如何基于equinox实现OSGi容器的内嵌,或者说通过程序来启动equinox,同时也通过此例子展示下如何在容器外来获取OSGi服务

技术并艺术着 2471

【量化入门】Tushare库获取公募基金的历史净值

在本文中,我们将介绍如何使用Python的Tushare库获取公募基金的历史净值。

木头大左的博客 1140

Vue3 - 详细实现移动端H5网页调用摄像头拍照功能,微信公众号网页h5页面打开本地摄像头并点击按钮照相,vue3获取摄像头画面执行拍照保存,调整摄像头前置后置抓拍图片给用户展示或保存手机上传服务器

vue3,H5网页,手机移动端,vue3摄像头拍照,前端h5调用手机摄像头,移动端网页调用摄像头,H5实现手机拍照和选择上传,调用本地摄像头实现拍照,vue3调用摄像头拍照,手机浏览器开启摄像头并进行拍照,H5移动端网页中调用手机摄像头,H5实现web调用摄像头在线照相,vue3h5调用摄像头,微信公众号网页如何调用摄像头拍照,公众号H5页面实现打开摄像头照相,怎么生成临时图片,vue3项目调用摄像头实现拍照功能,摄像头打不开没反应,浏览器不兼容怎么办,摄像头权限不弹出,只能在本地运行,拒绝权限后怎么办,

🏆 前端领域优质创作者 1万+

(转) OSGi入门:交互与框架[译]

http://230996.blog.chinajavaworld.com/entry/3678/0/ 欢迎回来EclipseZone OSGi指导系列。 上一次,我们看了一个简单的Hello World的Bundle在开始和结束的时候输出一段信息。它通过实现BundleActivator接口和start和stop方法。现在再看看代码,在特定方法start和stop方法的标记中,你将注意到我们...

hfer的专栏 197

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

【OSGi】OSGi框架的三个层次

网络上很多OSGi的文章上来就Activator实例,看得云里雾里。要想了解OSGi,首先要知道为什么要用OSGi?它有哪些好处? 首先要明确:Java缺少对高级模块化的支持。OSGi服务平台是专门针对Java对模块化支持不足的情况,由OSGi联盟定义的一个行业标准,它引入了一个面向服务的编程模型,被称作“VM中的SOA” Java模块化的不足 为什么说Java缺少对高级模块化的

Alpha's 学习笔记 1万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

4种常见的osgi框架比较

OSGi正在成为一种趋势,越来越多的项目采用了OSGi,越来越多的中间件都开始采取了OSGi的标准。       什么是OSGi       OSGi的名称来源于其开源组织的名称Open Services Gateway initiative,OSGi是一个标准,它致力于提供给Java项目一个模块化的底层环境,以及一系列通用的服务(Service)。和普通的JVM程序相比,OSGi的程

huakai_sun的博客 1万+

java 启动 osgi_OSGi开发起步

OSGi开发起步(Getting Started with OSGi)-1第一个OSGi模块原文出自:http://neilbartlett.name/blog/osgi-articles/- Getting Started with OSGihttp://hi.baidu.com/tinawhisper/home本文系翻译文章,但并未严格按照原文翻译。1. 第一个OSGi模块本文期望展示OS...

weixin_42334285的博客 928

OSGi 起步(4): 注册服务

我的懒毛病又开始犯了……一定要克服,坚持!-------------------------原始地址:http://www.eclipsezone.com/eclipse/forums/t90688.html原作者: Neil Bartlett--------------------------OSGi 起步(4): 注册服务欢迎回到Eclipse Zone的OSGi教程。

瓶子的窝 4061

osgi框架的应用_OSGi enRoute – OSGi应用程序的新框架

当我们开始使用OSGi时,就有机会为小型网络网关开发世界一流的框架。 相比之下,今天的Raspberry Pi非常庞大。 16年后的今天,OSGi是市场上针对Java应用程序的主要模块化解决方案。 我们认为,模块化解决方案对于每个复杂的Java应用程序都是不可避免的。 就是说,一些博客表明,人们对OSGi有一些错误的信念。 OSGi是市场上唯一包含行业内地震波的解决方案,例如面向对象和控制...

758

OSGi起步(3):bundle之间的依赖

-----------------------原文出处:http://www.eclipsezone.com/eclipse/forums/t90544.html原作者:Neil Bartlett  ----------------------OSGi起步(3):bundle之间的依赖 在之前的教程中,我们知道bundle怎么启动和停止,以及它们如何与框架、以及相互间的生命

瓶子的窝 4184

再谈OSGI,SCA, 服务框架

        兄弟公司新来的BlueDavy同学正好是我过去OSGI起步时的间接导师(看了他的《OSGI进阶》和一些实际的使用经验分享),中午第一次在网上遇到,谈了一会儿,下午有一点时间正好去看了看他新的三篇文章,关于OSGI,SCA,服务框架的文章,有一些自己的体会,在这儿也分享一下,自己对于OSGI也就入门性的了解,所以分析的未必到位,也只能说投石问路了^_^,不过很是期待后面彼此的合作

放翁(文初)的一亩三分地 5720

OSGi原理与最佳实践:第一章 OSGi框架简介(2)

转自:http://www.osgi.com.cn/article/7289456 1.1.4 开发传统类型的应用 1.1.4.1 B/S 我们首先来看一下,如何基于 OSGi 来开发 B/S 结构的应用。B/S 结构应用程序的开发,可有两个选择:一个是在 OSGi 的框架中嵌入 Http 服务器,另外一个是在 Servlet 容器中嵌入 OSGi 框架。下面分别介绍这两种方式的实现。...

infi 1754

OSGI基础与OSGI框架

OSGI(Open Service Gateway Initiative)     通过OSGI,可以进行模块化管理,模块之间真正的解藕,能实现硬件的“热插拔”功能。能够更加规范项目化管理(不同开发人员可以单独做自己模块的开发,不需要考虑其它模块的开发情况),现时也可以手动停止或启用某一模块,避免了WEB应用程序全部启动,无法更改部分功能的缺陷,从而提高系统性能。 OSGi框架规范中定义了框架...

越努力, 407

OSGi起步(1):第一个Bundle

最近决定尝试翻译一些简单的文章。---------------------------------原文出处:http://www.eclipsezone.com/eclipse/forums/t90365.html原作者:Neil BartlettBlog http://neilbartlett.name/blog/osgi-articles/-----------------

瓶子的窝 1778

基于OSGi的struts2改造

恰巧现在项目中正在使用OSGi框架,并需要结合使用Struts2框架,下面记录下改造过程。 在OSGi的浪潮下,struts2也湿鞋了,从2.1.8版开始Struts也有用于支持OSGi的插件了。 想了解正统struts2 OSGi插件的同学可以通过阅读这篇文章《使用 Felix 和 Struts2 开发 Web 应用》 下面言归正传,由于项目要求所有模块都包含在OSGi容器里,而strut

knight1234的专栏 921

OSGi原理与最佳实践:第一章 OSGi框架简介(4)Felix

转自:http://www.osgi.com.cn/article/7289458 1.2 Felix ## 1.2.1 简介 Felix 是 Apache Foundation 关于 OSGi R4 的一个实现。包括了 OSGi 框架和标准的服务,同时也提供并且支持其他的 OSGi 相关技术。Felix 终的目标是要提供和 OSGi 框架和标准服务完全兼容的一个实现。目前 Felix...

infi 1360
上一篇: OSGi起步(1):第一个Bundle
下一篇: "Unsupported major.minor version 49.0"错误
devonzzb
博客等级 码龄25年 7粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值