OSGi一小步-快速启动Equinox

把写好的bundle加载到equinox中,有以下几种方法

  • 通过基本的install命令把bundle一个个装载进去
  • 在config.ini文件中配置需要装载的bundle,当equinox启动时会自动装载
  • 通过配置org.eclipse.update.configurator bundle自动加载你的bundle

前两种方法装一两个还行,当你的bundle很多时,生活就无趣了,第三种方法还不错,只是自动加载的bundle没有被start,我们还是需要 一个个手动去start,当然网上也有介绍通过自定义bundle把没有启动的bundle启动起来,这确实也是一种解决方案。

再介绍另一种启动方式,细心的读者会发现org.eclipse.osgi bundle的描述符文件定义了一个启动类

Main-Class: org.eclipse.core.runtime.adaptor.EclipseStarter

这个类其实就是equinox容器的启动器,利用这个类我们可以通过代码增强实现org.eclipse.update.configurator的效果,部分代码片段如下:

/**

* 启动指定目录下的bundles

* @param bundlesPath    bundles 所在的路径

*/

public void launch(String bundlesPath) throws Exception {

String bundles = searchBundles(bundlesPath);

setFrameworkProperties(bundles);

EclipseStarter.run(new String[] {}, null);

}

/**

* 查找指定目录下的bundles,最终会赋给osgi.bundles属性

*/

private String searchBundles(String bundlesPath) {

File bundlesDirectory = new File(bundlesPath);

if (!bundlesDirectory.exists() || !bundlesDirectory.isDirectory()) {

throw new IllegalArgumentException(“路径无效”);

}

File[] bundles = bundlesDirectory.listFiles();

StringBuilder bundlesBuilder = new StringBuilder();

for (File bundle : bundles) {

if (!bundle.isFile()) {

continue;

}

bundlesBuilder.append(bundle.getAbsolutePath() + “@start,”);

}

// 去掉最后一个逗号

bundlesBuilder.deleteCharAt(bundlesBuilder.length() – 1);

return bundlesBuilder.toString();

}

// 设置容器运行时参数

private void setFrameworkProperties(String bundles) {

// 以下配置项等同于config.ini中的配置

FrameworkProperties.setProperty(“osgi.noShutdown”, “true”);

FrameworkProperties.setProperty(“osgi.clean”, “true”);

FrameworkProperties.setProperty(“eclipse.ignoreApp”, “true”);

FrameworkProperties.setProperty(“osgi.bundles.defaultStartLevel”, “4″);

FrameworkProperties.setProperty(“osgi.bundles”, bundles);

}

最后运行一下,看看我们之前写的bundle能不能运行起来

public static void main(String[] args) throws Exception {

String bundlesPath = “D:/checkout/tools/osgi/plugins”;

new OsgiQuickLauncher().launch(bundlesPath);

}

输出结果如下:

HelloServiceConsumer activate

NO HelloService

setHelloService

HelloService

从以上结果可以看出,通过这种方式可以实现预期效果,不需要手动去install,也不需要手动去start,很轻松很便捷。

同时也不得不叹服Equinox的强大!

看过HSF启动代码的同学会发现HSF容器也是这样启动的~~~

usb 扩容盘检测修复工具源码,编译产物 立即下载

相关推荐

STM32F103C8T6最小系统板GPIO配置避坑指南:从原理图到流水灯一次成功

本文详细介绍了STM32F103C8T6最小系统板GPIO配置的实战指南,从硬件准备到流水灯实现,涵盖了九大关键步骤。特别针对新手常见问题,如GPIO配置、开发环境搭建和程序下载调试,提供了详细的解决方案和避坑技巧,帮助开发者快速掌握STM32开发基础。

weixin_33756596的博客 340

java osgi 启动原理_OSGI启动非常慢

我试图找出为什么我们的RCP应用程序的OSGI启动过程如此缓慢并且时间丢失了 .我已使用以下选项启用osgi.debug:org.eclipse.osgi / profile / startup = true org.eclipse.osgi / profile / benchmark = true org.eclipse.osgi / profile / debug = true下面是分析输出的...

weixin_26833939的博客 300

平衡小车动力学建模

两轮自平衡小车由车体和双轮两部分组成,可以看成一个移动的倒立摆,分别对车轮和车体进行力学分析,建立动力学模型,最后,通过对两者的分析给出系统的状态空间表达式。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kjiPEUVJ-1679470559950)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20230322110521545.png)]

qq_23096319的博客 9056

osgi多bundle环境启动慢原因之一分析

使用环境: 系统:windows XP 内存:4G CPU:英特尔 双核 2.66 应用容器:tomcat 数据库:mysql 使用工具:jprofiler,eclipse   目标:寻求影响Gboat2平台启动慢的 最重要 原因,次要的暂不考虑   以下是此次工作内容原因分析及解决过程,并列出解决前后之对比数据。   问题原因:   线程阻塞:借助经jprofiler

zhangxuejian0616的专栏 1891

数字孪生在智慧医疗中的5个创新应用:从手术模拟到个性化治疗

数字孪生技术通过创建患者或医疗流程的动态虚拟映射,正在深刻变革智慧医疗。本文重点剖析了其在个性化治疗、手术模拟与导航、药物研发、医院管理优化及慢性病管理五大核心场景的创新应用,展现了如何利用智能映射与数据融合,为精准医疗和高效决策提供强大支持。

weixin_29189003的博客 444

4. SAP ABAP OData 服务 Data Provider Class 的 GET_ENTITYSET 方法实现指南

首先第19行CREATEDATA创建er_entityset实例,指定其类型为zcl_zbook_manage_mpc=>tt_book,接着把这个引用映射到刚刚第五行定义的FIELD-SYMBOLS变量上去,这样的话,接下来我们对FIELD-SYMBOLS进行的操作,就会自动反应回引用变量er_entityset.因为我们可能在这个方法里,返回多条图书信息,所以需要用内表类型,而非单条记录的ts_book.ts_book代表一本图书的数据结构。......

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2962

OSGI ——平台启动

osgi eclipse 启动

smithdoudou88的专栏 489

Orange3实战教程:文本挖掘---标注语料库地图

Oreange3,文本挖掘,标注语料库地图用于在二维投影中可视化、聚类文档,并用关键词进行标注。

err2008的专栏 818

OSGi实战总结

OSGi实战总结   1、类加载问题ClassNotFoundException   在OSGi环境中,ClassNotFoundException是最常见的,主要是因为在OSGi环境,每一个Bundle都有自己独立的ClassLoader,而Bundle之间的通信交互是通过依赖关系(import/export)来控制,随着系统越来越复杂,依...

weixin_30692143的博客 200

Gemini-CLI 登录失败?解决报错 This account requires setting the GOOGLE_CLOUD_PROJECT env var 的问题

🚀 刚装好 `gemini-cli` 就遇到登录拦路虎?别慌!本文带你深入解析 `GOOGLE_CLOUD_PROJECT` 环境变量错误的根源,并提供超详细的图文解决方案,让你丝滑开启 AI 命令行之旅!快来抄作业!✍️

XiaoqiangClub的博客 5140

把 SAP Fiori Launchpad Designer 的 Catalog 与 Group 传输讲透:从 CONF、CUST 到 Transport Request 的完整理解

SAP Fiori项目中,catalog和group的传输问题往往源于对FLPD层次模型的理解不足。FLPD包含configuration(系统级)和customizing(客户端级)两个层面,分别对应workbench request和customizing request传输方式。常见误区包括:混淆/UI2/FLPD_CONF和/UI2/FLPD_CUST入口、未提前创建传输请求、不了解层次覆盖机制(customizing会覆盖configuration)。当客户端修改configuration层的对象

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 101

myeclipse 如何设置默认工作空间路径,还有启动慢的问题

1、设置工作空间: 打开安装路径的config.ini文件: D:\Users\24457\AppData\Local\MyEclipse CI\configuration\config.ini 将osgi.instance.area.default=@user.home/workbench; 中的@user.home/workbench 改为你设置的工作空间: osgi.instance.area.default=D:\Workspaces\MyEclipse CI; 2、myeclipse启动慢的问题

wanglepingwangleping的博客 762

71、CAN总线双绞线绞距与抗共模干扰的定量关系

摘要:本文探讨了CAN总线双绞线绞距与抗共模干扰的定量关系。通过理论推导得出共模电压与绞距平方成正比,绞距越小抑制效果越好。工程实践表明,工业现场推荐绞距不超过30mm,高频干扰场景需优先优化绞距。实测数据验证了绞距均匀性的重要性,建议控制在15-25mm范围,安装时保持绞合结构完整。案例显示,将绞距从50mm改为15mm后,共模干扰从12V降至1.8V,有效解决了CAN通信问题。绞距选择需兼顾理论计算与现场实测,同时注意与屏蔽层的协同设计。

2401_88858637的博客 186

OSGI的慢慢长路

已经开始了两周的MONGODB的学习,刚刚好搭建了MONGDB的无主集群,还没来得及去研究其原理,分片、切片原理,就的开始研究OSGI,转为研究OSGI的实现,而且是最底层的东西,感觉自己的技术还是比较欠缺的,需要补充的只是还是有很大的空间,希望自己可以努力努力下,争取在今后在重新找工作的时候能让自己的价值得到提升。否则,感觉自己很难将自己的价值提升到另外一个高度的。 2015.6.15 ...

iteye_7853的博客 157

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

IEM模型,地表粗糙度模拟

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

OSGI中Declarative Services的运用

OSGI中Declarative Services的运用前言Declarative Services,即所谓的声明式服务,我在前文中曾经提及到注册式服务与声明式服务,但是在前文中并没有提及怎么使用声明式服务,只是简单的说了下概念和相对于blueprint来说有哪些优缺点,总而言之,可谓是一笔带过,这几日想起这个,还是决定需要仔细的讲一下声明式服务。简介Declarative Services,这是在

u012734441的专栏 7205

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Eclipse 3.5优化设置

Eclipse 3.3和3.4分别拥有完全不同的插件安装程序。51CTO编辑推荐:Eclipse平台应用与开发专题  虽然Eclipse3.5的安装过程本身相对简单,但仍然有一些您应该指导的问题。下面我们会介绍一些您应该避开的陷阱,以及以使这一过程更加顺利的秘诀。这些秘诀都围绕着安装对话框,并且能在安装新软件的帮助里面找到。(51CTO编者注:对于此次的

About VincentCao,About Future... 2602

解决bundle install 和 bundle update特别慢的状况

更新下你的bundle就好了。执行这个命令 gem install bundler –pre 。 另外顺便讲讲bundle install 和 update的区别 应该是bundle update会去检查Gemfile里gem的更新,然后对比lock文件,如果Gemfile里没有指定版本或是指定是>=的版本,那有新版本就会去安装新的版本的gem,然后更新lock文件。 而bund

徐向阳 8205

OSGI StartLevel explained and using 启动级别机制和使用

bundle startlevel实际的应用环境中,我们的 bundle 互相有一定的依赖关系,所以在启动的顺序上要有所区别,好比盖楼,要从打地基开始。实际上,OSGi 框架最初的 start level 是 0,启动顺序如下:将启动级别加一,如果发现有匹配的 bundle(即 bundle 的启动级别和目前的启动级别相等),则启动这个 bundle;继续第一步,直到发现已经启动了所有的 bu

魏照哲的专栏 2591

解决bundle install太慢

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34194087的博客 1766

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

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

huakai_sun的博客 8214

在Apache Felix中运行bundle

在前面搭建了一个Apache Felix的运行环境,下面就写一个简单的bundle,测试测试。 1、新建一个插件工程,如下图:   点击下一步。  2、给插件工程命名一个名字,这里叫pig1。This plug-in is targeted to run with中选择an OSGI framework -->standard,如下图红框中所示:   点击下一步。  3...

scyy 280

OSGi起步(1):第一个Bundle

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

瓶子的窝 1778

osgi初探

启动osgi框架 java -jar org.eclipse.osgi_3.5.0.v20090520.jar  - console 安装bundle install bundurl eg: install reference:file:javax.xml_1.3.

cuseronline的专栏 550

Spring OSGI 快速入门中文教程

厌倦了那些厚书(特别是那些为了赚钱而特意写厚的书),很多时候这些书让我们找不到技术要点,甚至丧失了学习的兴趣,而最终变成那些拒绝新技术的“顽固派”。其实掌握技术的最佳方式是实践,在实践中不断的深入学习。本教程旨在帮助哪些已经掌握了OSGi和Spring技术基础的开发人员,迅速将Spring DM应用于实际开发,这是一份入门教程,不求全面,但求简单。并请配合本教程的实例代码一同学习。下载教程和示

蔡超的专栏 1894

大数据与应用服务赛题复现-JDK 与 Hadoop 安装配置

Ubuntu 默认的 127.0.1.1 映射会让 NameNode/RM 绑到回环,务必加 rpc-bind-host/http-bind-host/bind-host=0.0.0.0。若 java -version 显示 11.x,说明有其它 profile 覆盖,执行 sudo update-alternatives --set java /usr/local/jdk/bin/java。若误执行,必须同时清空所有 DataNode 的 /usr/local/data/data 再启动;

lightningyang的博客 180

SCA:一、eclipse中搭建Spring Boot4 + SCA 2025.1.0.0 + Nacos + OpenFeign 完整 Demo

本文基于Spring Boot 4与Spring Cloud Alibaba 2025.1.0,演示如何使用Nacos实现服务注册与Feign远程调用。通过创建Maven父子工程,配置Nacos注册中心,分别开发提供者(nacos-provider)和消费者(nacos-consumer)模块,利用Feign声明式接口完成跨服务调用。启动后访问/call/jangle即可验证服务间通信,完整展示了微服务架构下的服务发现与负载均衡实践。

博风_刺耳的博客(网络记事本) 293
上一篇: OSGi一小步–声明式服务
下一篇: osgi一小步–开发流程与学习方法
Snoopy7713
博客等级 码龄21年 17粉丝 681原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值