OSGi起步(1):第一个Bundle

MFC中的CMFCToolBar:自定义按钮提示消息 通过以上步骤,您可以在MFC应用程序中使用CMFCToolBar创建自定义按钮,并设置按钮的提示消息。通过以上步骤,您可以在MFC应用程序中使用CMFCToolBar创建自定义按钮,并设置按钮的提示消息。通过上述代码,您可以在MFC应用程序中添加一个名为"ID_BUTTON_CUSTOM"的自定义按钮,并将其提示消息设置为"自定义提示消息"。通过上述代码,您可以在MFC应用程序中添加一个名为"ID_BUTTON_CUSTOM"的自定义按钮,并将其提示消息设置为"自定义提示消息"。 阅读详情

最近决定尝试翻译一些简单的文章。

---------------------------------

原文出处:http://www.eclipsezone.com/eclipse/forums/t90365.html

原作者:Neil Bartlett

Blog http://neilbartlett.name/blog/osgi-articles/

---------------------------------

OSGi起步:第一个Bundle

 

在接下去的一到两周内,EclipseZone将发表一系列关于OSGi的短文。它们将指引读者走上掌握OSGi编程的道路。每一篇短文将只介绍一个技术原点,并且在十分钟内介绍完毕。而且,为了想向读者展示OSGi编程可以多么简单,我们将不使用Eclipse开发,而只使用文本编辑器以及最基本的命令行工具。

 

那么,欢迎来到“OSGi起步”。

 

事实上,第一篇短文将比这个系列的其他文章要长一些,因为我们需要先设置最基本的工作环境。首先我们需要一个OSGi框架。目前有三个开源的OSGi框架:Apache Felix,Knopflerfish和Enquinox。虽然接下来我们要写的代码与所选择的框架没有关系,但是,不同框架运行的指令还是有所区别的。因为这里是EclipseZone(Eclipse园地),所以我们使用Eclipse所使用的Equinox。你可以从Eclipse的安装目录中得到一个拷贝:找到文件org.eclipse.orgi_ 3.2.1 .R32x_v20060919.jar并复制到一个空目录中(该文件的版本号字符串可能会因为你所使用的Eclipse的版本不同而有所不同)。如果你找不到的话,也可以从网上下载,网址是http://download.eclipse.org/eclipse/equinox/。

 

为了让命令短一些,我们把文件重命名为equinox.jar.。现在,打开命令行窗口,执行以下命令:

java –jar equinox . jar –console

不一会,屏幕上将出现 osgi> 的提示符。恭喜你,OSGi运行起来了!

通过 osgi> 提示符,我们可以输入一些命令来控制OSGi框架。你可以输入help来查看相关命令列表,尝试一下吧。完成了么?好,现在,输入ss,这是最常用的一个命令,它代表 “short status”(简洁状态),用于显示所有已经安装的bundle和它们的当前状态。(bundle在OSGi术语中表示一个模块。如果你是一个Eclipse开发人员,你应该知道plug-in,bunlde和plugin基本上是一样的东西)。

 

输入ss命令后,Equinox将输出以下内容:

Framework is lanuched .

 

id            State             Bundle

0             ACTIVE        system . bundle_3 . 2.1 . R32x_v20060919

 

这表示当前已经安装了一个bundle,并且它处于活动状态。事实上,这个bundle是系统bundle。它是OSGi中的一个特殊bundle,它一直都存在,代表OSGi框架本身。

 

现在我们来写我们自己的bundle。在刚才相同目录下,创建文件HelloActivator.java,然后把以下内容复制到文件里:

import  org.osgi.framework. * ;

public   class  HelloActivator  implements  BundleActivator  {

  
public void start(BundleContext context) {

    System.out.println(
"Hello EclipseZone Readers!");

  }


  
public void stop(BundleContext context) {

    System.out.println(
"Goodbye EclipseZone Readers!");

  }


}
 

每个bundle还需要一个manifest文件来描述它的元数据,比如它的名字、版本等等。创建文件HelloWorld.mf,复制以下内容到文件中。注意,该文件需要以一个空行作为结尾,否则jar命令会把文件截短(truncate):

Manifest-Version:  1.0
Bundle-Name: HelloWorld
Bundle-Activator: HelloActivator
Bundle-SymbolicName: HelloWorld
Bundle-Version: 
1.0.0
Import-Package: org.osgi.framework

 

为了保持OSGi运行,我们重新打开一个命令行窗口,然后用以下命令创建一个jar包:

javac -classpath equinox . jar HelloActivator . java

jar -cfm HelloWorld
. jar HelloWorld . mf HelloActivator . class

 

好了,返回刚才的OSGi控制台,输入:install file:HelloWorld.jar。正常的话,应该返回“Bundle id is 1 ” 。再次输入ss,你应该能看见以下内容:

 

Framework is launched .
 

id      State                   Bundle

0        ACTIVE              system . bundle_3 . 2.1 . R32x_v20060919

1        INSTALLED       HelloWorld_1 . 0.0


 

这样,我们的HelloWorld bundle就安装好了。不过,它还没处于活动状态。在下一篇文章中,我们将看到这些状态都表示什么意思。

现在,我们只需要把它启动起来,输入命令 start 1。这个“1”就是第一列中显示的ID。

输入这个命令以后,我们将看到一个消息“Hello EclipseZone Readers!”。

再输入stop 1,将看到“Goodbye EclipseZone Readers”。

重复这些操作直到你厌烦为止(-_______-!)。注意通过命令ss来查看bundle的状态。

 

这个过程中发生了什么呢?我们的代码实现了接口BundleActivator,这样,框架会把bundle生命周期中的重要事件通知我们。框架在bundle启动时调用start方法,停止时调用stop方法。

另外,还要注意的是manifest文件中的“Bundle-Activator:HelloActivator”一行。它告诉框架哪个类是这个bundle的生命周期触发器(activator)。通常,这个名字是一个很完整的类名,这里我们为了偷懒而使用了默认的包。

 

好了,以上是我们的第一次安装bundle的过程。下次见。

---------回帖摘录 -----------------------

4.文章《Equinox快速向导》(Equinox QuickStart Guide http://www.eclipse.org/equinox/documents/quickstart.php) 介绍了如何配置Equinox以及如何在启动Equinox时自动启动你的Bundle。

6.(1)manifest文件可以任意命名。不过打包成Jar后,都会被更名为MANIFEST.MF。

(2)在manifest文件中,Bundle-Name字段是这个bundle的描述名,可以包含空格。但是Bundle-SymbolicName更像bundle的ID。它不允许包含空格,在Eclipse中,它通常和java的包名差不多,比如“org.eclipse.core.runtime”。

(3)每个bundle只能有0或者1个activator。当然,你可以有多个类实现BundleActivator接口,但是仅能有一个是它的Activator类。

7.事实上,通过Activator把其他实现了activator接口的类链接起来也挺简单的。比如,你可以在manifest文件中添加一个自定义的字段来实现,比如:

Alex-Other-Activators: com.foo.Bar ,  com.example.Other ...

然后在bundle的Activator中使用以下类似代码:

public   void  start(BundleContext context)  {

    String others 
= context.getBundle().getHeaders().

    get(
"Alex-Other-Activators");

    String[] activators 
= others.split(",");

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

    
// do something with activators[i]

  }


}


当然,通常直接使用start方法作为代表会更加简单一些。

 
从 RAP OData 到可交付的 SAP Fiori 应用:部署与授权全链路实战笔记 摘要:本文探讨了RAP开发中常见的交付误区,指出开发者预览(FEAP)并非可部署应用,强调从服务发布到业务应用落地的完整链路。文章详细对比了不同部署路径(ABAP/BTP),解析权限管理关键点(SAP_BR_DEVELOPER的临时性),并提供了标准授权组合方案(IAM+业务目录+角色)。通过"发运跟踪"案例,展示了从开发验证到生产部署的全流程,特别提醒注意开发环境与生产环境的权限差异,避免"开发机正常、生产机403"的典型问题。(149字) 阅读详情

相关推荐

Stable-Baselines3性能优化:多环境训练对比指南(DummyVecEnv vs SubprocVecEnv)

本文深入对比了Stable-Baselines3中DummyVecEnv与SubprocVecEnv两种向量化环境的性能差异与应用场景。DummyVecEnv适用于轻量级、步进快的环境,调试友好且开销低;而SubprocVecEnv则通过真正的多进程并行,能显著加速计算密集型环境的训练。文章通过基准测试与决策树,指导开发者根据环境计算成本、CPU核心数等关键因素做出最优选择,以实现训练效率最大化。

weixin_29063979的博客 146

OSGi 框架加载Bundle方法及OSGi常用命令

1.将插件模块导出。 2.启动OSGi框架 第一种方式导入Bundle  在osgi>中输入 install reference:file:D:\work_soft\OSGI\plugins\OSGI_HelloWord_1.0.0.jar 回车 第二种方式导入Bundle  在OSGi框架目录下(即与org.eclipse.osgi_3.3.0.200704022148.jar文件并...

iteye_20293的博客 1475

头歌操作系统 课堂练习4.2:页式内存管理 答案 无解析

头歌操作系统 课堂练习4.2:页式内存管理 答案 无解析

kercii的博客 1万+

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

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

瓶子的窝 4184

NOAA气象数据下载攻略

各方搜寻气象数据下载途径,发现网上最多的就是从NOAA下载,但是中途有尝试过很多次都没有下载到,每次都是显示不可用,今天终于下载成功了,特此记录。 首先我是从这个网址进入的:National Centers for Environmental Information (NCEI) formerly known as National Climatic Data Center (NCDC) | NCEI offers access to the most significant archives of oc

lianqian66的博客 3万+

Windows Server 2012 R2虚拟机安装全攻略:从镜像选择到网络配置一步到位

本文提供Windows Server 2012 R2虚拟机安装全攻略,涵盖从镜像选择到网络配置的完整流程。详细讲解在Oracle VM VirtualBox中的安装步骤、TCP/IP网络设置、系统优化及常见问题解决方案,帮助用户快速搭建可立即投入使用的服务器环境。特别适合IT初学者和系统管理员学习传统服务器应用的部署与配置。

weixin_28363123的博客 538

OSGi (第一部分): Bundles入门(翻译)(转)

新建、执行和管理OSGi容器中的Bundles 摘要: OSGi(Open Service Gateway Initiative,开放式服务通路倡议)为开发和部署模块化应用和库定义了基础架构。在本文中,Sunil Patil为我们介绍了OSGi开发的概念,并使用Eclipse自带的OSGi容器Equinox创建了一个简单的Hello World应用;同时...

CCbleach的专栏 1859

Claude Code+Cursor+Claude 4三剑合璧!5步搞定Magentic-UI的OAuth2.0集成,开发效率飙升500%,新手秒变全栈工程师

本文详细介绍了如何利用Claude Code、Cursor和Claude 4三款AI工具高效集成Magentic-UI的OAuth2.0认证系统。通过5个步骤的实战演练,开发者可快速完成从环境搭建、项目分析、代码生成到前端集成的全过程,显著提升开发效率。文章还提供了JWT令牌管理、安全配置及常见问题解决方案。

weixin_29234509的博客 453

Getting Started with OSGi_ Part1

前言:       从今天起,我开始翻译Neil Bartlett先生的《Getting Started with OSGi》。我觉得相对于《OSGi实战》与《OSGi进阶》,Neil Bartlett先生讲的更加明白易懂。因此,拿出来,给大家分享一下。本人的英语能力有限,但我会尽力将作者的意思说清楚。如果哪里有翻译不好的地方,请各位指出!附件为作者的原文。   第一章:第一个Bundle ...

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

03. 线性规划与混合整数规划 (LP/MIP)

本文介绍了OR-Tools中的线性规划(LP)和混合整数规划(MIP)求解器。主要内容包括:1) LP/MIP的基本概念和数学形式,对比了LP、MIP、ILP和BIP的区别;2) OR-Tools支持的求解器类型,如GLOP、SCIP等,以及它们各自的特点和适用场景;3) 详细展示了如何使用GLOP求解器进行线性规划求解,包括变量定义、约束添加和目标函数设置;4) 介绍了SCIP求解器的配置和使用方法;5) 讨论了变量类型、约束类型、多目标优化等进阶功能。文章通过Java代码示例演示了如何实现一个完整的优化

智慧是做事用的 156

【数据集】3D-GloBFP:全球首个三维建筑轮廓数据集

【数据集】3D-GloBFP:全球首个三维建筑轮廓数据集

WW、forever的博客 1680

OSGI框架下,bundle的两种启动方式

什么是Bundle? 如果有人问你,什么是osgi?其最大特点是什么?你只要回到"模块化开发体系",足矣。要是你能说出来java9的模块化开发体系并与之对比,那就说明你是专业的。 既然是模块化开发体系。那么osgi中的模块就是bundle,bundle是osgi中的最基本单位。 osgi中的bundle是jar文件格式规范基础上扩展出来的,一个符合osgi规范的bundle首先必须是一个符合

huakai_sun的博客 8214

15、SQL Server查询优化与CPU负载管理

本文深入探讨了SQL Server查询优化与CPU负载管理的关键技术,包括强制连接类型的使用、键查找问题的解决、索引设计的最佳实践、高CPU负载的排查与优化,以及并行性的利弊与调整策略。通过优化查询逻辑、合理设计索引、监控与管理CPU资源,可以显著提升SQL Server的性能和稳定性。适用于数据库开发人员和DBA进行性能调优参考。

pz8901234的博客 76

OSGi Bundle Convert插件原理

本文首发于Infoq中文站(4.2):http://www.infoq.com/cn/articles/osgi-bundle-convert-plugin-principle   1.引言 普通的web应用要转换为OSGi应用,经常会遇到应用中依赖的Jar是非标准的情况,这些Jar可能只遵守了部分OSGi规范,甚至Manifest信息是空的。这种情况在OSGi 应用中根本无法使

不才的专栏 5512

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

OSGI BUNDLE

<br />开发一个简单的Hello World的OSGi Bundle(OSGi绑定包)<br />在OSGi中,软件是以Bundle的形式发布的。一个Bundle由Java类和其它资源构成,它可为其它的Bundle提供服务,也可以导入其 它Bundle中的Java包;同时,OSGi的Bundle也可以为其所在的设备提供一些功能。Eclipse为开发OSGiBundle提供了优秀的 支持,它不仅提供了向导来创建OSGi Bundle,而且还提供了内嵌的Equinox容器,您可以使用该容器执行和调试

码龙008 1113

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【OSGi】2. bundle与模块化

模块层是OSGi框架的最基础层次,是OSGi其他部分的基础。 1、模块 定义: 一个从逻辑上封装实现类的集合,一个基于实现类子集的可选公共API,一个对外部代码依赖关系的集合。 package是Java提供的一种内建的模块化方式,但它有一些限制:http://blog.youkuaiyun.com/vking_wang/article/details/9735395 以上讨论的都是“

Alpha's 学习笔记 9005

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

浅析OSGI的bundle依赖

From: http://www.xeclipse.com/?p=1165 Bundle是OSGI中的基础元件,不同的bundle之间可以相互依赖、引用,这样许多bundle才会共同协作,实现一些比较复杂的功能。Bundle的依赖一直是一个比较棘手的问题,包括Lazy start等,下面我们具体Bundle依赖到底是怎么一回事。 测试场景:Eclipse 3.6, Equinox

Seven's Rainbow Paradise 3268

OSGi介绍(四)第一个bundle

<br />先给出“扶贫助手”的第一种改造,我称之为“直接型”,请看:<br /><br />package aa.bb.cc;<br />//需要import osgi的核心package<br />import org.osgi.framework.BundleActivator;<br />import org.osgi.framework.BundleContext;<br />//实现了BundleActivator<br />public class FamilyInfo implements 

immcss的专栏 1289

在Eclipse中开发OSGi Bundle

Eclipse为开发OSGI Bundle提供了良好的支持,它不仅提供向导来创建OSGi Bundle,而且还提供了内嵌的OSGi框架实现(即Equinox容器),可以使用该容器执行和调试Bundle。从本质上说,每一个Eclipse插件都是一个OSGi Bundle,只不过这个OSGi Bundle增加了一些Eclipse专用的代码而已。下面通过具体的例子来介绍如何用Eclipse来开发OSGi...

程序员的天堂 742

java里Bundle是什么_OSGi 体系结构及Bundle简介

1、OSGi 的体系架构是基于插件式的软件结构,包括一个 OSGi 框架和一系列插件,在 OSGi中,插件称为 Bundle,其中,OSGi 框架规范是 OSGi 规范的核心部分,它提供了一个通用的、安全可管理的 Java 框架,通过这个框架,可以支持 Bundle 服务应用的部署和扩展。Bundle 之间可以通过 Import Package 和 Require-Bundle 来共享 Java ...

weixin_34409887的博客 1887

OSGi 体系结构及Bundle简介

<br /><br />1、OSGi 的体系架构是基于插件式的软件结构,包括一个 OSGi 框架和一系列插件,在 OSGi中,插件称为 Bundle,其中,OSGi 框架规范是 OSGi 规范的核心部分,它提供了一个通用的、安全可管理的 Java 框架,通过这个框架,可以支持 Bundle 服务应用的部署和扩展。Bundle 之间可以通过 Import Package 和 Require-Bundle 来共享 Java 类,在 OSGi 服务平台中,用户通过开发 Bundle 来提供需要的功能,这些 Bun

immcss的专栏 1114

利用 Eclipse 开发基于 OSGi 的 Bundle 应用[摘]

开放服务网关协议 (Open Services Gateway Initiative),简称 OSGi,为网络服务定义了一个标准的、面向服务的计算环境,为用户提供了开放的、面向服务组件的、易于部署的编程模型,这个编程模型允许用户将定义好的接口规范绑定到 OSGi 运行环境中的特定Service,在构件 SOA 面向服务为中心的企业应用的过程中,OSGi 技术正发挥越来越重要的作用。在本文中,将介绍

SQ 1033

Apache Karaf 开发进阶:OSGi bundle与依赖管理最佳实践

Apache Karaf 作为企业级模块化运行时,为构建动态、可扩展的 OSGi 应用提供了强大支持。本文将深入探讨 OSGi bundle 开发与依赖管理的核心技巧,帮助开发者掌握模块化应用的最佳实践,提升项目的可维护性和扩展性。 ## OSGi bundle 开发基础 OSGi 技术是 Java 平台上的动态模块化系统,而 bundle 是 OSGi 中的基本部署单元。在 Apache K

gitblog_00883的博客 747

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

eclipse编写第一个osgi bundle的小demo,同时导出osgi化的bundle

最近搞得项目用到了osgi,之前完全没听说过,在网上查了下貌似也是很老的技术,使用范围不是很广的样子,但是既然用到了就要学习一下嘛,先写个简单的小demo,查阅了几个博客,按照正常情况下执行总是报错,后来经过一番研究,终于解决了报错问题,现记录如下。1 .首先new-other,选择创建plug-in Project,见下图 2 .点击next,选择osgi framework,指定配置为标准,具

梦岚如雪 4363

OSGI之Require-Bundle与Imported-Package

OSGI中的bundle在依赖其他的bundle的时候,有两种方式:Require-Bundle与Imported-Package。这里简单的讲讲他们之间的区别。 先看看基础的定义: Required-Bundle: Specify the list of plug-ins required for the operation of this plug-in.Imported-Packag

Seven's Rainbow Paradise 1749
上一篇: 一身轻松
下一篇: OSGi起步(2):与框架进行交互
devonzzb
博客等级 码龄25年 7粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值