比较详尽的osgi学习文档一

    技术2022-05-19  25

    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)–        意味着可以在运行期动态的调整配置;–        配置动态调整时自动通知相应感兴趣的组件。谁在用OSGiv     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.csdn.net/javierhui111/archive/2009/01/18/3830894.aspx


    最新回复(0)