- 浏览: 143887 次
- 性别:
- 来自: ZhuHai
文章分类
最新评论
-
ahack:
http://maven.springframework.or ...
下载最新的 Spring -
muzibaishui2006:
用的挺方便的,十分感谢!
SWT组件Table 的排序 -
shinmeei:
我也遇到這問題.
參考這網頁, 解決了.
http://sta ...
SVN: RA layer request failed -
makemyownlife:
您好 ,和您讨论一个问题 ,在spring 和jms结合里 我 ...
Spring JMS CLIENT_ACKNOWLEDGE -
caiw0418:
试试看。谢谢
Unable to load default SVN client
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
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
发表评论
-
Delete sub folder(FileUtils)
2013-11-28 18:03 646public class FileUtils { / ... -
Spring 2.5 Annotation:
2013-11-07 15:01 0Spring 2.5 Annotation: 适用场景: ... -
Eclipse dropins
2009-09-03 14:32 1886You can also use an own extra d ... -
MatchFinder
2009-09-01 16:21 1022public class MatchFinder { ... -
File Writer
2009-09-01 16:09 808public static void testWriter() ... -
Get machine name from IP
2009-09-01 16:07 887public static void main(String[ ... -
Credit Card
2009-09-01 16:05 779//e.g. (20, 20), (13, 26) stat ... -
File Size
2009-09-01 15:25 1041public static void main(String[ ... -
XMPP introduction
2009-03-18 16:00 1773XMPP is Extensible Messaging an ... -
Singleton Sample(1)
2009-03-10 21:41 859public class Singleton { p ... -
Eclipse plug-ins:
2009-03-08 11:31 9591) Maven http://m2eclipse.co ... -
OSGi Note
2009-01-09 01:11 2017Create OSGi environment outside ... -
Unable to load default SVN client
2008-11-12 11:04 9593在 Eclipse 3.4(Gandymede) 里面安装 S ... -
递归删除文件内容
2008-05-05 13:16 1063今天突然发现, 很多 html 文件的末尾多了一行, < ... -
Ant task
2008-03-22 00:55 1715Copy task with Ant build.xml ... -
Top Five Java Technologies to Learn in 2008
2008-02-15 12:42 1064From: http://www.theserverside. ... -
一个 DAO 的实现方法
2008-02-04 14:19 2597对 ORM 的讨论永远都没 ... -
Java Persistence API: JPA
2008-01-19 19:32 1724Java Persistence API, or JPA J ... -
Note on Singleton
2007-11-26 10:47 1074//From Google - Bob Lee. (Jerem ... -
Guice
2007-11-26 10:41 1232Guice (from Google Bob Lee's I ...
相关推荐
OSGI(Open Services Gateway Initiative)是一种开放标准,用于创建可模块化的Java应用程序。它提供了一种灵活的框架,使得开发者可以构建、部署和管理模块化组件,这些组件被称为服务或bundle。OSGI的核心理念是将...
OSGI(Open Services Gateway Initiative)是一种模块化系统和Java服务框架,它允许应用程序由一系列可独立更新和替换的模块组成,这些模块称为“bundle”。在本实例中,我们将探讨如何利用OSGI技术来开发Eclipse...
OSGi(Open Services Gateway Initiative)是一种Java模块化系统,它为开发人员提供了一种动态、模块化的运行时环境。在OSGi中,应用程序被分解为称为“bundle”的独立单元,这些bundle可以相互依赖并独立地加载、...
OSGI(Open Services Gateway Initiative)是一种Java模块化系统,它允许开发者将应用程序分解为一系列可独立部署、更新和交互的服务。林昊所著的《OSGI实战》与《OSGI进阶》是深入理解OSGI技术的重要参考资料,适合...
OSGI组件编程是一种在Java平台上构建模块化应用程序的方法,它由OSGi联盟制定标准,并被广泛应用于企业级软件开发,尤其是对于需要高度可扩展性和动态性的系统。在本教程中,我们将深入探讨如何使用Eclipse和Equinox...
OSGi(Open Services Gateway Initiative)是一种Java平台上的模块化服务框架,它定义了一种标准,使得开发者能够构建可互操作的、动态的、模块化的软件系统。OSGi的核心概念是基于Java的模块化,它的主要目标是为...
OSGi规范中文版是一本全面介绍OSGi技术的书籍,它不仅涵盖了OSGi技术的基础知识,还详细介绍了OSGi的内部结构和工作原理,对于想要深入学习和应用OSGi技术的开发者而言,是一本非常有价值的参考书。 ### OSGi规范的...
OSGI(Open Services Gateway Initiative)是一种开放标准,用于创建模块化和动态的Java应用程序。它为Java开发人员提供了一个框架,使他们能够构建可热插拔的组件,从而实现更灵活、可扩展和可维护的软件系统。在本...
这个压缩包包含了关于OSGI的重要文档,分别是“OSGi R4核心规范文档”、“OSGi服务文档”以及“OSGi-最佳原理与实践”(王昊编著)。下面将详细介绍这些文档所涵盖的关键知识点。 首先,"OSGi R4核心规范文档"是...
资源名称:OSGI原理与最佳实践内容简介:国内第一本OSGi图书OSGi国内推广者林昊多年经验的结晶涵盖OSGi从入门到深入的知识体系引领OSGi国内研究和普及本书基于作者多年使用OSGi的经验而编写,涵盖了OSGi从入门到深入...
标题中的“tomcat嵌入OSGI容器”是指在Apache Tomcat服务器中集成OSGI(Open Service Gateway Initiative)框架,使得Tomcat能够支持模块化的应用程序部署和管理。OSGI是一种Java平台上的服务导向架构,它允许动态地...
Spring OSGi是Spring框架与OSGi(Open Service Gateway Initiative)规范相结合的一种技术,它允许在OSGi容器中运行和管理Spring应用。OSGi是一种模块化系统,为Java应用程序提供了动态部署、版本控制和依赖管理的...
《企业OSGi实战》一书是OSGi企业应用的权威指南,它不仅涵盖了OSGi在企业环境中的应用,还提供了Java企业版(Java EE)与OSGi特性的融合方法。本书详细介绍了模块化编程的重要性,以及OSGi如何强化Java的模块化能力...
OSGi(Open Services Gateway Initiative)是一种开放标准,用于创建模块化Java应用程序。它提供了一种动态的、可扩展的框架,使得开发人员可以构建、部署和管理软件组件。本资源包含两本书籍:“OSGi原理与最佳实践...
OSGi(Open Services Gateway Initiative)学习笔记(一) 在IT领域,OSGi是一种模块化系统和Java服务平台,它提供了一种动态管理软件组件的能力。本文将深入探讨OSGi的基本概念、架构以及如何使用它来构建可扩展和...
OSGI(Open Services Gateway Initiative)是一种开放标准,用于创建模块化和可扩展的Java应用程序。它提供了一种灵活的框架,允许开发人员将应用程序分解为独立的模块,这些模块称为服务。OSGI的核心是它的模块系统...
利用R-OSGi实现分布式OSGi应用 本文通过介绍传统 OSGi 应用程序及 R-OSGi 的实现方式入手,阐述了 R-OSGi 对于 OSGi 规范的实现方式。然后通过一个简单的功能实现由浅入深地讲述传统 OSGi 和 R-OSGi 上的两种不同...
在"OSGI.rar_OSGI eclipse_eclipse osgi_java OSGI_osgi"这个压缩包中,我们可以找到"OSGI实战.pdf",这很可能是关于如何在Eclipse环境下使用OSGI进行实际开发的详细指南。该书可能会涵盖以下关键知识点: 1. **...
OSGI,全称为Open Service Gateway Initiative,中文名为开放服务网关倡议,是一个为Java平台设计的模块化系统和动态服务框架。它定义了一种标准的模块化体系结构,允许Java应用程序由可独立更新和替换的模块(称为...
OSGi(Open Services Gateway initiative)是一种Java动态模块化系统规范,其核心思想是将应用分割成一系列的 bundles(模块),每个 bundle 都可以独立地安装、启动、停止、更新,而不会影响到其他 bundles。OSGi ...