`
louisling
  • 浏览: 143097 次
  • 性别: 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(Open Services Gateway Initiative)是一种Java模块化系统,它为开发人员提供了一种动态、模块化的运行时环境。在OSGi中,应用程序被分解为称为“bundle”的独立单元,这些bundle可以相互依赖并独立地加载、...

    OSGI 开发文档中文的

    OSGI(Open Services Gateway Initiative)是一种开放标准,用于创建可模块化的Java应用程序。它提供了一种灵活的框架,使得开发者可以构建、部署和管理模块化组件,这些组件被称为服务或bundle。OSGI的核心理念是将...

    OSGI 实例eclipse插件开发

    OSGI(Open Services Gateway Initiative)是一种模块化系统和Java服务框架,它允许应用程序由一系列可独立更新和替换的模块组成,这些模块称为“bundle”。在本实例中,我们将探讨如何利用OSGI技术来开发Eclipse...

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

    OSGI(Open Services Gateway Initiative)是一种Java模块化系统,它允许开发者将应用程序分解为一系列可独立部署、更新和交互的服务。林昊所著的《OSGI实战》与《OSGI进阶》是深入理解OSGI技术的重要参考资料,适合...

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

    OSGI组件编程是一种在Java平台上构建模块化应用程序的方法,它由OSGi联盟制定标准,并被广泛应用于企业级软件开发,尤其是对于需要高度可扩展性和动态性的系统。在本教程中,我们将深入探讨如何使用Eclipse和Equinox...

    OSGi入门教程(OSGi Introduce)

    OSGi(Open Services Gateway Initiative)是一种Java平台上的模块化服务框架,它定义了一种标准,使得开发者能够构建可互操作的、动态的、模块化的软件系统。OSGi的核心概念是基于Java的模块化,它的主要目标是为...

    OSGI 入门资料PDF

    OSGI(Open Services Gateway Initiative)是一种开放标准,用于创建模块化和动态的Java应用程序。它为Java开发人员提供了一个框架,使他们能够构建可热插拔的组件,从而实现更灵活、可扩展和可维护的软件系统。在本...

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

    这个压缩包包含了关于OSGI的重要文档,分别是“OSGi R4核心规范文档”、“OSGi服务文档”以及“OSGi-最佳原理与实践”(王昊编著)。下面将详细介绍这些文档所涵盖的关键知识点。 首先,"OSGi R4核心规范文档"是...

    OSGI原理与最佳实践

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

    tomcat嵌入OSGI容器

    标题中的“tomcat嵌入OSGI容器”是指在Apache Tomcat服务器中集成OSGI(Open Service Gateway Initiative)框架,使得Tomcat能够支持模块化的应用程序部署和管理。OSGI是一种Java平台上的服务导向架构,它允许动态地...

    spring osgi相关资源

    Spring OSGi是Spring框架与OSGi(Open Service Gateway Initiative)规范相结合的一种技术,它允许在OSGi容器中运行和管理Spring应用。OSGi是一种模块化系统,为Java应用程序提供了动态部署、版本控制和依赖管理的...

    OSGi原理与最佳实践(完整版)&OSGi_in_action

    OSGi(Open Services Gateway Initiative)是一种开放标准,用于创建模块化Java应用程序。它提供了一种动态的、可扩展的框架,使得开发人员可以构建、部署和管理软件组件。本资源包含两本书籍:“OSGi原理与最佳实践...

    osgi学习笔记(一)

    OSGi(Open Services Gateway Initiative)学习笔记(一) 在IT领域,OSGi是一种模块化系统和Java服务平台,它提供了一种动态管理软件组件的能力。本文将深入探讨OSGi的基本概念、架构以及如何使用它来构建可扩展和...

    OSGI + Webservice 例子

    OSGI(Open Services Gateway Initiative)是一种开放标准,用于创建模块化和可扩展的Java应用程序。它提供了一种灵活的框架,允许开发人员将应用程序分解为独立的模块,这些模块称为服务。OSGI的核心是它的模块系统...

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

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

    OSGI.rar_OSGI eclipse_eclipse osgi_java OSGI_osgi

    在"OSGI.rar_OSGI eclipse_eclipse osgi_java OSGI_osgi"这个压缩包中,我们可以找到"OSGI实战.pdf",这很可能是关于如何在Eclipse环境下使用OSGI进行实际开发的详细指南。该书可能会涵盖以下关键知识点: 1. **...

    OSGI

    OSGI,全称为Open Service Gateway Initiative,中文名为开放服务网关倡议,是一个为Java平台设计的模块化系统和动态服务框架。它定义了一种标准的模块化体系结构,允许Java应用程序由可独立更新和替换的模块(称为...

    OSGI进阶.pdf

    OSGi(Open Services Gateway initiative)是一种Java动态模块化系统规范,其核心思想是将应用分割成一系列的 bundles(模块),每个 bundle 都可以独立地安装、启动、停止、更新,而不会影响到其他 bundles。OSGi ...

    OSGI常用通信实例

    OSGI(Open Services Gateway Initiative)是一种开放的标准,用于创建模块化和可动态更新的应用程序和服务。在本实例中,我们看到OSGI与C++的结合,以及如何在Visual Studio 2010和Qt 5.11环境中实现插件间的通信。...

Global site tag (gtag.js) - Google Analytics