自己的osgi收藏(比较详尽的osgi学习文档)一

本文档详细介绍了OSGi的基本概念,包括它的起源、发展和目标。OSGi作为动态模块系统,提供了模块化的开发和部署方式,支持动态管理和服务交互。通过Export-Package和Import-Package实现包的交互,通过Service方式实现组件间的通信。文章还提到多个企业和产品如IBM、BEA、Sun Glassfish、Eclipse等都在使用OSGi。此外,文中还介绍了基于Equinox框架的实战步骤,包括创建BUNDLE、发布服务以及使用控制台管理模块的状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

  osgi 参考文档

 

体验osgi

 

/*****************************************************************************/

/************authorname:Javier*******************************************/

/********* walk into the osgi **************************************************/

/*************08-09-05**********************************************************/

本文档主要包含以下内容:

1.            osgi的基本概念,提出背景,所带来的基本效果。

2.            基于osgi框架(equinox)的实战

3.            开发和发布使用service,

4.   bundle的状态,初探equinox console.(控制台命令)

5.  Ds bundle开发 和一些其他问题   

6.   开发OSGI 的JSP应用

 

 

1 osgi的基本概念, 提出背景,所带来的基本效果。

19993月,OSGi联盟(非盈利性质)成立,目标   是建立家庭网关,并通过互联网向家庭网络提供各种服务,例如通过web页面控制咖啡机等

2000年发布OSGi Service Platform V 1.02001年发布V 2.02003年发布V 3.02005年发布V 4.02007年发布V 4.1

Eclipse V3.0采用OSGi,使得OSGi成功进入Java企业应用领域,并成为其中重要一员;

同时Eclipse推出了OSGi R4 RIEquinox

 

Dynamic Module System For Java

F     这是OSGi最开始的定义;

F     意味着基于OSGi就可以模块化的开发Java应用;

F     意味着基于OSGi就可以模块化的部署Java应用;

F     还可以动态的管理模块。

 

Universal Middleware

这是OSGi近年来新取的名词,目标是让OSGi脱离语言限制,成为所有语言的统一模型。

 

作为一个Module System For JavaOSGi提供了这些:

F      明确的定义了什么是模块;

F      明确的定义了模块之间的交互方式;

F      支持模块化的部署。

 

明确定义模块

F     OSGi中这不是一个虚拟的概念,而是一个实体:Bundle

F     Bundle是一个普通的jar,只是其META-INF中的manifest.mf中描述了一些标准的模块的信息。

明确定义模块的交互方式

F     package方式交互:

通过Export-Package对外提供packages

通过Import-Package使用其他模块的packages

Package支持版本机制;

F     service方式进行交互:

符合面向接口原则;

支持IoC方式注入;

面向服务的组件模型,

支持模块化的部署

F     Bundle可通过多种方式部署到OSGi框架中,例如命令行、web界面、目录等等;

Dynamic

F     支持模块生命周期的动态管理;

v     意味着可以动态的安装、启动、停止、更新和删除模块;

F     支持模块中Service生命周期的自动管理;

        意味着自动动态的发现所需的服务并注入;

        意味着当所注入的服务不可用时将自动删除;

F     支持动态的进行配置管理(类似JMX

        意味着可以在运行期动态的调整配置;

        配置动态调整时自动通知相应感兴趣的组件。

谁在用OSGi

v     IBM

F      Websphere

F      RSA

v     BEA

F      microServices,所有BEA的产品都基于microServices上;

v     JBoss AS 5.0

v     Sun Glassfish V3

v     Eclipse

v     Apache

F      Struts 2

v     Spring

F      Spring-DMSpring Application Platform

v     Simens,Nokia,BMW,Cisco,SAP,Oracle,IONA等等

v     最近推出的很多新产品都会写上based on OSGi or run on OSGi

 

2 基于osgi框架(equinox)的实战

1.     先准备工具基于equinox 先下载自己工程需要的包,然后检查工具有没有准备好,在运行中的RUN中建立一个 Equinox OSGI Framework 选上你需要的包点运行.

在控制台上看有没有错误,如果出现 Address already in use:jvm_Bind则说明

本机的80端口已被占用,在argumentsVM arguments:输入-Dorg.osgi.service.http.port=8080 ,8080是自己可设置的,点RUN.出现OSGI>

在后面输入SS回车看到启动包的状态,全是ACTIVE就是配置正确.

2.     开发BUNDLE

1.     建立PLUG-IN  PROJECT *在AN OSGI FRAMEWORK:选上STANDARD这里是标准OSGI

2.     PLUGIN ID指的是BUNDLE的唯一标识.

      CLASSPATH指BUNDLE运行时的类路径和前面的OUTPUT   FOLDER设置BIN相同

3.     建立一个对外提供接口的包,在META-INF/MANIFEST.MF中的RUNTIME标签中,在EXPORT PACKAGE中ADD就添加完成

4.     然后在MANIFEST.MF中能看见提供出去的包,在下个BUNDLE中的IMPORTED PACKAGES 中接收;

5.     完成后点运行看是不是启动成功.

3 开发和发布使用service

ACTIVATOR文件中START 和STOP 两方法管理BUNDLE生命周期,

CONTEXT.REGISTERSERVICE(服务标识名,服务实例,实例属性);

用这个方法通过OSGI的 BUNDLECONTEXT 来注册SERVICE.

返回SERVICEREGISTRATION 对象;

在STOP方法中通过这样的方法卸载注册,

SERVICEREGISTRATION.UNREGISTER();

用这个方法得到服务;

ServiceReference    ref = context.getServiceReference(HttpService.class.getName());

用这个段代码注册SERVLET;

HttpService http = (HttpService) context.getService(ref);

Servlet servlet=new Servlet(context);

                http.registerServlet("/demo/login", servlet, null, null)

发布:

1建立一个EQUINOX运行环境:

在硬盘上建立一个DEMO的目录,从ECLIPSE/PLUGINS目录下复制 org.eclipse.osgi.jar到本目录下,该名equinox.jar.编写一个RUN.DAT;

内容为:

Java -Dorg.osgi.service.http.port=8080 jar equinox.jar console

如果不需要指定端口的话;

Java jar equinox.jar console

双击 run.bat  如果看到osgi> 就是启动成功,这时候SS里面就一个SYSTEM BUNDLE,导出各BUNDLE工程为JAR,把他们复制到目录下,将需要的包也复制过来到  DEMO目录,这时运行RUN.DAT 然后 install reference:file:bundles/要安装的bundle这样把他们都装上  然后用start ID号这样就启动好了,SS检查状态,都是ACTIVE表示发布成功.

 

4. bundle的状态,初探equinox console.(控制台命令)

安装、启动、停止、更新和删除模块

状态:INSTALLED 成功安装(但有错误)

   RESOLVED 暂停 (BUNDLE 中所需要的类都已经可以使用)

   ACTIVE 已经启动,并正在运行

   STARTING  正在启动中

   STOPPING 正在停止中

   UNINSTALLED  已经被卸载了

控制台命令:

START 开启后面+ID

STOP  停止后面+ID

UPDATE 更新

DIAG (ID) 诊断程序包

INSTALLED 安装+路径

SERVICE  正确过滤器

5  Ds bundle开发 和一些其他问题   

要建DSBUNDLE首先在工程下建OSGI-INF目录.Component.xml

Component.xml配置:组件

 

<?xml version="1.0" encoding="UTF-8"?>

<component name="chen">-在着提供了一个名字为CHEN的组建

    <implementation class="org.riawork.demo.service.user.impl.ConfigFileValidatorImpl"/>--实现的是着个类

    <service>

    <provide interface="org.riawork.demo.service.user.Validator"/>---对外提供的接口

    </service>

 

<reference name="HttpService" interface="org.osgi.service.http.HttpService"

     bind="setHttpService" unbind="unsetHttpService" policy="dynamic"/>--引用的接口

---------BINDUNBIND是引用接口的方法

</component>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值