- 浏览: 141400 次
- 性别:
- 来自: 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 598public class FileUtils { / ... -
Spring 2.5 Annotation:
2013-11-07 15:01 0Spring 2.5 Annotation: 适用场景: ... -
Eclipse dropins
2009-09-03 14:32 1856You can also use an own extra d ... -
MatchFinder
2009-09-01 16:21 987public class MatchFinder { ... -
File Writer
2009-09-01 16:09 773public static void testWriter() ... -
Get machine name from IP
2009-09-01 16:07 855public static void main(String[ ... -
Credit Card
2009-09-01 16:05 749//e.g. (20, 20), (13, 26) stat ... -
File Size
2009-09-01 15:25 991public static void main(String[ ... -
XMPP introduction
2009-03-18 16:00 1741XMPP is Extensible Messaging an ... -
Singleton Sample(1)
2009-03-10 21:41 829public class Singleton { p ... -
Eclipse plug-ins:
2009-03-08 11:31 9341) Maven http://m2eclipse.co ... -
OSGi Note
2009-01-09 01:11 1987Create OSGi environment outside ... -
Unable to load default SVN client
2008-11-12 11:04 9548在 Eclipse 3.4(Gandymede) 里面安装 S ... -
递归删除文件内容
2008-05-05 13:16 1035今天突然发现, 很多 html 文件的末尾多了一行, < ... -
Ant task
2008-03-22 00:55 1689Copy task with Ant build.xml ... -
Top Five Java Technologies to Learn in 2008
2008-02-15 12:42 1042From: http://www.theserverside. ... -
一个 DAO 的实现方法
2008-02-04 14:19 2556对 ORM 的讨论永远都没 ... -
Java Persistence API: JPA
2008-01-19 19:32 1694Java Persistence API, or JPA J ... -
Note on Singleton
2007-11-26 10:47 1022//From Google - Bob Lee. (Jerem ... -
Guice
2007-11-26 10:41 1201Guice (from Google Bob Lee's I ...
相关推荐
osgi介绍osgi介绍osgi介绍osgi介绍osgi介绍osgi介绍osgi介绍osgi介绍osgi介绍osgi介绍
资源名称:OSGI原理与最佳实践内容简介:国内第一本OSGi图书OSGi国内推广者林昊多年经验的结晶涵盖OSGi从入门到深入的知识体系引领OSGi国内研究和普及本书基于作者多年使用OSGi的经验而编写,涵盖了OSGi从入门到深入...
利用R-OSGi实现分布式OSGi应用 本文通过介绍传统 OSGi 应用程序及 R-OSGi 的实现方式入手,阐述了 R-OSGi 对于 OSGi 规范的实现方式。然后通过一个简单的功能实现由浅入深地讲述传统 OSGi 和 R-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 实例 eclipse 插件开发
讲OSGI应用的讲OSGI应用的讲OSGI应用的讲OSGI应用的讲OSGI应用的
OSGi的入门教程,帮助初学者快速了解OSGi的定义、用途及组成。
OSGI 入门资料PDF,包括OSGI实战、OSGI进阶、OSGI 入门和整合Spring、OSGI原理与最佳实践
osgi,林昊写的osgi实战和进阶,学习osgi的好东西,入门的首选。
OSGi开发文档和实践指南,描述了OSGI的开发流程
OSGi的入门资料,网上找的,初探OSGi 的全文
OSGi学习不错的材料 OSGi学习不错的材料 OSGi学习不错的材料 OSGi学习不错的材料
本书基于作者多年使用OSGi的经验而编写,涵盖了OSGi从入门到深入的知识体系,从OSGi的简介开题,介绍OSGi的作用及基本概念;其后进入OSGi实战,结合实例讲解如何基于OSGi框架编写模块化、动态化的各种Java应用;最后...
介绍OSGI组件编程,详细介绍用eclipse和Equinox开发OSGI程序
OSGi 中文版 中文 OSGi中文OSGi 中文版 中文 OSGi中文OSGi 中文版 中文 OSGi中文OSGi 中文版 中文 OSGi中文OSGi 中文版 中文 OSGi中文OSGi 中文版 中文 OSGi中文OSGi 中文版 中文 OSGi中文OSGi 中文版 中文 OSGi中文
本文档主要针对OSGi.NET模块化框架使用进行了描述 OSGi.NET框架是一个参照了OSGi规范的模块化管理框架。框架为应用程序(组件(bundle))提供了一个标准环境。整个框架可以划分为一些层次: 1.运行环境 2.模块...
OSGI 在 J2EE 环境下的应用越来越广泛,目前在 Servlet 应用中使用 OSGI 有两种方式:Servlet Container in OSGI 和 OSGI in Servlet Container. 前一种:和普通的 OSGI bundle 开发差不多,而后一种:Equinox 提供...
osgi核心规范文档,osgi服务文档,osgi-最佳原理与实践(王昊编著,共79页)
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 ...