[b]Features:[/b]
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
[b]What is OSGi[/b]
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
[b]Who use OSGi[/b]
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
[b]Intro[/b]
Dynamic Module System For Java
JSR 232, JSR 291
[b]Modularity[/b]
Define module in OSGI;
Publish functions for other modules;
Use functions provided by other modules.
[b]Implementation[/b]
1) Equinox
OSGI R4 RI
by Eclipse
www.eclipse.org/equinox
used by Eclipse RCP & other products
2) Felix
http://felix.apache.org
[b]Define module in OSGI[/b]
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
[b]Publish bundle[/b]
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
[b]Use bundle[/b]
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
[b]Management lifecycle[/b]
//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
[b]Deploy outside alone[/b]
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
[b]Valid commands:[/b]
---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
[b]What is OSGi[/b]
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
[b]Who use OSGi[/b]
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
[b]Intro[/b]
Dynamic Module System For Java
JSR 232, JSR 291
[b]Modularity[/b]
Define module in OSGI;
Publish functions for other modules;
Use functions provided by other modules.
[b]Implementation[/b]
1) Equinox
OSGI R4 RI
by Eclipse
www.eclipse.org/equinox
used by Eclipse RCP & other products
2) Felix
http://felix.apache.org
[b]Define module in OSGI[/b]
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
[b]Publish bundle[/b]
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
[b]Use bundle[/b]
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
[b]Management lifecycle[/b]
//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
[b]Deploy outside alone[/b]
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
[b]Valid commands:[/b]
---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