比较详尽的osgi学习文档一

本文详细介绍了OSGi的基础概念、发展历程及其在Java领域的广泛应用。通过Equinox框架进行实战操作,包括构建Bundle、服务开发与发布等内容。此外还探讨了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的基本概念, 提出背景,所带来的基本效果。
1999年3月,OSGi联盟(非盈利性质)成立,目标   是建立家庭网关,并通过互联网向家庭网络提供各种服务,例如通过web页面控制咖啡机等
2000年发布OSGi Service Platform V 1.0,2001年发布V 2.0,2003年发布V 3.0,2005年发布V 4.0,2007年发布V 4.1;
Eclipse V3.0采用OSGi,使得OSGi成功进入Java企业应用领域,并成为其中重要一员;
同时Eclipse推出了OSGi R4 RI:Equinox
 

Dynamic Module System For Java

F     这是OSGi最开始的定义;
F     意味着基于OSGi就可以模块化的开发Java应用;
F     意味着基于OSGi就可以模块化的部署Java应用;
F     还可以动态的管理模块。
 

Universal Middleware

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

作为一个Module System For Java,OSGi提供了这些:
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-DM、Spring 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端口已被占用,在arguments—VM arguments:输入-Dorg.osgi.service.http.port=8080 ,8080是自己可设置的,点RUN.出现OSGI>

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

2.     开发BUNDLE

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

2.     PLUG—IN 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开发 和一些其他问题   

要建DS的BUNDLE首先在工程下建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"/>--引用的接口
---------BIND和UNBIND是引用接口的方法
</component>


本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/javierhui111/archive/2009/01/18/3830894.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值