OSGi Intro

xiaoxiao2021-03-01  10

[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 相关资源:自动抢茅台脚本.zip
转载请注明原文地址: https://www.6miu.com/read-3850200.html

最新回复(0)