OSGi(Open Services Gateway Initiative,¿ª·Å·þÎñÍø¹ØÐÒé)ÌṩÁËÒ»¸öÃæÏò·þÎñ×é¼þµÄ±à³ÌÄ£ÐÍ£¬»ùÓÚ
OSGi ±à³Ì£¬¾ßÓÐÄ£¿é»¯£¬±ê×¼»¯£¬ÃæÏò·þÎñ£¬¶¯Ì¬ÐÔ£¬Ò׸´Óã¬Ò×À©Õ¹£¬Òײ¿ÊðµÈÖî¶àÓŵ㣬±¾ÎĽéÉÜÁË»ùÓÚ
OSGi ¿ª·¢Ò»¸öÓ¦ÓóÌÐòµÄ¹ý³Ì£¬¶ÁÕß¿ÉÒÔѧϰÈçºÎ»ùÓÚ OSGi ¿ª·¢×Ô¼ºµÄÓ¦Ó㬲¢´ÓÖÐÌå»á OSGi
ÉÏÊöµÄÓŵ㡣
Ò». OSGi ¼òÊ·
OSGi ÊÇÓÉ 1999 Äê³ÉÁ¢µÄ OSGi ÁªÃËÌá³öµÄÒ»¸ö¿ª·ÅµÄ·þÎñ¹æ·¶£¬×î³õµÄÄ¿µÄÊÇΪǶÈëʽÉ豸£¬È·ÇеØËµÊÇΪ¿ÉÒÔͨ¹ýÍøÂç·ÃÎʵÄÉ豸Ìṩһ¸öͨÓõÄÈí¼þÔËÐÐÆ½Ì¨£¬ÆÁ±Î²»Í¬É豸֮¼äµÄÓ²¼þºÍ²Ù×÷ϵͳ²îÒ죬ʹÈí¼þ¿ÉÒÔ¶¯Ì¬µØ²¿ÊðºÍ¸üС£ºóÀ´
Eclipse ×é֯עÒâµ½ÁË OSGi µÄÓŵ㣬¾ö¶¨½« Eclipse3.0 ¼°ºóÐø°æ±¾µÄ²å¼þÌåϵ½á¹¹»ùÓÚ
OSGi À´ÊµÏÖ£¬²¢×¨ÃųÉÁ¢ÁËÒ»¸ö×ÓÏîÄ¿ Equinox À´ÊµÏÖ OSGi R4 ¹æ·¶£¬°Ñ Equinox
×÷Ϊ Eclipse µÄµ×²ãÔËÐÐÆ½Ì¨¡£Eclipse ×éÖ¯µÄÕâÒ»¾ö¶¨´øÀ´ÁË˫ӮµÄ¾ÖÃæ£¬½ñÌìµÄ Eclipse
ÓÉÓÚÆä³öÉ«µÄ¿ÉÀ©Õ¹µÄÌåϵ½á¹¹£¬ÒѾ²»ÔÙÊÇÒ»¸öµ¥´¿µÄ Java IDE£¬¶øÊÇÒ»¸ö¿ª·ÅµÄ¿ª·¢Æ½Ì¨£¬Ò»¸öͨÓõĿÉÀ©Õ¹µÄÈí¼þ¿ò¼Ü£¬OSGi
Ò²²»ÔÙ¾ÖÏÞÓÚǶÈëʽÁìÓò£¬¶øÊdzÉΪÁËÒ»¸öͨÓõĶ¯Ì¬×é¼þ¿ª·¢»·¾³£¬ÔÚ×ÀÃæ£¬·þÎñÆ÷¶ËµÈÁìÓòµÃµ½ÁË´óÁ¿Ó¦Óá£
¶ÔÄ£¿é»¯µÄÖ§³ÖÊÇ Java µÄÒ»¸öÖØÒªµÄ·¢Õ¹·½Ïò£¬Ä¿Ç° Java µÄÄ£¿é»¯±ê×¼»¹´æÔÚ×ÅJSR
277:Java Module Systems ºÍ JSR 291:Dynamic Component
Support for Java Ö®ÕùÂÛ£¬ÆäÖÐJSR291 µÄÖ÷ҪĿµÄ¾ÍÒª½« OSGi ÒýÈëµ½ Java
±ê×¼ÖÐÈ¥£¬JSR277 ÔòÊÇ SUN ·¢ÆðµÄÒ»¸öJava Ä£¿é»¯±ê×¼¡£µ« OSGi ÊÂʵÉÏÒѾµÃµ½ÁËÐí¶à¹ú¼ÊIT´óÆóÒµµÄÖ§³Ö£¬²¢ÇÒÒѾÓÐÐí¶àÉÌÒµÈí¼þ²úÆ·»ùÓÚ
OSGi À´¿ª·¢£¬Èç IBM °üÀ¨ Websphere Application Server(WAS),
Rational Software Architecture(RSA) ÔÚÄÚµÄÐí¶àÖØÁ¿¼¶Èí¼þ²úÆ·¾ùÒÑ»ùÓÚ
OSGi À´ÊµÏÖ£¬ÖøÃûµÄ IoC ¿ò¼Ü Spring ÕýÔÚÕûºÏ OSGi ¼¼Êõ£¬ÏÖÔÚ»ùÓÚ Eclipse
¿ª·¢ RCP£¬²å¼þ³ÌÐòÒ²·Ç³£Á÷ÐУ¬¿ÉÒÔÔ¤¼û»ùÓÚOSGi µÄ Java Ó¦ÓóÌÐò½«»áÔ½À´Ô½¶à£¬Ò²½«»áÓÐÔ½À´Ô½¶àµÄÈí¼þ¿ª·¢×éÖ¯¸Ä±äÆäÈí¼þÉè¼ÆË¼ÏëºÍ¿ª·¢·½Ê½£¬Óµ±§
OSGi ²¢¿ªÊ¼ÏíÊÜ OSGi ´øÀ´µÄºÃ´¦¡£
¶þ. ʹÓà Eclipse ¿ª·¢ OSGi Ó¦ÓÃ
±¾ÎļÙÉè¶ÁÕßÒѾÁ˽â OSGi ±à³ÌµÄ»ù±¾¸ÅÄîÒÔ¼°ÈçºÎÔÚ Eclipse
»·¾³ÖÐÀ´¿ª·¢OSGi¡¡Bundle¡£Èç¹ûÄú»¹²»Á˽âÕâЩ֪ʶ£¬¿ÉÒÔÏÈÔĶÁÏà¹Ø×ÊÁÏÈ磺 http://www.eclipse.org/equinoxÍøÕ¾ÒÔ¼°
developerworks ÍøÕ¾ÉϵÄÎÄÕ£º ÀûÓà Eclipse ¿ª·¢»ùÓÚ OSGi µÄ Bundle
Ó¦ÓÃ
Eclipse ¿ª·¢Æ½Ì¨ÖжԻùÓÚ OSGi ¿ª·¢Ó¦ÓóÌÐòÒѾÌṩÁ˽ÏΪÍêÉÆµÄÖ§³Ö£¬ÔÚ Eclipse ¼¯³É¿ª·¢»·¾³ÖпÉÒÔÇáËɵØÍê³É¶ÔÒ»¸ö»ò¶à¸ö
bundle µÄ¿ª·¢¡¢µ÷ÊÔ¡¢²¿Êð¡¢²âÊԵȹ¤×÷¡£±¾ÎĽ«»ùÓÚ Equinox OSGi ¿ò¼Ü£¬Ê¹Óà Eclipse
¿ª·¢Æ½Ì¨À´¿ª·¢Ò»¸öʾÀýÐÔµÄϵͳ¹ÜÀí³ÌÐò£¬Ö÷ҪĿµÄÊǸø¶ÁÕßÑÝʾ»ùÓÚ OSGi ¿ª·¢Ò»¸öÓ¦ÓóÌÐòµÄ¹ý³Ì²¢ÈöÁÕßÌå»á»ùÓÚOSGi
±à³Ì´øÀ´µÄÄ£¿é»¯£¬¶¯Ì¬ÐÔ£¬À©Õ¹ÐÔµÈÓŵ㡣ΪÁ˱ãÓÚ¶ÁÕßÀí½â£¬±¾ÎĻᾡ¿ÉÄܵı£³Ö´úÂë¼òµ¥Ò×¶®£¬±¾ÎÄÖеĴúÂëÔÚ
WindowsXP£¬Eclipse3.2£¬Sun JDK1.5 »·¾³Ï²âÊÔͨ¹ý¡£
Èý. ÐèÇó·ÖÎöÓëÄ£¿é»®·Ö
OSGi ´øÀ´Á˹淶»¯µÄÄ£¿é»®·Ö£¬µÍñîºÏµÄÄ£¿é¼ä¹ØÏµ£¬Í³Ò»µÄÄ£¿é¿ª·¢·½Ê½£¬¿É¶¯Ì¬²å°ÎµÄÄ£¿é¹ÜÀí»·¾³¡£¿ª·¢
OSGi Ó¦ÓóÌÐòµÄµÚÒ»²½ÊÇÔÚÐèÇó·ÖÎöµÄ»ù´¡ÉϽøÐо«ÐĵÄÄ£¿é»®·Ö£¬Ä£¿é»®·ÖµÄÔÔòÊǾ¡Á¿±£³Öµ¥¸öÄ£¿éµÄ¶ÀÁ¢ÐÔ£¬Ê¹Ä£¿éÓëÄ£¿éÖ®¼äµÄñîºÏ½µµ½×îС£¬Ã¿Ò»¸öÄ£¿é±©Â¶¸øÆäËüÄ£¿éµÄÐÅÏ¢×îÉÙ£¬¾¡Á¿ÈÃÄ£¿éÖ®¼äʹÓÃ
OSGi ¿ò¼ÜÌṩµÄ·þÎñ×¢²á»úÖÆÀ´Í¨ÐÅ¡£Ò»°ã¿É²ÉÓÃÒ»¸öÄ£¿éÒ»¸ö Bundle µÄ·½Ê½£¬²¢ÎªÃ¿Ò»¸ö Bundle
ÔÚ Eclipse »·¾³Öн¨Á¢Ò»¸ö Project À´½øÐпª·¢£¬ÓÉÓÚÄ£¿éÓëÄ£¿éÖ®¼äµÄñîºÏºÜС£¬¸÷¸ö Bundle
Ö®¼ä²¢²»»áÏó´«Í³µÄ¿ª·¢·½Ê½Öеĸ÷Ä£¿éÖ®¼äÄÇÑù´æÔÚ¾À²ø²»ÇåµÄ°üºÍÀàµÄÒýÓùØÏµ£¬Òò´Ë´ó²¿·ÖBundleµÄ¿ª·¢¹¤×÷¿ÉÒÔ²¢ÐнøÐжø²»»á»¥ÏàÓ°Ïì¡£
±¾ÎÄʵÏÖµÄϵͳ¹ÜÀí³ÌÐò£¬¿ÉÒÔÌṩһϵÁеÄϵͳ¹ÜÀí·þÎñÀ´¹ÜÀí¼ÆËã»úÄڵĸ÷ÀàÉ豸¡£Îª¼ò±ãÆð¼û£¬ÎÒÃÇÊ×ÏÈֻʵÏÖÒ»Ïî¹ÜÀí·þÎñ£ºMonitor£¬´ËÏî·þÎñ¿ÉÒÔ¼àÊÓ¼ÆËã»úÄÚ¸÷ÀàÉ豸µÄÔËÐÐ״̬£¬ÎÒÃÇ¿ÉÒÔ½«Õû¸öÈí¼þ»®·ÖΪÈçϵÄһЩBundle:
Services Bundle£ºÔÚOSGiÖУ¬·þÎñÊÇͨ¹ýJavaµÄ½Ó¿ÚÀ´¶¨ÒåµÄ£¬ÎÒÃÇ¿ÉÒ԰Ѷ¨Òå·þÎñµÄJava½Ó¿Ú¼¯ÖÐÒ»¸öServices
BundleÖУ¬²¢ÓÉÕâ¸öBundleÏòÆäËüBundleÌṩ½Ó¿Ú¡£
·þÎñÌṩÕßBundle£ºÊµÏÖServices BundleÌṩµÄ½Ó¿Ú²¢ÏòOSGi¿ò¼Ü×¢²á·þÎñ¡£ÔÚ±¾ÀýÖУ¬ÎÒÃÇҪʵÏÖ¶Ô¸÷ÀàÉ豸µÄ¼àÊÓ£¬¶ÔÓÚÿһ¸öÐèÒª¼àÊÓµÄÉ豸£¬¾ù¿ÉÒÔʵÏÖÒ»¸öµ¥¶ÀµÄ·þÎñÌṩÕßBundleÀ´ÌṩÏàÓ¦µÄ¼àÊÓ¹¦ÄÜ¡£
·þÎñʹÓÃÕßBundle£ºÒýÓÃServices BundleÌṩµÄ½Ó¿ÚÏòOSGi¿ò¼ÜÇëÇóÏàÓ¦µÄ·þÎñ£¬±¾ÀýÖÐÖ÷ҪʵÏÖÒ»¸ö·þÎñʹÓÃÕßBundle£¬ËüÊÇÒ»¸ö¿ØÖÆÌ¨³ÌÐò£¬ÓÃÓÚÖ´ÐÐÏàÓ¦µÄϵͳ¹ÜÀí·þÎñ£¬²¢ÔÚ¿ØÖÆÌ¨ÖÐÏòÓû§ÏÔʾÏàÓ¦µÄϵͳ¹ÜÀíÐÅÏ¢¡£
Õû¸ö³ÌÐòÊÇÓÉOSGi¿ò¼ÜÒÔ¼°ÔËÐÐÓÚOSGi¿ò¼ÜÄÚµÄÒ»ÅúBundles×é³É£¬BundleÖ®¼äµÄÐ×÷¹ØÏµ¼ûÏÂͼ£º

³ÌÐòµÄ×ÜÌå¼Ü¹¹Í¼
ËÄ. ʵÏÖBundle
1. ʵÏÖServices Bundle
н¨Ò»¸öEclipse plugin-in project,½«ÆäÃüÃûΪcom.systemmanagement.services£¬×¢Òâ´´½¨OSGi
Bundle¹¤³Ìʱ£¬Ò»¶¨ÒªÑ¡ÖС°an¡¡OSGi framework¡±×öΪ¹¤³ÌµÄÄ¿±êƽ̨,²¢Ñ¡ÔñEquinox»òstandard£¬ÕâÁ½¸öÑ¡ÏîµÄÇø±ðÊÇ£ºEquinox¶ÔOSGi
¹æ·¶µÚ4°æ½øÐÐÁËһЩÀ©Õ¹£¬Èç¹û¿ª·¢³öÀ´µÄBundleÏ£ÍûÄܹ»ÔÚÆäËüµÄOSGiʵÏÖ¿ò¼ÜÈçOscar£¬KnopflerfishÉÏ˳ÀûÔËÐУ¬´Ë´¦×îºÃÑ¡Ôñstandard¡£Õâ¸öBundleµÄʵÏֺܼòµ¥£¬ËüÎÞÐèʵÏÖBundleActivatorÀֻ࣬Ð趨ÒåÒ»¸ö½Ó¿Ú¼´¿É£º
´úÂëÇåµ¥1: MonitorService.java
package com.systemmanagement.services.monitor;
public interface MonitorService {
public String getMonitorMessage();
} |
ͬʱÎðÍüÔÚ´ËBundleµÄMANIFEST.MFÎļþÖн«ÏàÓ¦µÄpackageµ¼³ö£º
´úÂëÇåµ¥2:MANIFEST.MF
Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Services Plug-in Bundle-SymbolicName: com.systemmanagement.services Bundle-Version: 1.0.0 Bundle-Vendor: cyz Bundle-Localization: plugin Export-Package: com.systemmanagement.services.monitor |
Èç¹û½«À´ÐèÒªÀ©³äеÄϵͳ¹ÜÀí·þÎñ£¬ÐèÔÚ´ËBundleÖÐÔö¼ÓеĽӿڲ¢½«ÆäËùÊôµÄpackageÔÚMANIFEST.MFÎļþÖе¼³ö¡£
2. ʵÏÖ·þÎñÌṩÕßBundle
н¨Ò»¸öEclipse plugin-in project,½«ÆäÃüÃûΪcom.systemmanagement.cpumonitor£¬´ËBundle¸ºÔð¼àÊÓCPU,ÌṩÏàÓ¦µÄ¼àÊÓÐÅÏ¢£¬ËüÐèҪʵÏÖservices
bundleÌṩµÄMonitorService½Ó¿Ú£¬Í¬Ê±ËüÐèÒªÏòOSGi¿ò¼Ü×¢²á·þÎñ£¬Òò´ËÊ×ÏÈÐèÒªÔÚÆäMANIFEST.MFÎļþÖе¼ÈëÏàÓ¦µÄ°ü£º
´úÂëÇåµ¥3:MANIFEST.MF
Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Cpumonitor Plug-in Bundle-SymbolicName: com.systemmanagement.cpumonitor Bundle-Version: 1.0.0 Bundle-Activator: com.systemmanagement.cpumonitor.CpuMonitorActivator Bundle-Vendor: cyz Bundle-Localization: plugin Import-Package: com.systemmanagement.services.monitor, org.osgi.framework;version="1.3.0" |
´ËBundleµÄʵÏÖÖ÷Òª°üÀ¨Á½²¿·Ö¹¤×÷£ºÒ»¸öʵÏÖMonitorServiceµÄÀ࣬ÓÃÓÚÌṩCPUµÄ¼àÊÓÐÅÏ¢(Èç´úÂëÇåµ¥4Ëùʾ)¡£Ò»¸öBundleActivatorÀàÓÃÓÚÔÚBundleÆô¶¯Ê±ÏòOSGi¿ò¼Ü×¢²á·þÎñ£¬ÔÚBundleֹͣʱ½«·þÎñ×¢Ïú(Èç´úÂëÇåµ¥5Ëùʾ)¡£
´úÂëÇåµ¥4:CpuMonitor.java
Package com.systemmanagement.cpumonitor.impl; import com.systemmanagement.services.monitor.MonitorService;
public class CpuMonitor implements MonitorService
{
public String getMonitorMessage() {
return "CPU--ζȣº40¶È£¬µçѹ:1.4v";
}
} |
´úÂëÇåµ¥4½öΪÑÝʾ֮ÓÃ;£¬ÔÚÕæÕý¿ª·¢Ó¦ÓÃʱ£¬¿ÉÒÔÔÚ´Ë´¦ÊµÏÖÕæÊµµÄCPU¼àÊÓ¹¦ÄÜ£¬ÀýÈçÄã¿ÉÒÔʹÓÃJavaµÄJNI»úÖÆÀ´µ÷ÓÃһЩ²Ù×÷ϵͳµ×²ãµÄ»òµÚÈý·½µÄAPI»ñµÃÏà¹ØµÄCPUÐÅÏ¢£¬ÕâЩ¼¼ÊõÓë±¾ÎĵÄÖ÷ÌâOSGi¹ØÏµ²»´ó£¬ÔÚ´ËÂÔ¹ý¡£
´úÂëÇåµ¥5:CpuMonitorActivator.java
Package com.systemmanagement.cpumonitor;
import java.util.Hashtable;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceRegistration;
import com.systemmanagement.cpumonitor.impl.CpuMonitor;
import com.systemmanagement.services.monitor.MonitorService;
public class CpuMonitorActivator implements BundleActivator
{
private BundleContext context=null;
private ServiceRegistration serviceRegistration=null;
public void start(BundleContext context) throws
Exception {
this.context=context;
MonitorService monitor=new CpuMonitor();
Properties properties = new Properties();
properties.put("device", "cpu");
serviceRegistration=this.context.registerService(
MonitorService.class.getName(), monitor, properties);
}
public void stop(BundleContext context) throws
Exception {
serviceRegistration.unregister();
context=null;
}
} |
´úÂëÇåµ¥5ÖÐ×îÖØÒªµÄ¹¦ÄܾÍÊÇÏòOSGi¿ò¼Ü×¢²áÁËÒ»¸öMonitor·þÎñ£¬×¢²á·þÎñʱʹÓÃÁËÒ»¸öPropertiesÈÝÆ÷£¬ÈÝÆ÷ÖеÄkey-value¶Ô˵Ã÷Á˵±Ç°Õâ¸öMonitor·þÎñÕë¶ÔµÄÊÇCPU£¬ÀûÓÃÕâ¸öPropertiesÈÝÆ÷£¬·þÎñʹÓÃÕßBundle¾ÍÄܹ»ÅжÏÒ»¸öMonitor·þÎñËùÕë¶ÔµÄ¾ßÌåÉ豸ÊÇʲô¡£
Õë¶ÔÆäËüÐè¼àÊÓµÄÉ豸ÈçÄÚ´æ£¬Íø¿¨£¬µçÔ´£¬·çÉȵȣ¬ÎÒÃÇ¿ÉÒÔ·Ö±ðʵÏÖÒ»¸öBundleÀ´ÌṩÏàÓ¦µÄ¼àÊÓ·þÎñ£¬ÆäʵÏÖ¹ý³ÌÓëcom.systemmanagement.cpumonitorÕâ¸öBundleÊÇÍêÈ«ÀàËÆµÄ£¬Ôڴ˲»ÔÙ׸Êö¡£
3. ʵÏÖ·þÎñʹÓÃÕßBundle
н¨Ò»¸öEclipse plugin-in project,½«ÆäÃüÃûΪcom.systemmanagement.console£¬´ËBundleÊÇÒ»¸ö¿ØÖÆÌ¨³ÌÐò£¬Ëüͨ¹ýµ÷ÓÃÆäËü·þÎñÌṩÕßBundleÌṩµÄϵͳ¹ÜÀí·þÎñ£¬ÏòÓû§Ìṩϵͳ¹ÜÀíÐÅÏ¢¡£Í¬ÑùÊ×ÏÈÐèÒªÔÚÆäMANIFEST.MFÎļþÖе¼ÈëÏàÓ¦µÄ°ü£º
´úÂëÇåµ¥6Öе¼ÈëµÄ°üorg.osgi.util.trackerÊÇOSGi¿ò¼ÜÌṩµÄ¼àÊÓBundleÌṩµÄ·þÎñÊÇ·ñ¿ÉÓõĻúÖÆ£¬ÏÂÎĽ«»áÏêÊö¡£
´ËBundleµÄʵÏÖÖ÷Òª°üÀ¨Èý²¿·Ö¹¤×÷£ºÒ»¸öServiceTrackerÀ࣬ÓÃÓÚ¼àÊÓ·þÎñÌṩÕßBundle×¢²áµÄ¸÷Ààϵͳ¹ÜÀí·þÎñÊÇ·ñ¿ÉÓ㬲¢¸ù¾Ý·þÎñÊÇ·ñ¿ÉÓ㬲ÉÈ¡ÏàÓ¦µÄ¶¯×÷(Èç´úÂëÇåµ¥7Ëùʾ)¡£Ò»¸ö¿ØÖÆÌ¨Ïß³ÌÀ࣬ÓÃÓÚÖ´Ðи÷Ààϵͳ¹ÜÀí·þÎñ²¢ÏòÓû§ÌṩÏàÓ¦µÄÐÅÏ¢(Èç´úÂëÇåµ¥8Ëùʾ)¡£Ò»¸öBundleActivatorÀàÓÃÓÚÔÚBundleÆô¶¯Ê±Æô¶¯Service
Tracker·þÎñ¼àÊÓϵͳ¹ÜÀí·þÎñÊÇ·ñ¿ÉÓã¬Æô¶¯¿ØÖÆÌ¨Ïß³ÌÀ࿪ʼִÐи÷Ààϵͳ¹ÜÀí·þÎñ²¢ÏÔʾÐÅÏ¢£¬ÔÚBundleֹͣʱֹͣService
Tracker·þÎñºÍ¿ØÖÆÌ¨Ïß³ÌÀà¡£(Èç´úÂëÇåµ¥9Ëùʾ)¡£
´úÂëÇåµ¥7: MonitorServiceTracker.java
package com.systemmanagement.console;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
import org.osgi.util.tracker.ServiceTrackerCustomizer;
import com.systemmanagement.services.monitor.MonitorService;
public class MonitorServiceTracker implements
ServiceTrackerCustomizer {
private ConsoleThread thread;
private BundleContext bc;
public MonitorServiceTracker(BundleContext bc,ConsoleThread
thread) {
this.thread = thread;
this.bc = bc;
}
public Object addingService(ServiceReference reference)
{
MonitorService service = (MonitorService)bc.getService(reference);
thread.addService(service);
return service;
}
public void modifiedService(ServiceReference reference,
Object serviceObject) {
MonitorService service = (MonitorService)bc.getService(reference);
thread.addService(service);
}
public void removedService(ServiceReference reference,
Object serviceObject) {
MonitorService service = (MonitorService)bc.getService(reference);
thread.removeService(service);
}
} |
×¢Ò⣬ÔÚ±¾ÎÄÖÐֻʵÏÖÁËMonitorÒ»Ïî·þÎñ£¬½«À´ÈçÐèÀ©³äµ½Ö§³Ö¶àÏîϵͳ¹ÜÀí·þÎñ£¬¿ÉÒÔΪÿһÏî»òijһÀà·þÎñ¸÷×ÔʵÏÖÒ»¸öServiceTrackerÀàÀ´¼àÊÓÏàÓ¦·þÎñµÄ¿ÉÓÃÐÔ¡£
´úÂëÇåµ¥8:ConsoleThread.java
package com.systemmanagement.console;
import java.util.HashSet;
import java.util.Iterator;
import com.systemmanagement.services.monitor.MonitorService;
public class ConsoleThread extends Thread {
private HashSet<MonitorService> monitorServices=
new HashSet<MonitorService>();
private boolean running = true;
public ConsoleThread(){};
public void addService(MonitorService service){
this.monitorServices.add(service);
}
public void removeService(MonitorService service){
this.monitorServices.remove(service);
}
public void run() {
while (running) {
for(Iterator<MonitorService> it=this.monitorServices.iterator();
it.hasNext();){
MonitorService service=it.next();
System.out.println(service.getMonitorMessage());
}
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
System.out.println("ManagementThread ERROR:
" + e);
}
}
}
public void stopThread() {
this.running = false;
try {
this.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} |
´úÂëÇåµ¥8ÊÇÒ»¸ö¶àÏ̳߳ÌÐò£¬ÎªÑÝʾ֮¼ò±ã£¬ÔÚ´ËÀýÖÐËüÖ»ÊÇÓÃÒ»¸öHashSet³ÖÓе±Ç°¿ÉÓõÄϵͳ¹ÜÀí·þÎñ£¬²¢ÎÞÏÞÑ»·£¬ÒÀ´ÎÖ´Ðи÷Ïîϵͳ¹ÜÀí·þÎñ¡£ÔÚʵ¼ÊÇé¿öÖУ¬ÍêÈ«¿ÉÒÔÓëÓû§½»»¥£¬¸ù¾ÝÓû§µÄÖ¸ÁîÀ´Ö´ÐÐÏàÓ¦µÄϵͳ¹ÜÀí·þÎñ¡£
´úÂëÇåµ¥9:ConsoleActivator.java
package com.systemmanagement.console;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.util.tracker.ServiceTracker;
import org.osgi.util.tracker.ServiceTrackerCustomizer;
import com.systemmanagement.services.monitor.MonitorService;
public class ConsoleActivator implements BundleActivator
{
private BundleContext context = null;
private ServiceTracker tracker = null;
private ConsoleThread thread=new ConsoleThread();
public void start(BundleContext context) throws
Exception {
this.context = context;
tracker = new ServiceTracker(context, MonitorService.class.getName(),
new MonitorServiceTracker(context,thread));
tracker.open();
this.thread.start();
}
public void stop(BundleContext context) throws
Exception {
tracker.close();
this.thread.stopThread();
}
} |
Î壮ÔËÐкͲâÊÔ»ùÓÚOSGiµÄÓ¦ÓóÌÐò
Ò»¸ö»ùÓÚOSGiµÄÓ¦ÓóÌÐòÊÇÓÉOSGi¿ò¼Ü±¾ÉíÒÔ¼°Èô¸É¸öBundle×é³É£¬ÎªÁË¶ÔÆä½øÐÐÔËÐкͲâÊÔ£¬Í¨³£ÐèÒª½«¸÷¸öBundle¡¡ProjectÒ»Ò»´ò°ü³ÉBundle(jarÎļþ)£¬²¢²¿Êðµ½Ò»¸öOSGi¿ò¼ÜÖУ¬»¹ÊDZȽÏÂé·³µÄ¡£ÐÒÔ˵ÄÊÇ£¬EclipseÒѾ¶Ô´ËÌṩÁ˺ܺõÄÖ§³Ö£¬Eclipse±¾ÉíÊÇ»ùÓÚOSGi¿ò¼ÜEquinoxµÄ£¬ÔÚEclipse»·¾³ÖпÉÖ±½Ó½«¸÷Bundle²¿Êðµ½Equinox¿ò¼ÜÖв¢ÔËÐÐÖ®£¬¶Ô¿ª·¢ÕßÀ´ËµÊ®·Ö±ãÀû£¬Æä¾ßÌå²½ÖèÈçÏ£º
ÔÚEclipseÖÐÑ¡ÔñRun-->Run...²Ëµ¥£¬ÔÚµ¯³öµÄRunÅäÖÃÃæ°åµÄ×ó²àÑ¡ÖС°Equinox
OSGi Framework¡±,È»ºóÔÙÑ¡ÔñÆäÉÏ·½µÄ¡°New¡±°´Å¥´´½¨Ò»¸öеÄÔËÐÐÅäÖ㬽«ÆäÃüÃûΪ¡°systemmanagement¡±£¬ÔÙÑ¡ÔñÓÒ²àµÄDeselect
All°´Å¥£¬È»ºóֻѡÔñÎÒÃÇÏëÒªÔËÐеÄ4¸öBundles:°üÀ¨ÎÒÃÇÇ°Ãæ¿ª·¢µÄ3¸öBundleÒÔ¼°OSGi¿ò¼Ü±¾Éíorg.eclipse.osgi,ÆäÖл¹¿ÉÒÔÉèÖø÷¸öBundleµÄStart
Level, Start Level¿ÉÓÃÓÚ¿ØÖƸ÷BundleµÄÆô¶¯Ë³Ðò£¬Start LevelµÍµÄBundle»áÓÅÏÈÆô¶¯£¬ÀýÈçÎÒÃÇ¿ÉÒÔ½«·þÎñÌṩÕßBundle
cpumonitorµÄStart LevelÉèΪ1,¶ø½«·þÎñʹÓÃÕßBundle consoleµÄStart
LevelÉèΪ2£¬ÈçÏÂͼËùʾ£º

BundleµÄÔËÐÐÅäÖÃ
ÔÚEclipse»·¾³ÖеÄÔËÐнá¹ûÈçÏÂͼ£¬ÔÚ¿ØÖÆÌ¨Öл᲻¶ÏµÄÏÔʾһЩϵͳ¹ÜÀíÐÅÏ¢£¬Í¬Ê±Ò²¿ÉÔÚ¿ØÖÆÌ¨ÖÐÔËÐи÷ÖÖOSGi¿ØÖÆÌ¨ÃüÁÈçssÃüÁî¿ÉÓÃÓÚÏÔʾ¸÷BundleµÄ״̬£¬¶ÁÕß¿ÉÒÔͨ¹ýhelpÃüÁîÁ˽â¸ü¶àµÄOSGi¿ØÖÆÌ¨ÃüÁî¡£

ÔÚEclipseÖеÄÔËÐнá¹û
ÎÒÃÇÒ²ÐèÒªÁ˽âÈçºÎÈÃÕâЩBundleÍÑÀëEclipse»·¾³À´ÔËÐУ¬Ê×ÏÈÐèÒª½«¸÷¸öBundle
Project´ò°ü³ÉÒ»¸öBundle(¼´Ò»¸öjarÎļþ)£¬Æä²½ÖèÈçÏ£º
ÔÚEclipseÖ÷²Ëµ¥ÖÐÑ¡File->Export,ÔÙÔÚµ¯³ö´°¿ÚÖÐÑ¡ÔñDeployable
plug-ins and fragments,ÔÙÑ¡ÏÂÒ»²½£¬ÔÚµ¯³ö´°¿ÚÖÐÑ¡ÔñÎÒÃÇÉÏÃæ¿ª·¢µÄÈý¸öBundle
project,²¢Ö¸¶¨BundleµÄÊä³öĿ¼£¬µãFinish¼´¿É£¬ÈçÏÂͼËùʾ£º

µ¼³öBundle
È»ºó¿ÉÒÔÔÚe:\system_management\pluginsĿ¼ÏÂÕÒµ½Èý¸öjarÎļþ£¬ÏÖÔÚÎÒÃÇÐèÒªÒ»¸öOSGi¿ò¼ÜÀ´ÔËÐÐËüÃÇ¡£EquinoxÊÇĿǰ×îÁ÷ÐеÄOSGi¿ò¼Ü£¬Equinox±¾ÉíÒ²±»´ò°ü³ÉÒ»¸öBundle,ÔÚEclipse°²×°Ä¿Â¼µÄpluginsĿ¼Ï¼´¿ÉÕÒµ½Ëü£¬Èçorg.eclipse.osgi_3.2.0.v20060601.jar£¬½«Õâ¸öÎļþ¿½µ½e:\system_managementĿ¼Ï¡£ÔÚÃüÁîÌáʾ·ûϽøÈëe:\system_managementĿ¼Ï£¬ÔËÐÐÈçÏÂÃüÁîÆô¶¯Equinox:
java ¨Cjar org.eclipse.osgi_3.2.0.v20060601.jar ¨Cconsole |
Æô¶¯Ö®ºó»á³öÏÖÒ»¸öOSGi¿ØÖÆÌ¨£¬²¢ÇÒÒѾÆô¶¯Ò»¸ösystem bundle,Õâ¸öbundle¾ÍÊÇOSGi¿ò¼Ü±¾Éí¡£ÏÖÔÚÎÒÃÇ¿ÉÒÔÔÚOSGi¿ØÖÆÌ¨ÖÐÊÖ¹¤°²×°ÎÒÃÇ¿ª·¢µÄÈý¸öBundle,ÈçÏÂͼËùʾ£º

°²×°Bundle
Ëæºó£¬¿ÉÒÔÒÀ´ÎÆô¶¯Èý¸öBundle,ÕâÑùÕû¸öÓ¦ÓþÍÔËÐÐÆðÀ´ÁË£¬ÈçÏÂͼËùʾ£º

ÔËÐÐBundle
Çë±£ÁôÕâ¸öOSGi¿ØÖÆÌ¨²¢ÈÃÓ¦ÓüÌÐøÔËÐУ¬½ÓÏÂÀ´ÎÒÃÇ»¹»áÔÚÕâ¸ö¿ØÖÆÌ¨ÖнøÐÐһЩ²Ù×÷À´ÌåÑéOSGiµÄ¶¯Ì¬ÐÔ¡£
Áù. ÌåÑéOSGiµÄ¶¯Ì¬ÐÔ
³ýÁËÄ£¿é»¯ÒÔ¼°ÃæÏò·þÎñ±à³ÌÖ®Í⣬OSGiµÄÁíÒ»¸öÖØÒªÌØµãÊÇÆä¶¯Ì¬ÐÔ£¬BundleÒÔ¼°BundleÌṩµÄ·þÎñ¿ÉÒÔËæÊ±Ïûʧ»òÕßÖØÐ¼ÓÈ룬¶øÆäËüʹÓ÷þÎñµÄBundle¿ÉÒÔ¸ÐÖª·þÎñÊÇ·ñ¿ÉÓ㬲¢¶¯Ì¬µØ¸Ä±ä×Ô¼ºµÄÐÐΪ¡£Ó¦ÓóÌÐòÔÚÔËÐйý³ÌÖУ¬¿ÉÒÔËæÊ±Ôö¼ÓеÄBundle,Í£Ö¹»òÐ¶ÔØÒÑÓеÄBundle,Èç¹ûÓÐеķþÎñ¼ÓÈë½øÀ´£¬Õâ¸ö·þÎñÒ²ÄÜÁ¢¼´±»ÆäËüBundleʹÓò¢Óɴ˶¯Ì¬µØ¸Ä±äÕû¸öÓ¦ÓóÌÐòµÄÐÐΪ,ÔÚÕû¸ö¶¯Ì¬¸Ä±äµÄ¹ý³ÌÖУ¬OSGi¿ò¼Ü±¾ÉíÊÇÎȶ¨µÄ£¬ÎÞÐèÖØÆô¡£ÒÔÏÂÎÒÃǽ«Í¨¹ýһЩʾÀýÀ´ÌåÑéOSGiµÄ¶¯Ì¬ÐÔ£º
ÎÒÃÇÏÖÔÚÏë¸øÓ¦ÓÃÔö¼ÓÒ»¸ö¼àÊÓÄÚ´æÔËÐÐ״̬µÄ¹¦ÄÜ£¬Ð½¨Ò»¸öEclipse
plugin-in project,½«ÆäÃüÃûΪcom.systemmanagement.memorymonitor,Õâ¸öBundleµÄʵÏÖ¹ý³ÌÓëcom.systemmanagement.cpumonitor»ù±¾ÀàËÆ£¬×îÖ÷ÒªµÄ²»Í¬ÊÇʵÏÖMonitorService·þÎñµÄÄǸöÀ࣬ÈçÒÔÏ´úÂëËùʾ£¬ÆäËü´úÂë¿É²Î¼û±¾ÎÄËù¸½µÄ´úÂëÇåµ¥¡£
´úÂëÇåµ¥10:MemoryMonitor.java
package com.systemmanagement.memorymonitor.impl; import com.systemmanagement.services.monitor.MonitorService;
public class MemoryMonitor implements MonitorService
{
public String getMonitorMessage() {
return "ÄÚ´æ--ÎïÀíÄÚ´æ×ÜÊý£º1G£¬¿ÉÓÃÊý£º300M";
}
} |
ͬÑù£¬½«Õâ¸öBundle export³ÉÒ»¸öjarÎļþµ½e:\system_management\pluginsĿ¼Ï£¬°²×°ÒÔ¼°Æô¶¯Õâ¸öBundle,ÕâʱÎÒÃÇ·¢ÏÖÊä³öµÄϵͳ¹ÜÀíÐÅÏ¢ÂíÉϸıäÁË£¬ÈçÏÂͼËùʾ£º

°²×°ÒÔ¼°Æô¶¯Ò»¸öеÄBundle
ÔÙ¼Ù¶¨ÎÒÃÇÐèÒªÔöÇ¿com.systemmanagement.cpumonitorÕâ¸öBundleµÄ¹¦ÄÜ£¬ÈÃÆäÌṩ¸ü¶àµÄCPUÐÅÏ¢£¬ÎÒÃÇ¿ÉÒÔÐÞ¸ÄÆäÖеÄCpuMonitor.javaÀ࣬ÈçÏÂËùʾ£º
´úÂëÇåµ¥11:CpuMonitor.java
package com.systemmanagement.cpumonitor.impl; import com.systemmanagement.services.monitor.MonitorService;
public class CpuMonitor implements MonitorService
{
public String getMonitorMessage() {
return "CPU--ζȣº40¶È£¬µçѹ:1.4v£¬CPUÕ¼ÓÃÂÊ:20%";
}
} |
ÔÙ½«Õâ¸öBundle export³ÉÒ»¸öjarÎļþ£¬·Åµ½e:\system_management\pluginsĿ¼ÏÂ,²¢ÔÚOSGi¿ØÖÆÌ¨ÖÐʹÓÃupdateÃüÁî¸üÐÂÕâ¸öBundle,ÎÒÃÇ·¢ÏÖÊä³öµÄCPU¼àÊÓÐÅÏ¢ÂíÉϸıäÁË£¬ÈçÏÂͼËùʾ£º

¸üÐÂBundle
¶ÁÕß»¹¿ÉÒÔÔÚOSGi¿ØÖÆÌ¨Öг¢ÊÔʹÓÃstart,stopµÈÃüÁîÆô¶¯ºÍֹͣһЩBundle£¬¹Û²ìÊä³öÐÅÏ¢µÄ¸Ä±ä£¬ÓÉ´ËÀ´ÌåÑéÒ»ÏÂOSGiµÄ¶¯Ì¬ÐÔ¡£
ÓÉÓÚ»ùÓÚOSGiµÄÓ¦ÓóÌÐò¾ßÓи߶ȵÄÄ£¿é»¯ºÍ¶¯Ì¬ÐÔµÄÌØµã£¬Ê¹µÃÒª¶ÔÆä½øÐÐÀ©Õ¹Ò²±äµÃ·Ç³£µÄ·½±ã:Ò»°ãÀ´Ëµ£¬À©Õ¹¾ÍÊÇÔö¼ÓеÄBundle,¶ÔÆäËüBundle»ù±¾ÎÞÓ°Ï죬ÈçÉÏÃæµÄÀý×ÓËùʾ£¬ÎÒÃǺܷ½±ãµØÎªÓ¦ÓóÌÐòÔö¼ÓÁËÐµĹ¦ÄÜ£¬¸üÐÂÁËËüÒÑÓеŦÄÜ£¬¶øÕû¸öÓ¦ÓóÌÐòÉõÖÁ¶¼²»ÐèÒªÖØÆô¡£Equinoxͬʱ»¹½èÓÃÁËEclipseÖеÄÀ©Õ¹µãµÄ»úÖÆ£¬ÀûÓÃÀ©Õ¹µã£¬¿ÉÒÔ·½±ãµÄΪÒÑÓеÄBundleÀ©Õ¹¹¦ÄÜ£¬µ«À©Õ¹µãÕâÒ»Ì×»úÖÆÄ¿Ç°»¹²»ÊÇOSGi¹æ·¶Öж¨ÒåµÄÌØÐÔ£¬½öÊÇEquinoxÕâһʵÏÖÆ½Ì¨À©Õ¹³öÀ´µÄ¹¦ÄÜ£¬Ê¹ÓÃÁËÀ©Õ¹µãµÄBundle½«ÓпÉÄܲ»ÄÜÔÚÆäËüµÄOSGiʵÏÖ¿ò¼ÜÖÐÕý³£ÔËÐУ¬ÕâÐèÒª¿ª·¢ÕßȨºâÑ¡Ôñ¡£
Æß£®·¢²¼Ó¦ÓóÌÐò
ÔÚÉÏÒ»½ÚÖÐÎÒÃÇÔÚOSGi¿ØÖÆÌ¨ÖÐÔËÐÐÎÒÃǵÄϵͳ¹ÜÀí³ÌÐò£¬ÆäÖл¹ÐèÒªÊÖ¹¤install,
start¸÷¸öBundle,ÏÔÈ»ÕâºÜÂé·³£¬²»Ì«ÏóÒ»¸öÕæÕýµÄÓ¦ÓóÌÐò£¬±¾½Ú½«½éÉÜÈçºÎ¹¹Ôì³öÒ»¸öÍêÕûµÄ»ùÓÚOSGiµÄÓ¦ÓóÌÐò¡£
Ê×ÏÈ£¬EquinoxÌṩÁËÔÚÆô¶¯¿ò¼Üʱ×Ô¶¯°²×°BundleÒÔ¼°Æô¶¯BundleµÄ¹¦ÄÜ£¬ÕâÊÇͨ¹ý¶¨Òåconfig.iniÎļþÀ´ÊµÏֵģ¬Ó¦ÓóÌÐòµÄĿ¼½á¹¹ÈçÏ£º
E:\SYSMGT_APP1 ©¦ run.bat ©¦ org.eclipse.osgi_3.2.0.v20060601.jar ©À©¤configuration ©¦ config.ini ©¸©¤plugins com.systemmanagement.console_1.0.0.jar com.systemmanagement.cpumonitor_1.0.0.jar com.systemmanagement.services_1.0.0.jar |
config.iniÎļþµÄÄÚÈÝÈçÏ£º
osgi.bundles=plugins/com.systemmanagement.cpumonitor_1.0.0.jar@1:start, plugins/com.systemmanagement.console_1.0.0.jar@2:start, plugins/com.systemmanagement.services_1.0.0.jar |
ÆäÖеÄ@1,@2ÓÃÓÚÖ¸¶¨BundleµÄStart Level, start±íʾµ±OSGi¿ò¼ÜÆô¶¯ºó¼´×Ô¶¯Æô¶¯´ËBundle¡£¶ørun.batÊÇÒ»¸öÅú´¦Àí³ÌÐò£¬ÆäÄÚÈÝÈçÏ£º
java ¨Cjar org.eclipse.osgi_3.2.0.v20060601.jar -console |
ÏÖÔÚÖ»ÐèÔËÐÐrun.bat¼´¿ÉÔËÐÐÎÒÃǵÄϵͳ¹ÜÀíÓ¦ÓóÌÐòÁË¡£
EclipseÖл¹ÌṩÁËÁ½¸öBundle, org.eclipse.equinox.commonºÍorg.eclipse.update.configurator£¬¿ÉÓÃÓÚ×Ô¶¯·¢ÏֺͰ²×°Ö¸¶¨Ä¿Â¼ÏÂÐÂÔö¼ÓµÄBundle¡£
ÎÒÃÇͬÑù¿ÉÒÔÔÚEclipseµÄpluginsĿ¼ÖÐÕÒµ½ÕâÁ½¸öBundle²¢½«ËüÃÇ¿½µ½E:\SYSMGT_APP1\pluginsĿ¼Ï£¬²¢ÐÞ¸Äconfig.iniÎļþµÄÄÚÈÝÈçÏÂËùʾ£º
osgi.bundles=plugins/org.eclipse.equinox.common_3.2.0.v20060603.jar@1:start, plugins/org.eclipse.update.configurator_3.2.0.v20060605.jar@2:start, plugins/com.systemmanagement.cpumonitor_1.0.0.jar@2:start, plugins/com.systemmanagement.console_1.0.0.jar@3:start |
ÕâÑù£¬µ±org.eclipse.update.configurator
BundleÆô¶¯Ê±£¬Ëü»áÈ¥×Ô¶¯·¢ÏֺͰ²×°pluginsĿ¼ÐÂÔöµÄBundle£¬µ«Ðè×¢Ò⣬ Ëü²¢²»ÄÜ×Ô¶¯Æô¶¯ÕâЩBundle£¬OSGiÐÒéĿǰҲûÓÐÌṩÕâÑùµÄ±ê×¼·þÎñÀ´×Ô¶¯°²×°£¬¹ÜÀíºÍÆô¶¯Bundle£¬
ÎÒÃÇ¿ÉÒÔʹÓÃÈçϵÄһЩ½â¾ö·½°¸À´¸üºÃµØ¹ÜÀíºÍ·Ö·¢Bundle:
ÀûÓÃEclipseµÄUpdate Manager£ºEclipse Update
ManagerÌṩÁËÒ»ÅúAPIÓÃÓÚ¹ÜÀí£¬ÏÂÔØ£¬Éý¼¶£¬°²×°Feature£¬Ò»¸öFeatureÊÇÒ»ÅúBundleµÄ¼¯ºÏ,
ÊÇÏÂÔØºÍ°²×°µÄ×îСµ¥Î»¡£µ«FeatureÊÇEclipse¶¨ÒåµÄ£¬²»ÊÇOSGiÐÒéÖж¨ÒåµÄÌØÐÔ¡£
ʹÓÃFileInstall Bundle,Õâ¸öBundle¿ÉÒÔ¼àÊÓijһ¸öĿ¼£¬Èç¹ûÕâ¸öĿ¼ÖÐÐÂÔö¼ÓÁËBundle,Ëü»á×Ô¶¯½«Æäinstall,Èç¹ûÓÐBundle±»¸üÐÂÁË£¬
Ëü»á×Ô¶¯½«Æäupdate£¬Èç¹ûÓÐBundle´Ó´ËĿ¼±»ÒÆ×ߣ¬Ëü»á×Ô¶¯½«Æäuninstall¡£¿Éµ½ http://www.aqute.biz/Code/FileInstallÏÂÔØÕâ¸öBundle£¬Ëü¿ÉÒÔÔËÐÐÓÚÈκÎOSGi¿ò¼ÜÖС£
ÔÚEquinox·õ»¯Æ÷(incubator)ÖÐÓÐÒ»¸öorg.eclipse.equinox.simpleconfigurator£¬¿ÉÓÃÓÚ¹ÜÀíºÍ¿ØÖÆÒѰ²×°µÄBundle,
°üÀ¨ÉèÖÃÆô¶¯¼¶±ð²¢×Ô¶¯Æô¶¯ËüÃÇ¡£¿É·ÃÎÊhttp://www.eclipse.org/equinox/incubator²¢µ½ÆäCVS¿âÖÐÏÂÔØ
°Ë. С½á
±¾ÎĽéÉÜÁË»ùÓÚOSGi¿ª·¢Ò»¸öÓ¦ÓóÌÐòµÄÍêÕûÁ÷³Ì£¬°üÀ¨Ä£¿é»®·Ö£¬BundleµÄÉè¼ÆÓ뿪·¢£¬²¿ÊðÓë²âÊÔ£¬·¢²¼Ó¦ÓóÌÐòµÈ£¬²¢ÑÝʾÁË»ùÓÚOSGi±à³ÌËù¾ßÓеÄÄ£¿é»¯£¬ÃæÏò·þÎñ£¬¶¯Ì¬ÐÔ£¬Ò×À©Õ¹µÈÓŵ㡣»ùÓÚ×é¼þ»ò¹¹¼þ±à³ÌÊÇѧÊõ½çÌáÁ˶àÄêµÄ˼Ï룬±ÊÕßÈÏΪOSGiÊÇÒ»¸ö±È½Ï³¹µ×µØÌåÏÖÕâÖÖ˼ÏëµÄ±à³ÌÄ£ÐÍ£¬»ùÓÚOSGi±à³Ì½«´øÀ´Èí¼þÉè¼ÆÒÔ¼°¿ª·¢·½Ê½µÄ¸Ä±ä²¢ÓÉ´Ë´øÀ´Èí¼þÉú²úЧÂʵļ«´óÌáÉý¡£
|