在osgi bundle中访问osgi container之外的传统服务

      osgi container是java实践中的一个框架,在这个框架中,按照osgi的规范,实现了java中module的思想,从而真正实现了java的模块化开发。

      在模块的互用方面,osgi提供了两种方式:一是通过export/import包实现,二是通过在osgi bundlecontext中注册service,实现各个模块之间的交互。第二种方式符合SOA的标准,是osgi中推荐的交互方式。同样的,osgi container和传统的java 进程交互,也提供了同样的方式,在《在osgi容器外应用osgi bundle提供的服务》一文中,分析了如何在osgi container外部,引用osgi服务的一种方式,同样的在osgi bundle中引用传统java进行的服务,也是通过osgi container的bundleContext实现的。

     下面是实现在osgi bundle中访问一个外部的service的完整的过程。

      一、在osgi container中注册一个外部的服务(这个例子实在Apache的felix container中完成)

      在felix的host对象中,首先实例化一个felix对象,然后,初始化felix,随后在felix container的bundlecontext中注册一个服务

            m_felix = new Felix(config);
            m_felix.init();
            AutoProcessor.process(config, m_felix.getBundleContext());
            m_felix.getBundleContext().registerService(ShareInterface.class.getName(), new ShareImpl(), null);
          // Now start Felix instance.
            m_felix.start();

 

 二、在bundle中引用这个注册的服务

      虽然这个服务已经注册到osgi container的bundlecontext中了,但是在bundle中利用正常的ServiceTracker无法引用到这个服务(可能是由于注册时,不在osgi container中,所以,没有在osgi的整个环境中出现),但是,这个服务在system bundle中是可见的,所以,可以通过访问system bundle的bundlecontext来获得这个外部的服务

		Bundle[] bundles = context.getBundles();

		ServiceTracker st = new ServiceTracker(bundles[0].getBundleContext(),ShareInterface.class.getName(),null);
		st.open();
		Object si =  st.getService();
		Method m = si.getClass().getDeclaredMethod("share", null);
		m.invoke(si, null);

 同样的,由于服务注册时,不在osgi container的环境中,所以服务实例化的classloader和osgi container中的classloader之间不能够直接的访问,利用反射的方法,可以访问到注册的服务,就实现了osgi bundle访问osgi container之外的服务了。

 

 

利用LQR反馈控制器在不同风况下模拟风力涡轮转速控制的MATLAB.zip 1.版本:matlab2014a/2019b/2024b 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 立即下载

相关推荐

高校技术转移办公室人员如何提升技术成果的推介效果和市场转化率?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

osgi中service的访问方式

osgi中services总是通过serviceReference来访问的,他唯一对应一个service对象 要访问一个服务,以下步骤是必须的: 1。获取serviceReference引用 2。通过BundleContext.getService()获取服务对象实例 而获取ServiceReference的方式有以下几种: 1。直接通过BundleContext.getServic...

jncz 366

两相交错并联BuckBoost变换器仿真模型(Simulink仿真实现)

内容概要:本文档系统整合了电力电子与新能源领域的Simulink仿真资源,聚焦于两相交错并联Buck-Boost变换器的双闭环PWM控制建模与仿真,同时涵盖多种典型拓扑结构,包括交错并联Boost、PFC功率因数校正、LLC谐振变换器、双向CLLC、DAB变换器、VIENNA整流器等。资源体系完整,包含仿真模型、设计报告、计算书、PPT说明文档及Matlab/Python代码,覆盖从基础建模到高级控制策略(如软开关技术、谐波抑制、状态估计、双闭环控制)的全流程。此外,还拓展至状态估计(卡尔曼滤波、粒子滤波)、智能优化算法、机器学习、信号处理、路径规划等多个交叉学科方向,构建了一个面向科研与工程应用的综合性技术平台。; 适合人群:电气工程、自动化、电力电子、新能源科学与工程等专业的硕士博士研究生、高校科研人员,以及从事新能源发电、智能电网、电动汽车、电力传动等领域技术研发的工程师。; 使用场景及目标:①开展电力电子变换器(如Buck-Boost、LLC、DAB、PFC等)的建模、控制与仿真研究;②支撑课程设计、学位论文、科研项目中的系统仿真与算法验证;③学习并复现高水平期刊(如EI)提出的先进控制策略,如基于KKT条件的最优控制、扩展移相调制、恒压恒流双环竞争控制等;④结合智能算法(如粒子群、秃鹰算法)进行微电网调度、储能配置、路径规划等多目标优化问题的研究与快速原型开发。; 阅读建议:建议依据提供的资源目录循序渐进地查阅资料,优先选取与自身研究方向高度契合的内容进行深入学习;应结合仿真模型与配套文档动手实践,调试参数并分析结果,充分利用百度网盘与公众号渠道获取完整资源,提升科研工作的系统性、规范性与创新性。

OSGI组件启动异常的错误解决方法

第一种异常:org.osgi.service.blueprint.container.ComponentDefinitionException: Unable to instantiate components Caused by: java.lang.NoClassDefFoundError: org/apache/commons/httpclient/methods/RequestEntit

myblog_dhy的专栏 1万+

【基于Zernike矩的良性和恶性肿块的分类】应用于乳腺癌诊断中的快速相反权重学习规则(Matlab代码实现)

内容概要:本文详细介绍了基于Plecs软件构建的全桥LLC谐振变换器仿真模型,重点阐述了其在软开关技术条件下的建模方法与仿真分析过程。该模型能够精确模拟LLC谐振变换器在不同运行工况下的动态响应特性,涵盖开环与闭环控制策略的设计与实现,适用于研究变换器的效率优化、谐振参数匹配、系统稳定性及软开关性能等问题。相较于Simulink等传统仿真工具,Plecs在高频电力电子系统仿真中展现出更高的仿真速度与数值精度,尤其适合用于复杂电力电子拓扑的快速原型验证与优化设计。; 适合人群:具备扎实电力电子技术基础和仿真经验,从事高频功率变换器设计、新能源电源开发、电力电子系统研究的研发工程师及高校研究生。; 使用场景及目标:①深入理解全桥LLC谐振变换器的工作原理与软开关实现机制;②掌握在Plecs环境中搭建高精度、高效率电力电子系统仿真模型的方法;③开展变换器控制策略(如变频控制、闭环稳压)的仿真验证与参数优化;④为科研课题、学位论文或工业项目提供可靠的仿真平台与技术支持。; 阅读建议:建议结合相关电力电子教材与LLC变换器设计指南,深入掌握谐振参数计算与系统稳定性分析方法,并通过反复调试仿真模型,观察关键波形(如原边电流零点切换、副边整流波形),以全面理解软开关过程的物理本质与控制实现细节。

【智能车学习】电磁循迹中的基本控制算法

今天心血来潮,突然想总结一下电磁车的一些基本算法,也希望可以给新手同学们一点帮助和参考。本篇主要讲述智能车电磁循迹中涉及到的基本算法,包括滤波算法,归一化算法,PID控制等

Carry_qing的博客 6万+

web container与osgi container集成方案实践

一、目的: 目前Osgi Web开发仅有HttpService,Virgo的可以将WAR应用转换成Bundle,对我而言有些“重”,为了力求简洁,自行尝试使用Web Container来集成Osgi Container,便于定制客户化的管理功能,监控功能。 二、环境准备: 框架: spring3.1 RC1 osgi 3.6.2 gemini-blueprint 1.0 se...

tianshibaijia 228

【电击防护篇】电击防护技术详解:从人体效应到接地系统全解析

本文系统讲解了电击防护的关键知识,包括电流对人体的影响(如30mA是心室颤动阈值)、人体电阻特性(700Ω-6100Ω)以及电气接触防护措施。重点分析了TT、TN和IT三大接地系统的结构特点与应用场景,强调TN-S系统最安全,IT系统供电连续性最佳。详细介绍了漏电保护器(RCD)的工作原理与选型指南,建议人身防护选用30mA高灵敏度RCD。文章通过对比表总结三大系统的安全性、成本及适用场景,为电气安全设计提供实用参考。

2301_81299416的博客 1742

OSGI的bundle

OSGI的bundle 为什么要引入bundle?我们常常需要把大型系统分解为多个较小的互相协作的逻辑单元,我们希望这些逻辑单元内部之间是互相不可见的,但同时我也要是这些逻辑单元对外提供一些接口供外部调用以协作完成我们的业务。这不就是面向对象吗?类似于封装一个类,同时提供一些外部可以访问的public方法。 但事实上大多数情况下这些逻辑单元是不可能通过一个类就能解决的,可能是多个类一起协...

weixin_30725467的博客 148

STM32 移植FreeModbus详细过程

modbus是一个非常好的串口协议(当然也能用在网口上),它简洁、规范、强大。可以满足大部分的工业、嵌入式需求。 这里详细说下如何将freemodbus移植到stm32平台。我之前下载的版本是1.6,我会在我的下载链接里面加上1.6的freemodbus压缩包以及我已经移植好的stm32 for freemodbus版本。我上传的移植好的绝对没问题,经过多个板子测试。这里编译器使用的是keil5.28,单片机用的是STM32F103RCT6。 移植到VET6以及ZET6的话只需要改一下选择的芯片就好,改法:

qq_40305944的博客 8万+

MFRC522防冲突机制详解:当两张IC卡同时靠近读写器,会发生什么?

本文深入解析了MFRC522芯片在多张IC卡同时靠近RFID读写器时的防冲突机制,重点介绍了二叉树搜索算法在比特级的实现原理。通过详细的寄存器配置优化和实际工程案例,展示了如何有效解决信号碰撞问题,提升多卡场景下的读写性能。

weixin_29191669的博客 429

OSGi bundle之间通过反射调用方法

两个bundle之间不通过pom文件引入jar包方式调用另一个方法,通过反射的方式调用。 前提:被调用的方法的bundle需要配置  <Export-Package> 要提供的被引用的包</Export-Package> 调用方需要配置 <Import-Package>引入的包名,多个可通过,隔开</Import-Package> 如此便可以通...

卖辣椒也用券 1063

【网络图】:附Origin详细画图教程

网络图,是一种由节点(或顶点)和连接这些节点的边(或链路)组成的图形结构。在网络图中,节点通常代表系统中的一个实体(如项目中的一项任务、通信网络中的一个设备、或运输网络中的一个站点),而边则代表这些实体之间的直接联系或流动(如任务的先后顺序、数据的传输路径、或乘客的旅行路线)。 有向图:如果边具有方向性,即从一个节点指向另一个节点,则称为有向图。这种图常用于表示具有明确先后顺序或方向性的系统,如项目管理中的任务依赖关系。 无向图:如果图中的边没有方向,则称为无向图。它适用于表示实体间相互关联但无明确方向性的

weixin_50236590的博客 3954

传统 Eclipse 插件项目手动转换 JAR 为 OSGi Bundle :No available bundle exports package ‘javax.websocket‘

在Eclipse插件开发中,直接引入普通JAR会导致依赖解析失败(如No available bundle exports package ‘javax.websocket’)。核心原因是OSGi容器需要特殊的Bundle元数据。

lookbbs的专栏 498

Qoder + ADB Supabase :5分钟GET超火AI手办生图APP

本文介绍如何利用Qoder、阿里云 ADB Supabase 和通义千问图像编辑模型,快速构建AI手办生图Flutter应用。无需传统后端,通过AI生成代码、BaaS服务与边缘函数调用,实现从原型到上线的敏捷开发,全流程轻量高效,助力Vibe Coding落地实践。

数据库技术 931

Anomalib实战指南:从零开始构建自定义异常检测数据集

本文提供了一份详细的Anomalib实战指南,指导用户从零开始构建自定义异常检测数据集。文章深入解析了数据准备的核心步骤、目录结构规范,并对比了PatchCore与FastFlow等关键模型的适用场景。通过清晰的代码示例,手把手演示了环境配置、模型训练与推理评估的全流程,旨在帮助开发者快速掌握这一工业视觉异常检测利器,有效解决实际生产中的缺陷识别难题。

weixin_29054245的博客 643

如何通过DBeaver插件架构解决企业级数据库管理难题

作为数据库管理员,你是否经常面临这样的困境:需要连接多种不同类型的数据库,但每个数据库都有自己专属的管理工具,切换成本高,学习曲线陡峭?或者,当团队需要协作时,每个人都使用不同的工具,导致SQL脚本格式混乱、数据导出格式不统一?DBeaver的插件架构正是为解决这些企业级数据库管理难题而设计的。 DBeaver作为一个免费、开源的通用数据库管理工具,通过其基于OSGi的插件架构,实现了对100多

gitblog_01130的博客 1092

MATLAB算法实战应用案例精讲-【数模应用】装箱问题

装箱问题可以根据不同的维度进行分类。以下是一些常见的装箱问题二维装箱问题:二维装箱问题假设所有物品都是平面上的矩形,并且需要将它们放入平面上的容器中。这个问题的目标是找到一种装箱方案,使得物品不重叠并占据的总面积最小。三维装箱问题:三维装箱问题考虑到物品可以具有高度,并且需要将它们放入三维容器(如箱子或货柜)中。目标是找到一种装箱方案,使得物品不重叠且总体积最小。多维装箱问题:多维装箱问题是指在更高维度空间中进行装箱的问题。除了长度和宽度之外,物品可能具有其他属性,如高度、重量、形状等。

qq_36130719的博客 1572

工作中使用到的单词(软件开发)_第四版

本文汇总了2020-2025年间软件开发相关的工作笔记,主要包括三版技术词汇整理(2020-2025)、优快云文章导出PDF情况,以及2025年6月的专题整理。重点内容涉及:WebSphere中jackson包加载路径问题、Java异步线程类型(守护/非守护线程)的区分与解决方案、DB2数据库连接相关指令(db2listapplications等)、AWS托管服务优势,以及OSGi框架与Java的关系说明。特别标注了技术术语的英文发音(如initiative)和敏感信息处理注意事项(敏感度标签设置)。后续

sun0322 1344

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

IDE与AI中转平台协议桥接实战指南

现代AI编程工具链中,IDE并非直接调用大模型,而是严格遵循OpenAI兼容API协议发起HTTP请求。理解这一协议层本质,是解决JetBrains AI Assistant不可用、VS Code插件报错、Trae IDE上下文丢失等高频问题的关键。本文从协议原理出发,解析IDE与中转平台间的真实握手逻辑——包括健康检查端点、X-File-Context头透传、@command指令语义转换、嵌入式芯片知识注入等核心技术价值。适用于Ollama、vLLM、Qwen、DeepSeek等本地及云模型接入场景,覆盖

weixin_34315485的博客 491

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Sidecar模式加速单体应用开发:构建、调试与发布优化实战

Sidecar是一种轻量级、进程外解耦的辅助服务部署模式,源于容器化实践中共享网络命名空间的伴生容器设计,核心原理是将日志采集、配置注入、流量代理等横切关注点从单体应用中剥离,实现物理隔离与独立生命周期管理。其技术价值在于不重构代码、不变更组织结构的前提下,显著提升Dev Speed——尤其在构建耗时、本地环境一致性、灰度发布颗粒度三大痛点上效果突出。典型应用场景包括Java/Spring Boot或.NET Core单体系统的渐进式现代化改造、CI/CD流水线提速、以及向非技术管理者具象化技术债治理收益。

dianyin7770的博客 392

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

在osgi容器外应用osgi bundle提供的服务

 任何系统都不是孤立存在的,都有一个持续发展的过程,在java技术的应用中,osgi的理念提出,从机制上解决了java中模块化的问题,使得Java真正能够实现模块化的开发。但是,在osgi之前,已经存在了很多的系统和各种不同的框架技术,每一个都有自己的使用范围和优点,osgi一方面不可能覆盖所有以前平台和框架提供的各种功能,另一方面传统的系统也不可能因为osgi的出现,进行完成的重构,因此osgi...

沧海一粟 219

OSGI中的bundle详解

https://www.cnblogs.com/binarylei/p/8537307.html

weixin_42410730的博客 1668

OSGi - 第04章 BundleContext.getService()详解之二

这一节对比一下BundleContext上几个getServiceReference方法的差别: 1、getAllServiceReferences(String clazz, String filter)方法:       这个方法从服务注册表中检索所有以指定服务名称注册的服务,并且按照服务过滤条件进行过滤。       这里需要注意2点:一是服务注册时,可选提供一

sswhsz的专栏 2981

学习过osgi 发布bundle

学习过osgi 发布bundle 先按模块把项目拆分出来分成一个一个的bundle,依赖其他包也是通过bundle.如果bundle与bundle之间有业务关系就采用spring(具体名字有点忘了...) 提供一个服务出来。所有bundle采用virgo服务热部署....最后运行起来。 每个bundle都有自己的页面...比如ext的框架。那我就放common里面 其他的模块只要依赖了,也可...

iteye_14984的博客 140

OSGi bundle之间互相通信的方法

摘要 OSGi的一个标准就是各个bundle之间是相互隔离的,每个bundle都有自己的classloader,并且不同的版本之间都是相互隔离的,这样就使bundle从物理上进行了隔离,那么OSGi 的bundle之间是怎么进行通信的呢? 下面我们将要介绍3中方法。 Bundles之间通信的方法 方法 描述 ...

578
上一篇: Transloader tutorial
下一篇: JDBC+Hibernate将Blob数据写入Oracle
tkxing
博客等级 码龄19年 1粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值