`
louisling
  • 浏览: 141400 次
  • 性别: Icon_minigender_1
  • 来自: ZhuHai
社区版块
存档分类
最新评论

OSGi Intro

    博客分类:
  • Java
阅读更多
Features:
    modularity
    dynamic,” Plug and Play”
    extensionable
    these features are supported by OSGI, the meaning is that you don’t need realize those features yourself, what you need do is just use it

What is OSGi
    Dynamic Module System For Java
    JSR232, JSR291
    Universal Middleware
    Best practice guide and support for building modularity/dynamic/extensionable system
    Modularity with rule;
    Dynamic support for module, OSGI service, configuration;
    Extension support with OSGI service.

    In OSGI module compose of one or more bundles;
    Bundle is a normal jar file, the difference is its Manifest.mf file, OSGI add some special header info property to declarative bundle, such as:
    bundle-version, export-package, import-package

Who use OSGi
    IBM/Websphere, RSA
    BEA/microServices, All BEA product will be based on microServices
    Eclipse
    Apache/Struts 2
    Spring/Spring-OSGi
    Simens, Nokia, BMW, Cisco etc.
    SAP,Oracle,IONA etc. are interested in OSGi,and be OSGi EEG member

Intro
    Dynamic Module System For Java
    JSR 232, JSR 291

Modularity
    Define module in OSGI;
    Publish functions for other modules;
    Use functions provided by other modules.

Implementation
    1) Equinox
       OSGI R4 RI
       by Eclipse
       www.eclipse.org/equinox
       used by Eclipse RCP & other products
    2) Felix
       http://felix.apache.org

Define module in OSGI
    In OSGI module compose of one or more bundles;
    Bundle is a normal jar file, the difference is its Manifest.mf file,
    OSGI add some special header info property to declarative bundle, such as: bundle-version, export-package, import-package

Publish bundle
    add export-package header info to provide package for other bundles to use, such as cn.org.osgi.ppt.service;
    add Fragment-Host header info to provide all resources for host bundle to use;

    publish OSGI service for other bundles;
    Use BundleContext.registerService to register normal java interface as OSGI service;
    Export package cn.org.osgi.ppt.service

Use bundle
    A) Use BundleContext.getService to get OSGi service provided by other bundles;
    B) Add import-package header info to import packages provided by other bundles.

    add import-package header info to import packages provided by other bundles, then you can use the java class in those packages;
    add require-bundle header info to use all export packages and resources provider by bundle;

    use OSGi service provided by other bundles;
    A) Use BundleContext.getService to get OSGi service provided by other bundles;

Usage in Eclipse:
    1) New a plug-in project, Target Platform: an OSGi framework: Equinox
       Plug-in ID: OsgiHello
       Activator: com.zero.demo.osgihello.Activator
       Click finish.

       Implement Activator.start()
        public void start(BundleContext context) throws Exception {
            System.out.println("OsigHello started...");
            context.registerService(HelloService.class.getName(), new HelloServiceImpl(), null);
        }
      
       Define a interface: com.zero.demo.osgihello.HelloService
       Implement this interface: com.zero.demo.osgihello.HelloServiceImpl
      
       META-INF/MANIFEST.MF
         Export-Package: com.zero.demo.osgihello

    2) New a plug-in project OsgiHelloTest to invoke the OSGI bundle OsgiHelloHello.
       Target Platform: an OSGi framework: Equinox

       META-INF/MANIFEST.MF
        Require-Bundle: OsgiHello

       Implement Activator.start(): get the OSGI bundle OsgiHello.

        public void start(BundleContext context) throws Exception {
            System.out.println("OsigHelloTest started...");
            ServiceReference serviceRef = context.getServiceReference(HelloService.class.getName());
           
            if (serviceRef != null) {
                //Get the OSGI bundle
                HelloService helloService = (HelloService) context.getService(serviceRef);

                //Test the OSGI bundle
                String result = helloService.sayHello("Jerry");
                System.out.println(result);
            }
        }

       Click Run/Open Run Dialog...
       New a launch configuration under OSGi Framework
       In Bundles/Workspace, select OsgiHelloTest
       Click "Add Required Bundles"
       Click Run

Management lifecycle
    //Display all bundles
    osgi>ss

    ID  state   Bundle
    ----------------------------------------------------------
    0 ACTIVE  org.eclipse.osgi_3.3.0.v20070530
    1 ACTIVE  OsgiHello_1.0.0

    start/stop/update/uninstall Bundle.ID
    osgi>start 2
    osgi>stop 2
    osgi>update 2
    osgi>uninstall 2

Deploy outside alone
    Create equinox framework app outside alone first;
   
    1) create Equinox directory, then create configuration, plugins directory in Equinox directory;
    2) put org.eclipse.osgi.jar & org.eclipse.osgi.services.jar to plugins directory;
    3) create config.ini in configuration directory,content in config.ini like this:
        osgi.noShutdown=true
        osgi.bundles=org.eclipse.osgi.services_3.1.100.v20060601.jar@start
        osgi.bundles.defaultStartLevel=4
        osgi.configuration.cascaded=false
        eclipse.ignoreApp=true

    Create run.bat in Equinox directory,content in run.bat(windows) like this:
        @echo off
        java -jar plugins/org.eclipse.osgi_3.2.1.R32x_v20060919.jar -configuration configuration -console

    Install bundle
        osgi>install file:/C:\Equinox\OsgiHello_1.0.jar
        osgi>install file:/C:\Equinox\OsgiHelloTest_1.0.jar
   
    Use ss to see all installed bundles
    osgi>ss

    ID      state       Bundle
    -----------------------------------------------------------------
    0       ACTIVE      org.eclipse.osgi_3.3.1.R33x_v20070828
    1       ACTIVE      org.eclipse.osgi.services_3.1.200.v20070605
    12      INSTALLED   OsgiHello_1.0.0
    13      INSTALLED   OsgiHelloTest_1.0.0

    state       description
    ----------------------------------------------------------------------------------------------
    INSTALLED   the bundle was just installed, its state is INSTALLED, can start it.
    ACTIVE      after start a bundle, its state is ACTIVE, can update, refresh, stop, uninstall it
    RESOLVED    after stop a bundle, its state is RESOLVED, can start, uninstall it
    <<LAZY>>   

    If a bundle is installed, it's state is installed, can start it.
    If a bundle is uninstalled, it's state is
   
    start the installed bundles using 'bundle ID' or 'bundle name'
    osgi>start 12
    osgi>start 13

    or

    osgi>start OsgiHello
    osgi>start OsgiHelloTest

    If bundle OsgiHelloTest can't invoke/find bundle OsgiHello, refresh the bundle.
    osgi>refresh 13

    If bundle is updated, update it
    osgi>update 12

Valid commands:
---Controlling the OSGi framework---
launch - start the OSGi Framework
shutdown - shutdown the OSGi Framework
close - shutdown and exit
exit - exit immediately (System.exit)
init - uninstall all bundles
setprop <key>=<value> - set the OSGi property
---Controlling Bundles---
install - install and optionally start bundle from the given URL
uninstall - uninstall the specified bundle(s)
start - start the specified bundle(s)
stop - stop the specified bundle(s)
refresh - refresh the packages of the specified bundles
update - update the specified bundle(s)
---Displaying Status---
status [-s [<comma separated list of bundle states>]  [<segment of bsn>]] - display installed bundles and registered services
ss [-s [<comma separated list of bundle states>]  [<segment of bsn>]] - display installed bundles (short status)
services {filter} - display registered service details
packages {<pkgname>|<id>|<location>} - display imported/exported package details
bundles [-s [<comma separated list of bundle states>]  [<segment of bsn>]] - display details for all installed bundles
bundle (<id>|<location>) - display details for the specified bundle(s)
headers (<id>|<location>) - print bundle headers
log (<id>|<location>) - display log entries
---Extras---
exec <command> - execute a command in a separate process and wait
fork <command> - execute a command in a separate process
gc - perform a garbage collection
getprop  { name } - displays the system properties with the given name, or all of them.
---Controlling Start Level---
sl {(<id>|<location>)} - display the start level for the specified bundle, or for the framework if no bundle specified
setfwsl <start level> - set the framework start level
setbsl <start level> (<id>|<location>) - set the start level for the bundle(s)
setibsl <start level> - set the initial bundle start level
---Controlling the Profiling---
profilelog - Display & flush the profile log messages

---Eclipse Runtime commands.---
diag - Displays unsatisfied constraints for the specified bundle(s).
---Controlling the Console---
more - More prompt for console output

Resource:
    Understanding how Eclipse plug-ins work with OSGi
    http://www.ibm.com/developerworks/library/os-ecl-osgi/index.html

    http://www.osgi.org
    http://www.osgi.org.cn
    http://www.aqute.biz
    http://blog.bluedavy.cn   
分享到:
评论

相关推荐

    osgi介绍osgi介绍

    osgi介绍osgi介绍osgi介绍osgi介绍osgi介绍osgi介绍osgi介绍osgi介绍osgi介绍osgi介绍

    OSGI原理与最佳实践

    资源名称:OSGI原理与最佳实践内容简介:国内第一本OSGi图书OSGi国内推广者林昊多年经验的结晶涵盖OSGi从入门到深入的知识体系引领OSGi国内研究和普及本书基于作者多年使用OSGi的经验而编写,涵盖了OSGi从入门到深入...

    利用R-OSGi实现分布式OSGi应用

    利用R-OSGi实现分布式OSGi应用 本文通过介绍传统 OSGi 应用程序及 R-OSGi 的实现方式入手,阐述了 R-OSGi 对于 OSGi 规范的实现方式。然后通过一个简单的功能实现由浅入深地讲述传统 OSGi 和 R-OSGi 上的两种不同...

    OSGI合集 OSGi原理与最佳实践

    网上收集的OSGI资料. 包括: OSGi原理与最佳实践(精选版).pdf OSGI实战和源码.rar osgi进阶.pdf Introduce.OSGi.ppt OSGi.in.action.ppt r4.cmpn.pdf r4.core.pdf r4.enterprise.pdf

    《OSGi实战》完整中文版

    《 OSGi实战》是学习OSGi的全面指导,利用与架构和开发人员相关的示例清楚地讲解OSGi概念,同时探讨了很多实践场景和技术,阐述了开发人员有多需要OSGi,怎么将OSGi嵌入其他容器中,将遗留系统移入OSGi的最佳实践,...

    OSGI 实例eclipse插件开发

    OSGI 实例 eclipse 插件开发

    OSGI进阶.pdf

    讲OSGI应用的讲OSGI应用的讲OSGI应用的讲OSGI应用的讲OSGI应用的

    OSGi入门教程(OSGi Introduce)

    OSGi的入门教程,帮助初学者快速了解OSGi的定义、用途及组成。

    OSGI 入门资料PDF

    OSGI 入门资料PDF,包括OSGI实战、OSGI进阶、OSGI 入门和整合Spring、OSGI原理与最佳实践

    osgi,林昊写的osgi实战和进阶

    osgi,林昊写的osgi实战和进阶,学习osgi的好东西,入门的首选。

    OSGI进阶--OSGi开发指南

    OSGi开发文档和实践指南,描述了OSGI的开发流程

    OSGi入门资料-初探OSGi 的全文

    OSGi的入门资料,网上找的,初探OSGi 的全文

    OSGI进阶实战教程

    OSGi学习不错的材料 OSGi学习不错的材料 OSGi学习不错的材料 OSGi学习不错的材料

    OSGi原理与最佳实践

    本书基于作者多年使用OSGi的经验而编写,涵盖了OSGi从入门到深入的知识体系,从OSGi的简介开题,介绍OSGi的作用及基本概念;其后进入OSGi实战,结合实例讲解如何基于OSGi框架编写模块化、动态化的各种Java应用;最后...

    OSGI组件编程(osgi.component.programming)

    介绍OSGI组件编程,详细介绍用eclipse和Equinox开发OSGI程序

    OSGi规范(r4)中文版

    OSGi 中文版 中文 OSGi中文OSGi 中文版 中文 OSGi中文OSGi 中文版 中文 OSGi中文OSGi 中文版 中文 OSGi中文OSGi 中文版 中文 OSGi中文OSGi 中文版 中文 OSGi中文OSGi 中文版 中文 OSGi中文OSGi 中文版 中文 OSGi中文

    OSGi.NET框架 Documentation

    本文档主要针对OSGi.NET模块化框架使用进行了描述 OSGi.NET框架是一个参照了OSGi规范的模块化管理框架。框架为应用程序(组件(bundle))提供了一个标准环境。整个框架可以划分为一些层次: 1.运行环境 2.模块...

    Equinox OSGI ServletBridge 原理与实践.rar

    OSGI 在 J2EE 环境下的应用越来越广泛,目前在 Servlet 应用中使用 OSGI 有两种方式:Servlet Container in OSGI 和 OSGI in Servlet Container. 前一种:和普通的 OSGI bundle 开发差不多,而后一种:Equinox 提供...

    osgi重要文档--osgi核心规范文档,osgi服务文档,osgi-最佳原理与实践(王昊编著,共79页)

    osgi核心规范文档,osgi服务文档,osgi-最佳原理与实践(王昊编著,共79页)

    OSGi in Action

    HIGHLIGHT OSGi in Action is the definitive guide to OSGi, the hottest technology available for creating modular enterprise Java applications. DESCRIPTION What is OSGi? Simply put, OSGi is a ...

Global site tag (gtag.js) - Google Analytics