OSGi 起步(4): 注册服务

【沃顿商学院学习笔记】商业基础——Financing:05 名义利率和实际利率 APR& EAR 商业基础——名义利率和实际利率 本章主要是从名义利率和实际利率的相关概念和计算方法进行学习。 名义利率和实际利率 APR& EAR 根据下图可以直到: APR,QUOTED RATE在精算中又叫名义利率,比如一个房产贷款quoted rate or APR是12%,且按月复利,那么说明它的月实际利率是12%/12=1% EAR是effecive annual rate,在精算中叫实际利率,... 阅读详情

我的懒毛病又开始犯了……一定要克服,坚持!

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

原始地址:http://www.eclipsezone.com/eclipse/forums/t90688.html

原作者: Neil Bartlett

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

OSGi 起步(4): 注册服务

欢迎回到Eclipse Zone的OSGi教程。我们终于要开始讲服务了。在我看来,服务层是OSGi中最有意思的一部分,所以接下来的几篇文章将很有意思。

 
上一次,我们看了关于MovieFinder接口的例子,它将被MovieLister用来查找电影。事实上,你可以注意到这个例子来自Martin Fowler著名的论文”依赖注入(Dependency Injection)”(http://www.martinfowler.com/articles/injection.html),也被称为”Inversion of Control”或者IoC(控制倒置?)。

 

首先回忆一下IoC期望解决的问题。对于MovieLister,一般来说,它并不关心电影记录的原始数据是从哪里来的,所以我们用MovieFinder接口隐藏了这些细节。由于MovieLister只依赖于接口,而不是接口的具体实现,所以我们可以为之提供MovieFinder的不同实现,比如有的是从数据库中获取数据,有的则是通过调用Amazon网络服务接口获取数据。

 

到目前为止,一切都很顺利,但是我们还需要给MovieLister提供一个MovieFinder的具体实现。我们通过外部容器把一个合适的对象“推”给MovieLister,而不是让它自己去调用某个特定的查找方法。这就是所谓的“控制倒置”。现在已经很多种容器被开发出来,比如PicoContainer,HiveMind,Spring,以及EJB3.0。但是,到目前为止,这些容器都存在着一个缺陷:他们大多是静态的。一旦MovieLister获得MovieFinder,这种联系就会在JVM(JAVA虚拟机)的整个生命期中被保持。

 

OSGi同样实现了IoC模式,但是是以动态的方式实现。它使得,动态地为MovieLister提供MovieFinder的实现,并能在需要时动态卸载,成为一种可能。这样,我们可以实现“热交换”,比如把一个从纯文本文件中寻找电影数据的应用替换成从Amazon网络服务查找数据的应用。

 

OSGi的服务层帮我们实现了这种可能。简单来说,首先,我们将一个MovieFinder在服务注册表里注册成一个服务;然后,这个MovieFinder服务被提供给MovieLister。一个服务,其实只是一个Java对象(POJO),当然如果你愿意,也可以说它是以Java接口的名义注册的(POJI)。

 

首先,我们来看看如何注册一个服务。然后,我们将看到怎么从注册表中获得服务并提供给MovieLister。

 

我们讲要把上次创建的BasicMovieFinder bundle注册成服务。我们并不需要对现有的类进行修改,只需要添加一个bundle activator(控制器?)。复制以下内容到 osgitut/movies/impl/BasicMovieFinderActivator.java :

package  osgitut.movies.impl;

 

import  org.osgi.framework. * ;

 

import  osgitut.movies. * ;
import  java.util.Properties;
import  java.util.Dictionary;

public   class  BasicMovieFinderActivator  implements  BundleActivator  {

    
private ServiceRegistration registration;

    
public void start(BundleContext context) {

        MovieFinder finder 
= new BasicMovieFinderImpl();

        Dictionary props 
= new Properties();

        props.put(
"category", "misc");

        registration 
= context.registerService(

                               MovieFinder.
class.getName(),

                               finder, props);

    }


    
public void stop(BundleContext context) {

        registration.unregister();

    }

}


 

然后将BasicMovieFinder.mf的内容替换为:

Manifest-Version:  1.0

Bundle-ManifestVersion: 
2

Bundle-Name: Basic Movie Finder

Bundle-SymbolicName: BasicMovieFinder

Bundle-Version: 
1.0.0

Bundle-Activator: osgitut.movies.impl.BasicMovieFinderActivator

Import-Package: org.osgi.framework
,

 osgitut.movies
; version="[1.0.0,2.0.0)"

 

跟上一次相比,增加了两样内容。首先是,Bundle-Activator行,它告诉框架bundle的activator是哪个(这个我们上一次没有用到)。另外,还增加了一个导入package,org.osgi.framework。上一个版本的bundle因为不需要与框架进行交互,所以它不需要导入OSGi API package。

 

重新创建BasicMovieFinder.jar:

javac -classpath equinox.jar:MoviesInterface.jar osgitut/movies/impl/*.java

jar cfm BasicMovieFinder.jar BasicMovieFinder.mf osgitut/movies/impl/*.class
 

现在回到OSGi的控制台,应该能看到上一次安装的BasicMovieFinder.jar。所以,我们只需要告诉OSGi更新这个bundle,输入命令update N。这个N是这个bundle的ID(通过输入命令ss可以得到)。启动bundle,你将看到……几乎什么都没有发生。(译者-_-!)

 

事实上,我们只是在OSGi服务注册表例注册了第一个服务。但是,不幸的是,在“另一端”不存在任何对象。所以,并没有任何可见的内容被看见。如果想要确定我们的代码是否真的起效果了,我们需要进一步深入研究,输入以下命令:

 

services (objectClass = *MovieFinder)

我们将看到以下输出:

 

{osgitut.movies.MovieFinder} = {category = misc ,  service.id = 22 }

  Registered by bundle: file:BasicMovieFinder.jar 
[ 4 ]

  No bundles using service.

 

太棒了,这表示我们的服务注册成功了。我很想继续下去,告诉你们怎么去查找服务和在其它的bundle中使用它,不过,这些得等到明天再讲了。你可以看看通过services还能做些什么。对于初学者而言,试试输入不带参数的services吧(它的参数是为了显示我们需要的服务的过滤器),你将看到所有已经注册的服务列表。这个数目是相当庞大。

【光子 AI 】应用 LangGraph 的核心模型和算法原理,完整实现一个极简版的 Agent 开发框架源代码,并给出具体的应用测试实际项目案例 下面给出一个“极简版 LangGraph 风格 Agent 框架”的完整可运行实现:用 有向图 + 状态(State) + 节点(Node) + 条件路由(Conditional Edge) + 循环(Loop) + Checkpoint 这一套核心模型/算法,把 Agent 组织成可编排、可测试的状态机工作流(这正是 LangGraph 的核心抽象之一:以 StateGraph 组织节点,节点读写共享状态,边做路由与循环,并支持持久化/回放)。 参考概念来源:LangGraph 官方文档对 “StateG 阅读详情

相关推荐

若依(ruoyivue)实现文档在线查看

1、Kkfileview部署 第一步:从kkfileview官方发行版本下载安装包,安装包下载路径: https://gitee.com/kekingcn/file-online-preview/releases, 第二步:解压kkFileView-x.x.x文件(Windows用.zip包,Linux/MacOS用.tar.gz包) 第三步:打开解压后文件夹的bin目录,运行startup脚本(Windows下以管理员身份运行startup.bat,Linux以root用户运行startup.sh) 第四

weixin_46953697的博客 9679

Java模块化的守护神-OSGi就是这么简单!

引子说到OSGi,可能有些人会有些懵,这个概念的知名度确实不像JVM、Spring全家桶等这种“网红”人物这么出名,OSGi联盟成立于1999年,直到2007年的时候,能否采纳还没有被业界...

码农code之路 1万+

树莓派4B(Raspbian buster系统)安装ROS Melodic(附带网络配置和远程桌面控制说明)

树莓派4B(Raspbian buster系统)安装ROS Melodic(附带网络配置和远程桌面控制说明) 一、硬件准备 二、软件准备 三、安装前的准备工作 四、开始ROS的安装 五、运行小乌龟 由于坑比较多希望大家安装的时候尽量不要跳步进行,一定要等每一步运行成功了再往下进行。 一、硬件准备 1、树莓派4B一个 2、SD卡一张(最好是16G以上的我的是用的64G的) 3、显示器、键盘、鼠标 二、软件准备 1、Raspberryimage (写系统使用的) 链接:https://pan.baidu.com

weixin_45315065的博客 1万+

osgi详解

osgi

u014365523的博客 1958

GEOSHIELD:分布式CPS的拜占庭容错与安全防护技术

分布式系统在关键基础设施(如轨道交通、智能电网)中面临网络延迟和恶意节点的双重挑战。拜占庭容错(BFT)技术通过算法保证系统在存在故障节点时仍能达成一致,是保障系统安全的核心机制。GEOSHIELD创新性地结合概率化网络延迟测量和TGS动态信任评分,实现了不依赖可信硬件的拜占庭 resilience。该技术通过建立节点行为的信用档案,动态识别恶意行为,在保证安全性的同时最大化系统可用性。实验证明,即使在自适应攻击策略下,GEOSHIELD仍能保持系统95.6%的正常运行时间,为CPS系统提供了可靠的安全防护

weixin_31766003的博客 345

52页PPT智慧矿山数字化工业大数据平台建设方案

致力于为煤炭企业构建“全”、“统”、“通”、”智”的(大数据平台/数据中台)体系,基于“数字新基建”时代的数据价值思考,构建全域数字化矿区共享能力中心,助力煤炭企业实现数字化转型,打通底层系统之间数据壁垒,加强公司整体管理和安全生产系数,为运营提供数据统筹模型,实现重点数据实时监控和数据共享开放服务。综上所述,智慧矿山数据治理是一个系统性的工程,需要煤炭企业内各部门连同行业和政府监管部门通力协作,制定数据标准和管理规范,重塑煤炭企业数据架构和数据传输链路,打通智慧矿山数据壁垒,保障数据质量和数据安全。

zuoan1993的博客 1055

OSGi简介

使用Equinox开发B/S架构的OSGi应用

Snowball 3369

手把手拆解DGX GB200 NVL72:1个机柜如何塞进72块GPU?详解NVLink Switch铜缆背板设计

本文深度解析英伟达DGX GB200 NVL72系统如何通过NVLink Switch铜缆背板设计,在标准42U机柜中集成72块B200 GPU,实现1800GB/s的超高带宽。文章详细介绍了模块化架构、铜缆互连技术、液冷散热方案和高密度供电系统等核心创新,为AI算力需求提供突破性解决方案。

red88的博客 1574

OSGI架构设计

OSGI在国内不常用,而且相关资料比较少,很早之前在2015年的时候,公司有机会拿此框架做过一个项目,还算成功,所以在此分享一下OSGI的相关内容。 一、什么是OSGI? Open Service Gateway Initiative,官方说的很明白,上网一搜介绍也有一堆,在此就不详细搬述了,也没啥意义。但是根据项目中对osgi的实战,想说说我个人的理解,我个人总结的是osgi是一个非常好的模...

blackspoon123的专栏 2305

MMSE (Minimum Mean Square Error)均衡原理讲解

MMSE是一种将接收数据的MSE(均方误差)最小化的模型。有了这句话,很多问题就会在你的脑海中蹦出来。 什么是均方误差?最小化MSE "的物理含义是什么? 等等。 让我们从一个我们现在已经非常熟悉的通道模型开始。(我希望你现在也熟悉下面的表达方式。) MMSE作为一种均衡器,是一种后处理算法,它可以帮助我们找出接收到的数据,使之尽可能地接近原始数据(传输数据)。简而言之,MMSE中最重要的步骤是找到一个如下图所示的矩阵G。如果我们假设没有噪声,这个[G]矩阵可以简单的作为信道矩阵(H^-1)的倒数。但

Celeste的博客 4万+

EML 全面实践指南:把 SAP RAP 业务对象玩出工程化的稳定与优雅

本文面向掌握ABAP基础、正在实施RAP的开发者,深入讲解EML(Entity Manipulation Language)的核心用法。文章围绕READ ENTITIES、MODIFY ENTITIES、COMMIT ENTITIES三大语句,详细解析其语义、类型体系、事务机制及工程实践。重点内容包括:字段裁剪、派生类型、草稿控制、批量更新、事务缓冲与保存序列等关键技术点,并配合真实案例代码。旨在帮助开发者在SAP ABAP On-Premise和BTP环境中构建可维护、可演进的业务对象访问层,同时避免常见

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

架构设计——OSGI规范

架构设计——OSGI简介 一、OSGI简介 1、OSGI简介 OSGI(Open Service Gateway Initiative),即开放服务网关协议,是面向Java的动态模型系统。OSGI是指由OSGI Alliance组织制定的Java模块化规范,OSGI规范的核心部分是一个框架,其中定义了应用程序的生命周期模式和服务注册。基于OSGI框架定义了大量的OSGI服务:日志、配置管理,HTT...

weixin_34247299的博客 996

基于Simulink的鲸鱼优化算法(WOA)MPPT仿真

摘要:本文介绍了基于Simulink的鲸鱼优化算法(WOA)在光伏MPPT控制中的应用。WOA模拟座头鲸的"气泡网捕食策略",通过包围猎物、螺旋收缩和随机搜索三阶段动态平衡全局探索与局部开发能力,有效解决局部阴影导致的多峰P-V曲线问题。文章详细讲解了WOA-MPPT的Simulink建模过程,包括多峰光伏阵列建模、WOA控制器实现和Boost变换器控制。仿真结果显示,在三种典型工况下,WOA-MPPT的追踪效率>99.3%,动态响应时间<0.15s,性能优于传统算法。最后提出了混合WO

amy_mhd的博客 71

OSGi起步(6):动态追踪服务

--------------原文:http://www.eclipsezone.com/eclipse/forums/t91059.html原作者:Neil Bartlett--------------OSGi起步(6):动态追踪服务 欢迎回到EclipseZone的OSGi教程。 上一次,通过Martin Fowler介绍的场景:MovieLister依赖于Mov

瓶子的窝 1641

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

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

怀旧版电脑GBC模拟器

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

OSGi起步(5):使用服务

---------------------原地址:http://www.eclipsezone.com/eclipse/forums/t90796.html原作者:Neil Bartlett---------------------OSGi起步(5):使用服务 上一部分,我们知道了如何注册一个服务。这一次,我们来看看怎么去查找和使用另一个bundle注册的服务。 和

瓶子的窝 1517

OSGi初识

    OSGi诞生初期,其目的主要是能够灵活方便并远程管理互联的网络嵌入设备,OSGi联盟上对于OSGi service platform有这样一句解释:The OSGi service platform delivers an open, common architecture for service providers, developers, software vendors, gatew

梦幻爪哇国 539

OSGi起步(OSGi for Beginners)

一年一度的Ig Nobel prize典礼都都会带来一些非常新颖的观点、发现,这些内容甚至超过了Ig Nobel prizes本身。每位获奖者在做完七个字的总结后,还有机会利用24秒的时间对自己的新观点、新发现进行阐述。这是一个极其绝妙的主意,这对每位获奖者都是一个需要完成的挑战。OSGi是近来业界经常提到的事物,随着Equinox成为Eclipse的顶级项目,Felix被用于Sling和G...

weixin_30587927的博客 153

[插件化开发] 1. 初识OSGI

初识 OSGI 背景 当前product是以solution的方式进行售卖,但是随着公司业务规模的快速夸张,随之而来的是新客户的产品开发,老客户的产品维护,升级以及修改bug,团队的效能明显下降,为了解决此类问题,必须站在公司战略的统一高度来重构系统。 荣幸的是,本人在此时加入团队并负责系统架构的升级与重构工作。因为公司在全世界都有客户,而且客户又来自于各行各业,带来的问题就是如何抽离公共业务的...

Isaac-Zhang 1378

OSGi架构学习与设计

首先,我想表扬自己终于开始实践自己一直想贯彻的想法———用博客来记录和总结自己的学习历程。               现在我正在设计一套基于Equinox的管理门户平台上各种不同服务的分布式框架。Equinox是Eclipse内的一个简单的开源OSGi框架,在它的基础上,我需要自己创建我所需要的bundles。框架底层衔接的是一个其他项目组正在开发中的非结构化数据库,而框架之上是一

张包峰的博客 3218

OSGI框架学习

OSGI框架三个重要概念OSGi框架是根据OSGi规范中定义的三个概念层设计的:模块、模块生命周期、服务。模块层定义了OSGi模块的概念(bundle,即包含一个元数据MANIFEST.MF的JAR文件)。bundle比标准JAR文件更强大,它可以声明哪些包对外可见(Export-Package);所以说它扩展了Java的访问修饰符。bundle还可以明确声明依赖哪些外部包(Import-Pack...

weixin_34120274的博客 153

我们与微服务的纠缠的这些年

2013年正式介入软件开发,海域无人机系统OSGI+南网一级主站SSH双框架起步,直接扯着蛋上天了 2014年,引入maven,考试系统尝试 2016年废弃OSGI,引入jenkins,四川应急测绘指挥系统转向Springboot+jpa,与外协合作接触docker,尝试docker化 2017年,海域综合监控分模块拆分,形成分布式系统,自己实现了类似于Feign的通讯工具类 同年,贵州二级主站的实时监控分系统,Spring boot+eureka+config+nginx 2018年,无人机系统重构,借助

zhaoenweiex的博客 797

DBeaver启动慢?4步插件性能调优完整指南

DBeaver 是通用的数据库客户端,功能都靠 **OSGi 插件** 提供。插件越积越多、**JVM 堆内存**给得不够时,启动就会又慢又卡。本文把启动慢、内存吃紧、插件冲突三种情况拆开讲,每种都先自检、再动手、后验证。 [![DBeaver数据库客户端启动画面,用于判断启动卡顿](https://raw.gitcode.com/GitHub_Trending/db/dbeaver/raw/5

gitblog_00882的博客 794
上一篇: OSGi起步(3):bundle之间的依赖
下一篇: OSGi起步(5):使用服务
devonzzb
博客等级 码龄25年 7粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值