Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
¼Ü¹¹Éè¼Æ¡ª¡ªOSGI¹æ·¶
 
×÷Õߣºohzyo
  5757  次浏览      30
 2021-4-1 
 
±à¼­ÍƼö:
±¾ÎÄÖ÷Òª½éÉÜÁËOSGIÊÇʲô£¿OSGI¿ò¼ÜÔ­Àí£¬Ä£¿é²ã£¬ÉúÃüÖÜÆÚ²ã£¬·þÎñ²ãµÈÏà¹ØÄÚÈÝ¡£
±¾ÎÄÀ´×ÔÓÚ51cto£¬ÓÉ»ðÁú¹ûÈí¼þAnna±à¼­¡¢ÍƼö¡£

Ò»¡¢OSGI¼ò½é

1¡¢OSGI¼ò½é

OSGI£¨Open Service Gateway Initiative£©£¬¼´¿ª·Å·þÎñÍø¹ØÐ­Ò飬ÊÇÃæÏòJavaµÄ¶¯Ì¬Ä£ÐÍϵͳ¡£

OSGIÊÇÖ¸ÓÉOSGI Alliance×éÖ¯ÖÆ¶¨µÄJavaÄ£¿é»¯¹æ·¶£¬OSGI¹æ·¶µÄºËÐIJ¿·ÖÊÇÒ»¸ö¿ò¼Ü£¬ÆäÖж¨ÒåÁËÓ¦ÓóÌÐòµÄÉúÃüÖÜÆÚģʽºÍ·þÎñ×¢²á¡£»ùÓÚOSGI¿ò¼Ü¶¨ÒåÁË´óÁ¿µÄOSGI·þÎñ£ºÈÕÖ¾¡¢ÅäÖùÜÀí£¬HTTP·þÎñ£¨ÔËÐÐServlet£©¡¢XML½âÎö¡¢É豸·ÃÎÊ¡¢Èí¼þ°ü¹ÜÀí¡¢Ðí¿É¹ÜÀí¡¢Óû§¹ÜÀí¡¢IOÁ¬½Ó¡¢JiniºÍUPnPµÈ¡£

OSGIÖÐÎÄÉçÇø£ºhttp://www.osgi.com.cn/

OSGI¹Ù·½ÍøÕ¾£ºhttps://www.osgi.org/

OSGI¿ò¼ÜʵÏÖÁËÒ»¸öÓÅÑÅ¡¢ÍêÕûºÍ¶¯Ì¬µÄ×é¼þÄ£ÐÍ£¬×é¼þ£¨bundle£©ÎÞÐèÖØÐÂÒýµ¼¿ÉÒÔ±»Ô¶³Ì°²×°¡¢Æô¶¯¡¢Éý¼¶ºÍÐ¶ÔØ¡£

OSGI·þÎñƽ̨ÌṩÔÚ¶àÖÖÍøÂçÉ豸ÉÏÎÞÐèÖØÆôµÄ¶¯Ì¬¸Ä±ä¹¹ÔìµÄ¹¦ÄÜ¡£

ΪÁË×îС»¯ñîºÏ¶ÈºÍ´ÙʹñîºÏ¶È¿É¹ÜÀí£¬OSGI¼¼ÊõÌṩÁËÒ»ÖÖÃæÏò·þÎñµÄ¼Ü¹¹£¬Ê¹×é¼þ¶¯Ì¬µØ·¢ÏÖ¶Ô·½¡£

OSGIÁªÃËÒѾ­¿ª·¢ÁËÈçHTTP·þÎñÆ÷¡¢ÅäÖá¢ÈÕÖ¾¡¢°²È«¡¢Óû§¹ÜÀí¡¢XMLµÈºÜ¶à¹«¹²¹¦Äܱê×¼×é¼þ½Ó¿Ú¡£±ê×¼×é¼þµÄ¼æÈÝÐÔ²å¼þʵÏÖ¿ÉÒÔ´Ó²»Í¬¼ÆËã»ú·þÎñÌṩÉ̵õ½¡£

OSGiµÄÖ÷ÒªÖ°Ôð¾ÍÊÇΪÁËÈÿª·¢ÕßÄܹ»´´½¨¶¯Ì¬»¯¡¢Ä£¿é»¯µÄJavaϵͳ¡£

2¡¢OSGI¹æ·¶µÄ×é³É

OSGI¹æ·¶°üÀ¨ÒÔÏÂ×ӹ淶£º

A¡¢Framework¹æ·¶(OSGIºËÐÄ£¬Ìṩһ¸ö°²È«µÄ¿É¹ÜÀíµÄJava FrameworkÀ´²¿Êð¿ÉÀ©Õ¹µÄJava·þÎñ)

B¡¢Package Admin Service¹æ·¶£¨¹ÜÀí²»Í¬µÄBundleÖ®¼äµÄÒýÓùØÏµ¡£µ±Bundle¸üлòÕßÐ¶ÔØÊ±ÅжÏÊÇ·ñÓÐÆäËüµÄ·þÎñÕýÔÚʹÓõ±Ç°µÄBundle£©

C¡¢Start Level¹æ·¶(¶¨ÒåÁËÆô¶¯ºÍÍ£Ö¹Ò»¸öOSGi Service Platformʱ£¬²»Í¬µÄBundlesµÄÆô¶¯»òÕßÍ£Ö¹µÄÏȺó˳Ðò)

D¡¢Permission Admin Service¹æ·¶£¨BundleÊÇ·ñÐí¿ÉÖ´ÐÐÁíÍâµÄBundleµÄ´úÂ룩

E¡¢URL Handlers Service¹æ·¶(ÔõÑù×¢²áURL Schema£¬ÈçºÎ½«java.io.InputStream¶ÔÏóת»»ÎªÌض¨µÄJava¶ÔÏó)

F¡¢Log Service¹æ·¶

G¡¢Configuration Admin Service¹æ·¶

H¡¢Device Access Specification

I¡¢User Admin Service Specification

J¡¢IO Connector Service Specification

K¡¢Http Service Specification

L¡¢Preference Service Specification

M¡¢Wire Admin Service Specification

N¡¢XML Parser Service Specification

O¡¢Metatype Specification

P¡¢Service Tracker Specification

Q¡¢Measurment and State Specification

R¡¢Position Specification

S¡¢Execution Environment Specfication

3¡¢OSGIµÄÓŵã

OSGIµÄÓÅÊÆÖ÷Òª±íÏÖÔÚÒÔϼ¸¸ö·½Ã棺

A¡¢ÈȲå°ÎµÄ²å¼þÌåϵ½á¹¹

»ùÓÚOSGIµÄÓ¦ÓóÌÐò¿É¶¯Ì¬¸ü¸ÄÔËÐÐ״̬ºÍÐÐΪ¡£ÔÚOSGI¿ò¼ÜÖУ¬Ã¿Ò»¸ö×é¼þ¶¼ÊÇ¿ÉÈȲå°ÎµÄ£¬Òò´Ë£¬¶ÔÄ³Ò»ÌØ¶¨µÄ×é¼þµÄÐ޸IJ¢²»»áÓ°Ïìµ½ÈÝÆ÷ÖеÄËùÓÐ×é¼þ£¬ÔËÐÐÖеĴ󲿷Ö×é¼þÒÀ¾ÉÄÜÕÕ³£¹¤×÷£¬²¿ÊðÒ»¸öеÄBundleʱҲ²»ÐèÒªÖØÐÂÆô¶¯·þÎñÆ÷¡£

B¡¢¿É¸´ÓÃÐÔ

OSGI¿ò¼Ü±¾Éí¿É¸´ÓÃÐÔ¼«Ç¿£¬Ò×ÓÚ¹¹½¨ÕæÕýÃæÏò½Ó¿ÚµÄ³ÌÐò¼Ü¹¹£¬Ã¿Ò»¸ö×é¼þ£¨Bundle£©¶¼ÊÇÒ»¸ö¶ÀÁ¢¿É¸´Óõĵ¥Ôª¡£»ùÓÚOSGI¶ÀÌØµÄÌØÐÔ£¬½øÐÐÆóÒµ¿ª·¢µÄʱºò£¬¶ÔÓÚеĿª·¢£¬¿ÉÒÔ´ÓÆóÒµµÄ×é¼þ¿âÖо«¼ò³ö¿É¸´ÓõÄÄ£¿é£¬Á¿Éí¶¨×öеÄ×é¼þ£¬×î´óÏ޶ȵÄÀûÓÃÁËÒÑÓеÄ×ÊÔ´£¬½µµÍ¿ª·¢³É±¾£¬ÔöÇ¿ÆóÒµµÄ¾ºÕùÁ¦¡£

C¡¢¸ßЧÐÔ£¬Îȶ¨ÐÔ

OSGIÊÇÒ»¸öÎȶ¨¶ø¸ßЧµÄϵͳ¡£OSGI×÷Ϊһ¸ö΢ºËµÄϵͳ£¬ÆäºËÐÄÖ»ÓÐΪÊý²»¶àµÄ¼¸¸öJAR°ü¡£»ùÓÚOSGI¿ò¼ÜµÄϵͳµÄµÍñîºÏÐÔ£¬Æä½á¹¹µÄÓÅÊÆÐÔ±£Ö¤¾ßÌåµÄijһ¸ö×é¼þ²»ÖÁÓÚÓ°Ï쵽ȫ¾Ö£¬¸ü²»»áÒòΪ¾Ö²¿µÄ´íÎóµ¼ÖÂÈ«¾ÖϵͳµÄ±ÀÀ£¡£

4¡¢OSGIµÄȱµã

A¡¢Ã¿¸ö×é¼þ£¨Bundle£©¶¼Óɵ¥¶ÀµÄÀà¼ÓÔØÆ÷¼ÓÔØ£¬ÓëһЩJava EEÏîÄ¿ÖÐʹÓñȽ϶àµÄ¿ò¼ÜÕûºÏ±È½ÏÀ§ÄÑ£¬ÈçSpring MVC¡¢Struts2µÈ¡£

B¡¢Ä¿Ç°OSGI¿ò¼ÜÌṩµÄ¹ÜÀí¶Ë²»¹»Ç¿´ó£¬ÏÖÔڵĹÜÀí¶ËÖнöÌṩÁË»ù±¾µÄ×é¼þ״̬¹ÜÀí¡¢ÈÕÖ¾²é¿´µÈ¹¦ÄÜ£¬Ïñ¶¯Ì¬ÐÞ¸Äϵͳ¼¶±ðµÄÅäÖÃ(config.ini)¡¢¶¯Ì¬ÐÞ¸Ä×é¼þµÄÅäÖÃ(Manifest.mf)¡¢Æô¶¯¼¶±ðµÈ¹¦Äܶ¼ÉÐδÌṩ¡£

C¡¢²ÉÓÃOSGI×÷Ϊ¹æ·¶µÄÄ£¿é¿ª·¢¡¢²¿Êð·½Ê½×ÔÈ»¸øÏÖÓпª·¢ÈËÔ±Ìá³öÁËеÄÒªÇó£¬ÐèҪѧϰеĻùÓÚOSGIµÄ¿ª·¢·½Ê½¡£

¶þ¡¢OSGI¿ò¼ÜÔ­Àí

1¡¢OSGI¿ò¼Ü¼ò½é

OSGI¿ò¼Ü´Ó¸ÅÄîÉÏ¿ÉÒÔ·ÖΪÈý²ã£ºÄ£¿é²ã¡¢ÉúÃüÖÜÆÚ²ãºÍ·þÎñ²ã¡£

Module Layer£ºÄ£¿é²ãÖ÷񻃾¼°°ü¼°¹²ÏíµÄ´úÂ룻

Lifecycle Layer£ºÉúÃüÖÜÆÚ²ãÖ÷񻃾¼°×é¼þµÄÔËÐÐʱÉúÃüÖÜÆÚ¹ÜÀí£»

Service Layer£º·þÎñ²ãÖ÷񻃾¼°Ä£¿éÖ®¼äµÄ½»»¥ºÍͨÐÅ¡£

OSGI FrameworkÊÇOSGI Service Platform¹æ·¶µÄºËÐÄ×é³É²¿·Ö£¬ÌṩÁËÒ»¸öͨÓõġ¢°²È«¿É¹ÜÀíµÄJava framework¡£Í¨¹ýOSGI Framework¿ÉÒÔÖ§³ÖÒ»ÖÖ½Ð×ö×é¼þµÄService applicationµÄ²¿ÊðºÍÀ©Õ¹¡£

OSGI¼æÈÝÉ豸¿ÉÒÔÏÂÔØ²¢ÇÒ°²×°OSGI×é¼þ£¬Ò²¿ÉÒ»µ©²»ÔÙÐèÒªµÄʱºòɾ³ý¡£×é¼þ°²×°ºó»á×¢²áÒ»¶¨ÊýÁ¿µÄServices£¬²¢±»ÓÉͬһ¸öFrameworkÏÂµÄÆäËü×é¼þʹÓá£

ÔÚÒ»¸ö¶¯Ì¬À©Õ¹µÄµÄOSGI»·¾³ÖУ¬Framework¹ÜÀí×é¼þµÄ°²×°ºÍ¸üУ¬Í¬Ê±Ò²¹ÜÀí×é¼þºÍServicesÖ®¼äµÄÒÀÀµ¹ØÏµ¡£

FrameworkÌṩ¸ø×é¼þ¿ª·¢Õß±ØÐëµÄ×ÊÔ´À´ÔÚJavaƽ̨ÉÏ¿ª·¢£¬Îª¿ª·¢µÄ×é¼þÌṩÁË´úÂ붯̬¼ÓÔØµÄ¹¦ÄÜ, ҲʹµÃ¿ª·¢Õß¿ª·¢¡¢²¿ÊðÒ»¸ö´ó¹æÄ£µÄServices±äµÄºÜÈÝÒס£

Æä´Î£¬FrameworkΪJava×é¼þ¿ª·¢ÕßÌṩÁ˼òÃ÷Ò»Öµıà³ÌÄ£ÐÍ£¬¼ò»¯ÁË¿ª·¢²¿ÊðµÄ¸´ÔÓÐÔ¡£±à³ÌÄ£ÐÍÔÊÐí¿ª·¢Õß½«×Ô¼ºµÄ½Ó¿Ú¹æ·¶°ó¶¨µ½OSGI»·¾³ÖеÄService¡£

Ò»¸öÒ»Öµıà³ÌÄ£ÐͰïÖú¿ª·¢Õß¿ÉÒÔÓ¦¸¶Ò»Ð©¿É¹À¼ÆµÄΣ¼±´íÎó¡£Framework½«»áÔËÐÐÔÚ²»Í¬µÄÓ²¼þ»·¾³ÉÏ£¬µ«Ò»ÖµĽӿÚÈ·±£×é¼þ¿ÉÒÔÔËÐÐÔÚÒ»ÖµķþÎñ½Ó¿ÚÉÏ¡£

2¡¢Ä£¿é²ã

Ä£¿é²ãÊÇOSGi¿ò¼ÜÖÐ×î»ù´¡µÄ²¿·Ö¡£

OSGiµÄÄ£¿é»¯£¬ÊÇͨ¹ýΪJar°üÌí¼Ómetadata À´¶¨ÒåÄÄЩÀà¸Ã±©Â¶£¬ÄÄЩÀà¸ÃÒþ²Ø£¬Æä¿ØÖƵ¥Ôª½Ð×ö×é¼þBundle£¨jar°ü£©¡£

BundleÊÇÒÔjar°üÐÎʽ´æÔÚµÄÒ»¸öÄ£¿é»¯ÎïÀíµ¥Ôª£¬°üº¬´úÂë¡¢×ÊÔ´ÎļþºÍÔªÊý¾Ý£¨metadata£©£¬²¢ÇÒjar°üµÄÎïÀí±ß½çÒ²ÊÇÔËÐÐʱÂß¼­Ä£¿éµÄ·â×°±ß½ç¡£

BundleÊÇOSGiÖеĻù±¾×é¼þ£¬Æä±íÏÖÐÎʽÈÔȻΪJava¸ÅÄîÖд«Í³µÄJar°ü¡£

ͨ¹ýMETA-INFĿ¼ÏµÄMANIFEST.MFÎļþ¶ÔÆäÓèÒÔ½øÒ»²½µÄ¶¨Òå¡£

ͨ³£Ò»¸öMANIFEST.MFÎļþµÄÄÚÈÝÈçÏ£º

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Util
Bundle-SymbolicName: com.ibm.director.la.util
Bundle-Version: 1.0.0
Bundle-RequiredExecutionEnvironment: J2SE-1.5
Import-Package: org.osgi.framework;version="1.3.0"
Export-Package: com.ibm.director.la.util;uses:="org.osgi.framework"
Bundle-ClassPath: lib/junit.jar,

MANIFEST.MFÎļþ´æ´¢µÄʵ¼ÊÉÏÊÇBundleµÄÔªÊý¾Ý¡£

ÔªÊý¾ÝµÄÄÚÈÝ¿ÉÒÔ¾«È·µÄ¶¨ÒåBundleµÄ¸÷ÖÖÌØÕ÷£¬Í¬Ê±ÄܸüºÃµÄ¶ÔBundle½øÐбêʶͬʱ°ïÖúÓû§¶ÔBundle½øÐÐÀí½â¡£

3¡¢ÉúÃüÖÜÆÚ²ã

ÉúÃüÖÜÆÚ²ãÔÚOSGi¿ò¼ÜÖÐÊôÓÚÄ£¿é²ãÉÏÃæµÄÒ»²ã£¬ÉúÃüÖÜÆÚ²ãµÄÔË×÷Êǽ¨Á¢ÔÚÄ£¿é²ãµÄ¹¦ÄÜÖ®Éϵġ£

ÉúÃüÖÜÆÚ²ãµÄÖ÷Òª¹¦ÄÜÊÇ¿ØÖƶ¯Ì¬°²×°¡¢¿ªÆô¡¢¹Ø±Õ¡¢¸üкÍÐ¶ÔØ×é¼þ¡£

ÉúÃüÖÜÆÚ²ãÄܹ»´ÓÍⲿ¹ÜÀíÓ¦ÓûòÕß½¨Á¢Äܹ»×ÔÎÒ¹ÜÀíµÄÓ¦Ó㨻òÕßÁ½ÕߵĽáºÏ£©£¬²¢ÇÒ¸øÁËÓ¦Óñ¾ÉíºÜ´óµÄ¶¯Ì¬ÐÔ¡£

BundleµÄʹÓÃÐèÒªÉúÃüÖÜÆÚ²ãµÄAPIÓëOSGi¿ò¼ÜµÄÉúÃüÖÜÆÚ²ã½øÐн»»¥¡£

4¡¢·þÎñ²ã

OSGi·þÎñÊÇ×¢²áµ½OSGi¿ò¼ÜÖеÄÒ»¸öJava¶ÔÏó¡£×¢²áµÄʱºò¿ÉÒÔÉèÖÃServiceµÄÊôÐÔ¡£¶øÔÚ»ñÈ¡ServiceµÄʱºò¿ÉÒÔ¸ù¾ÝÊôÐÔ½øÐйýÂË¡£

Bundle¿ÉÒÔͨ¹ýBundleµÄÉÏÏÂÎÄÈ¥×¢²áService»òÈ¥²éѯService¡£

Èý¡¢Ä£¿é²ã

1¡¢Ä£¿é»¯¼ò½é

Ä£¿é»¯Êǽ«Ò»¸ö´óÐÍϵͳ·Ö½âΪ¶à¸ö½ÏСµÄ»¥ÏàЭ×÷µÄÂß¼­µ¥Ôª£¬Í¨¹ýÇ¿ÖÆÉ趨ģ¿éÖ®¼äµÄÂß¼­±ß½çÀ´¸ÄÉÆÏµÍ³µÄά»¤ÐԺͷâ×°ÐÔ¡£

Ä£¿é£¨module£©¶¨ÒåÁËÒ»¸öÂß¼­±ß½ç£¬Ä£¿é±¾Éí¾«È·µØ¿ØÖÆÄÄЩÀàÊÇÍêÈ«±»·â×°ÆðÀ´µÄ£¬¶øÄÄЩÀàÐèÒª±©Â¶³öÀ´×÷ΪÍⲿʹÓ᣿ª¿ª·¢Õß¿ÉÒÔÇáËɵؽ«ÊµÏÖÆÁ±ÎÔÚÄ£¿éµÄÄÚ²¿£¬½«¹«¹²API±©Â¶ÔÚÍⲿ¡£

2¡¢OSGIÄ£¿é»¯ÓëÃæÏò¶ÔÏó

ÃæÏò¶ÔÏó±à³ÌÖв»»á°ÑËùÓй¦Äܶ¼Èûµ½Í¬Ò»¸öÀà¡£ÃæÏò¶ÔÏó±à³Ì´ÓÎÊÌâÓòÖз¢ÏÖ¶à¸öÊÂÎÿ¸öÊÂÎ︺Ôð²»Í¬µÄ¹¦ÄÜ£¬¾¡Á¿×öµ½¸ßÄھۺ͵ÍñîºÏ¡£ÃæÏò¶ÔÏóµÄÄ£¿é»¯Á£¶ÈÔÚÀ༶±ðÉÏ¡£

OSGiµÄÄ£¿é»¯ÊÇͨ¹ýΪJAR°üÌí¼ÓmetadataÀ´¶¨ÒåÄÄЩÀàÓ¦¸Ã±©Â¶ÄÄЩÀàÓÖÒþ²ØÔÚ°üÖУ¬Æä¿ØÖƿɼûÐÔµÄÁ£¶ÈÊÇÔÚ×é¼þ£¨JAR°ü£©²ãÃæÉϵġ£

OSGIÄ£¿é»¯ºÍÃæÏò¶ÔÏó˼ÏëËù´øÀ´µÄÄÜÁ¦¶¼ÊÇͨ¹ý¿ØÖƿɼûÐԺͿÉÓÃÐÔÀ´±£Ö¤¸ßÄھۺ͵ÍñîºÏµÄ£¬µ«Á£¶È²»Í¬£¬Ò»¸öÊÇ×é¼þ²ãÃæÉÏ£¬Ò»¸öÊǶÔÏó²ãÃæÉÏ¡£

3¡¢JAVAÔÚÄ£¿é»¯·½ÃæµÄ¾ÖÏÞ

A¡¢µ×²ã´úÂëµÄ¿É¼ûÐÔ¿ØÖÆ

JavaÌṩÁËprivate¡¢public¡¢protectedºÍpackage private£¨ÎÞÐÞÊηû£©ËÄÖÖ·ÃÎÊ¿ØÖƼ¶±ð£¬ÌṩÁ˵ײãµÄOOÊý¾Ý·â×°ÌØÐÔ¡£Packege¾ßÓзָî´úÂëµÄ×÷Ó㬵«Èç¹û°üÖеĴúÂëÒª¶Ô°üÍâ¿É¼û£¬±ØÐëÉèÖÃΪpublic£¨protected£¬Ê¹Óü̳У©¡£

org.serc.helloworld.Hello.java£º¶¨ÒåÁËÒ»¸ö½Ó¿Ú

package org.serc.helloworld;

public interface Hello {
void sayHello();
}

org.serc.helloworld.impl.HelloImpl.java£ºÊµÏÖÁËHello½Ó¿Ú

package org.serc.helloworld.impl;

import org.serc.helloworld.Hello;

public class HelloImpl implements Hello{
final String helloString;

public HelloImpl(String helloString){
this.helloString = helloString;
}

public void sayHello(){
System.out.println(this.helloString);
}
}

org.serc.helloworld.main.Main.javaÎļþ£º

package org.serc.helloworld.main;

import org.serc.helloworld.Hello;
import org.serc.helloworld.HelloImpl;

public class Main{
final String helloString;

public static void main(String[] args){
Hello hello = new HelloImpl(¡°Hello,SERC!¡±);
hello.sayHello();
}

Èý¸öÎļþ·Ö±ðÔÚ²»Í¬µÄ°üÖС£HelloImplʵÏÖϸ½Ú²»Ó¦¸Ã±©Â¶¸øÆäËü°ü£¬µ«´ÓMain.javaµÄmain·½·¨ÖпÉÒÔ¿´³ö£¬ÎªÁË´´½¨HelloµÄʵÀý£¬±ØÐëÒýÈëHelloImplÀ࣬µ«ÊÇHelloImpl×÷Ϊ½Ó¿ÚµÄʵÏÖϸ½Ú£¬²»Ó¦¸Ã±©Â¶¸øÊ¹ÓÃÕߣ¬Î¥·´ÁË·â×°µÄÔ­Ôò¡£

Èç¹û²»ÏëÈÃHelloImpl±©Â¶³öÀ´£¬ÐèÒª×ö¶îÍâµÄ¹¤×÷±£Ö¤¼ÈÒþ²ØÁËʵÏÖϸ½Ú£¬ÓÖÄܼòµ¥µÄ´´½¨Ò»¸öʵÏÖÁËHello½Ó¿ÚµÄʵÀý¡£¿ÉÒÔͨ¹ý¶àÖÖ·½·¨£¨±ÈÈ繤³§Ä£Ê½£©À´ÊµÏÖ£¬µ«Ôö¼ÓÁËÓëÓ¦Óñ¾Éí¹¦ÄÜÎ޹صĶàÓ๤×÷£¬ÊÇJavaµÄ¾ÖÏÞ¡£

B¡¢classpathµÄ¾ÖÏÞ

ÔÚclasspathÖмÓÈëjar°üµÄʱºò£¬Ö»¸ø³öÎļþ·¾¶£¬¶øjar°üµÄ°æ±¾¡¢Ò»ÖÂÐÔ¡¢ÒÀÀµÐÔ£¬ÎÞ·¨ÔÚclasspathÖÐÃ÷È·µÄÉèÖûòÊÇ´ÓclasspathÖп´³öÏàÓ¦ÊôÐÔ¡£

classpathÖеÄjar°üÊǰ´Ðò¼ÓÔØµÄ£¬ÀýÈ磺

classpath£½/servlet2.2/servlet.jar£»/servlet2.3/servlet.jar£¬ ÔÚʵ¼ÊÓ¦ÓõĹý³ÌÖУ¬JavaʹÓÃservlet2.2£¬¶ø²»ÊÇservlet2.3¡£Èç¹ûÔÚ´óÐÍϵͳÖÐÍŶӷֿª¿ª·¢Ê±£¬¸÷Óø÷µÄservlet°ü£¬²¢ÇÒ°æ±¾ºÅ²»Ò»Ñù£¬ÔÚ×îºó½«¿ª·¢½á¹ûºÏ²¢µÄʱºò£¬ÓõÄÊÇÄĸö°æ±¾µÄservlet°ü¾ÍºÜÄѸãÇå³þ¡£

¼´Ê¹classpathÄÜ×¢Òâµ½°æ±¾µÄÎÊÌ⣬Ҳû·¨¾«È·Ö¸³öÒÀÀµ¡£¿ª·¢ÕßÐèÒª¸ù¾ÝÌáʾÐÅÏ¢Ôö¼ÓÒÀÀµ°ü£¬Ö±µ½ÐéÄâ»ú²»ÔËÐе½È±°üÒ쳣Ϊֹ¡£

C¡¢OSGI¶ÔJAVA¾ÖÏ޵ĸÄÉÆ

OSGiÖкܺýâ¾öÁËJAVAµÄ¾ÖÏÞÐÔ£º

°üµÄ¿É¼ûÐÔ£ºOSGiͨ¹ýÒýÈë°üµÄ¿É¼ûÐÔ»úÖÆ£¬Äܹ»ÍêÈ«¿ØÖÆÒ»¸ö°üÖеĴúÂë¶ÔÄÄЩģ¿é¿É¼û£¬¶ø²»½ö½ö¾ÖÏÞÓÚÎÞ²î±ðµÄ¿É¼ûÐÔ£¬´Ó¶øÍêÉÆÁËJavaµÄ´úÂë·ÃÎÊ¿ØÖÆ»úÖÆ¡£

°üµÄ°æ±¾£ºOSGiͨ¹ýΪ°üÔö¼Ó°æ±¾ÐÅÏ¢£¬¿ÉÒÔ¾«È·¿ØÖÆ´úÂëµÄÒÀÀµ£¬±£Ö¤´úÂëµÄ°æ±¾Ò»ÖÂÐÔ£¬ÃÖ²¹ÁËclasspathµÄȱµã¡£

4¡¢×é¼þBundle¼ò½é

×é¼þ£¨bundle£©ÊÇÒÔjar°üÐÎʽ´æÔÚµÄÒ»¸öÄ£¿é»¯ÎïÀíµ¥Ôª£¬°üº¬ÁË´úÂë¡¢×ÊÔ´ÎļþºÍÔªÊý¾Ý£¨metadata£©£¬²¢ÇÒjar°üµÄÎïÀí±ß½çÒ²ÊÇÔËÐÐʱÂß¼­Ä£¿éµÄ·â×°±ß½ç¡£

ÔÚ±ê×¼µÄjar°üµÄmanifestÎļþÖÐÌí¼ÓһЩ×é¼þ£¨bundle£©µÄÄ£¿é»¯ÌØÕ÷£¨metadata£©ºó£¬jar°ü¾Í±ä³ÉÁËÒ»¸öbundle¡£

bundleºÍÆÕͨjar°ü×î´óµÄÇø±ð¾ÍÔÚÓÚÔªÊý¾Ý¡£

BundleÔªÊý¾ÝµÄÄ¿µÄÔÚÓÚ׼ȷÃèÊöÄ£¿é»¯Ïà¹ØµÄbundleÌØÕ÷£¬ÈÃOSGi¿ò¼Ü¶Ôbundle½øÐи÷ÖÖ´¦Àí¹¤×÷£¨±ÈÈçÒÀÀµ½âÎö£¬Ç¿ÖÆ·â×°µÈ£©£¬ÔªÊý¾ÝÖ÷ÒªÓÐÈý²¿·Ö£º

A¡¢¿É¶ÁÐÅÏ¢£¨¿ÉÑ¡£©

OSGi±ê×¼¶¨ÒåÁ˼¸¸öÔªÊý¾ÝÌõÄ¿°ïÖú¸üºÃµØÀí½âºÍʹÓÃbundle£¬µ«ËùÓеÄÌõÄ¿¶¼²»ÊDZØÐëµÄ£¬²¢ÇÒ²»¶ÔÄ£¿é»¯ÌØÐÔ²úÉúÈκεÄÓ°Ï죬OSGi¿ò¼Ü»áÍêÈ«ÎÞÊӿɶÁÐÅÏ¢¡£

Bundle-Name: SERC Helloworld
Bundle-Vendor: GR, SERC
Bundle-DocURL: http://elevenframework.org
Bundle-Category: example
Bundle-Copyright: SERC

B¡¢bundle±êʶ·û£¨±ØÐ룩

bundle±êʶ·ûÓÃÓÚΨһµÄ±êʶһ¸öbundle¡£

ÔçÆÚµÄOSGi±ê×¼Öв¢Ã»ÓÐÌṩ±êʶһ¸öÒÑÖªbundleµÄ·½·¨£¬Ö±µ½OSGi R4±ê×¼£¬¡°Î¨Ò»bundle±êʶ·û¡±±»Ìá³öÀ´¡£ÎªÁËÏòºó¼æÈÝ£¬Bundle-Name²»ÄÜÓÃÀ´×÷Ϊ±êʶ·û£¬·ñÔò¾Í»áÔö¼Óά»¤Ïòºó¼æÈݵŤ×÷£¬ËùÒÔʹÓÃеÄmanifestÊôÐÔBundle-SymbolicName¡£

Bundle-SymbolicName: org.serc.helloworld

Bundle-NameÊǸøÓû§¶ÁµÄ£¬¶øBundle-SymbolicNameÊǸøOSGi¿ò¼Ü¶ÁµÄ£¬ÈÃOSGi¿ò¼ÜÄܹ»Î¨Ò»±êʶһ¸öbundle¡£

Ö»ÓÃÒ»¸öBundle-SymbolicName¿Ï¶¨ÊÇ¿ÉÒÔΨһ±êʶһ¸öbundle£¬µ«ÊÇËæ×Åʱ¼äµÄÍÆÒÆ£¬bundle¿ÉÄÜ»áÓÐа汾£¬¼ÓÈë°æ±¾ÊôÐÔ»áÈÃbundleµÄÐÅÏ¢¸ü¼Ó׼ȷ¡£

Bundle-Name: SERC Helloworld
Bundle-Vendor: GR, SERC
Bundle-DocURL: http://elevenframework.org
Bundle-Category: example
Bundle-Copyright: SERC

C¡¢´úÂë¿É¼ûÐÔ£¨±ØÐ룩

´úÂë¿É¼ûÐÔÓÃÓÚ¶¨ÒåÄÚ²¿ÓëÍⲿ´úÂë¡£ÔÚJavaSEÖеÄjar°üÈç¹û·ÅÔÚclasspathÀÄÇôjar°ü¶ÔclasspathϵÄËùÓгÌÐò¶¼ÊǿɼûµÄ£¬²¢ÇҿɼûÐÔ²»Äܸı䡣¶øOSGi±ê×¼¶¨ÒåÁËÈçϵÄÊôÐÔÓÃÓÚÃèÊö´úÂëµÄ¿É¼ûÐÔ£º

Bundle-ClassPath£º¶¨ÒåÁËÐγÉbundleµÄËùÓдúÂëËùÔÚµÄλÖã¬Java ÖеÄclasspathÊǶ¨ÒåµÄjar°üµÄλÖ㬶øBundle-ClassPathÊôÐÔÃèÊöµÄÊÇbundleÄÚ²¿ÀàÔÚbundleÖеÄ·¾¶¡£ÀýÈ磺

Bundle-ClassPath:., other-classes/,embedded.jar

Export-Package£ºÏÔʽ±©Â¶ÐèÒªºÍÆäËübundle¹²ÏíµÄ´úÂ룬ÿ¸ö°üÖ®¼äÓöººÅ·Ö¸ô£¬Ã¿¸ö°ü¿ÉÓÃÐÞÊδÊÀ´ÐÞÊΰüµÄÆäËüÌØÕ÷¡£

Export-Package: org.serc.hellworld; vendor=¡±SERC¡±,
org.serc.hellworld.impl; vendor=¡±Gou Rui¡±

Import-Package£º¶¨ÒåbundleËùÒÀÀµµÄÍⲿ´úÂ룬Æä¸ñʽºÍExport-PackageÏàͬ£¬²¢ÇÒÒ²¿ÉÒÔʹÓÃÐÞÊδÊÀ´ÐÞÊΰü¡£ÐÞÊδÊÊÇÓÃÀ´ÏÞÖÆËùÒÀÀµ°üµÄ·¶Î§µÄ£¬ÀàËÆ¹ýÂËÆ÷£¬¶ø²»ÏñExport-PackageÖÐÓÃÀ´ÉùÃ÷°üµÄÌØÕ÷¡£ÀýÈ磺

Import-Package: org.serc.helloworld; vendor=¡±SERC¡±

ËÄ¡¢ÉúÃüÖÜÆÚ²ã

1¡¢ÉúÃüÖÜÆÚ²ã¼ò½é

ÉúÃüÖÜÆÚ²ãÔÚOSGi¿ò¼ÜÖÐÊôÓÚÄ£¿é²ãÉÏÃæµÄÒ»²ã£¬ÆäÔË×÷½¨Á¢ÔÚÄ£¿é²ãµÄ¹¦ÄÜÖ®Éϵġ£ÉúÃüÖÜÆÚ²ãÖ÷Òª¹¦ÄÜÊÇÈÿª·¢ÕßÄܹ»´ÓÍⲿ¹ÜÀíÓ¦ÓûòÕß½¨Á¢Äܹ»×ÔÎÒ¹ÜÀíµÄÓ¦Ó㨻òÕßÁ½ÕߵĽáºÏ£©£¬²¢ÇÒ¸øÓ¦Óñ¾ÉíºÜ´óµÄ¶¯Ì¬ÐÔ¡£

2¡¢ÉúÃüÖÜÆÚ¹ÜÀí¼ò½é

Ò»°ãÀ´Ëµ£¬³ÌÐò£¨»òÕß³ÌÐòµÄÒ»²¿·Ö£©¶¼Ò»¶¨·þ´ÓijÖÖÉúÃüÖÜÆÚ¡£Èí¼þµÄÉúÃüÖÜÆÚÓÐ4¸öµäÐ͵Ľ׶Σ¬ÈçÏ£º

Èç¹ûÕýÔÚ´´½¨Ò»¸öÓ¦Óã¬Ê×Ïȵð²×°(install)Ó¦Ó㻵±Ó¦ÓõÄËùÓÐÒÀÀµ¶¼Âú×㣬¿ÉÒÔÖ´ÐÐÓ¦Óã»Èç¹ûÓ¦Óò»ÔÙÐèÒª£¬¿ÉÒÔÍ£Ö¹£¨stop£©£»Ò»¶Îʱ¼äºó£¬¿ÉÄÜÐèÒª¸üУ¨update£©Ó¦Óõİ汾£»×îÖÕ£¬¿ÉÄÜ»áÒÆ³ý£¨remove£©Ó¦Óá£

ͨ¹ýÔÚÍⲿ»òÕßÄÚ²¿¶ÔÓ¦ÓýøÐвÙ×÷£¬Íê³É¶ÔÓ¦ÓõÄÉúÃüÖÜÆÚ¹ÜÀí¹ý³Ì¡£¶ÔÓÚ·ÇÄ£¿é»¯Ó¦Ó㬲Ù×÷ÊÇÒÔÕû¸öÓ¦ÓÃΪ¶ÔÏóµÄ£»¶ÔÓÚÄ£¿é»¯Ó¦Ó㬿ÉÒÔÓиüϸÁ£¶È£¨Õë¶ÔÓ¦ÓÃÖеÄij¸öÄ£¿é£©µÄÉúÃüÖÜÆÚ¹ÜÀí¡£

3¡¢OSGi bundleÉúÃüÖÜÆÚ

ÒªÏëʹÓÃ×é¼þ£¨bundle£©£¬¾ÍµÃʹÓÃÉúÃüÖÜÆÚ²ãµÄAPIÓëOSGi¿ò¼ÜµÄÉúÃüÖÜÆÚ²ã½øÐн»»¥¡£

OSGi¿ò¼ÜµÄºËÐIJ¢Ã»ÓÐÇ¿ÖÆÊ¹ÓÃÈκÎÌØ¶¨µÄAPI½»»¥»úÖÆ£¨±ÈÈçÃüÁîÐУ¬GUI£¬»òÕßXMLÅäÖÃÎļþµÈ£©£¬Ö»Êǵ¥´¿µÄJava API¶øÒÑ£¬¿ª·¢Õß¿ÉÒÔÈÎÒâ´´Ôì³ö×Ô¼ºÏëÒªµÄ½»»¥Ä£Ê½£¬±£Ö¤ÁË¿ò¼ÜµÄÁé»îÐÔ¡£

ÔÚ±ê×¼µÄJava±à³ÌÖУ¬»áͨ¹ý½«jar°ü·Åµ½classpathÖÐÀ´Ê¹ÓÃjar°ü£¬¶øbundle²»Í¬¡£BundleÖ»ÓÐÔÚ±»°²×°£¨install£©µ½Ò»¸öOSGi¿ò¼ÜµÄÔËÐÐʵÀýÖвÅÄÜÓÃÆðÀ´£¬²¢ÇÒOSGi¿ò¼ÜÖ§³Ö¶ÔbundleÍêÕûµÄÉúÃüÖÜÆÚ¹ÜÀí£¬²¢ÇÒÖ§³ÖÕâЩ¹ÜÀí²Ù×÷ÔÚÓ¦ÓÃÖ´ÐÐÍê³É£¬Æä¶¯Ì¬ÐԿɼûÒ»°ß¡£

BundleÉúÃüÖÜÆÚµÄ×´Ì¬×ªÒÆÍ¼ÈçÏ£º

¿ÉÒÔͨ¹ýBundleµÄgetState·½·¨À´»ñµÃbundleµÄµ±Ç°×´Ì¬¡£

StartingºÍStopping״̬ÊÇÔÝ̬£¬ÔÚ³ÖÐøÒ»»á¶ùºó¾Í»á×Ô¶¯×ªÒƵ½ÏÂÒ»¸ö״̬£¬²»ÐèÒª×ªÒÆÌõ¼þ¡£

4¡¢ÉúÃüÖÜÆÚ²ãAPI

ÉúÃüÖÜÆÚ²ãµÄAPIÖ÷ÒªÓÉBundleActivator¡¢BundleContext¡¢BundleÈý¸öºËÐĽӿÚ×é³É¡£

A¡¢BundleActivator

BundleActivatorÈÿª·¢ÕßÄܹ»²¶×½bundleµÄstartºÍstopʼþ£¬²¢¶Ô×÷³ö×Ô¶¨ÒåµÄ·´Ó¦¡£

BundleActivatorµÄ½Ó¿Ú¶¨ÒåÈçÏ£º

public interface BundleActivator {
public void start(BundleContext context) throws Exception;
public void stop(Bundlecontext context) throws Exception;
}

Èç¹ûÒ»¸öÀàʵÏÖÁËBundleActivator½Ó¿Ú£¬ÄÇôÀà¾Í³ÉΪһ¸öActivator¡£µ«ÓÐʵÏÖÊDz»¹»µÄ£¬ÒªÈÃOSGi¿ò¼ÜÖªµÀActivatorµÄ´æÔÚ¡£ËùÒÔ»¹ÐèÒªÔÚMANIFESTÎļþÖÐÌí¼ÓÈçÏÂÒ»ÏîÊôÐÔ£º

Bundle-Activator£ºorg.demo.Activator

µ±bundleÆô¶¯£¨start£©µÄʱºò£¬OSGi¿ò¼Ü¾Í»áµ÷ÓÃActivatorµÄstart·½·¨£¬Í¬ÑùµÄÒ²ÊÊÓÃÓëstop·½·¨¡£

²¢²»ÊÇÿ¸öbundle¶¼ÐèÒªÒ»¸öactivator£¬ÓÐʱºòbundleÖ»ÊÇΪÁËºÍÆäËübundle·ÖÏí´úÂ룬¶ø²¢²»ÐèÒªÔÚÆô¶¯ºÍÍ£Ö¹µÄʱºò×ö³ö¶àÓàµÄ¶¯×÷¡£ÊÇ·ñʹÓÃBundleActivator½è¿Ú£¬ÐèÒª¾ßÌåÎÊÌâ¾ßÌå·ÖÎö¡£

B¡¢BundleContext

BundleContextÊÇbundleÔÚ¿ò¼ÜÖеÄÖ´ÐÐʱÉÏÏÂÎÄ£¬ÌṩÁËÓë¿ò¼Ü½øÐн»»¥µÄ·½·¨¡£

BundleContext½Ó¿ÚÖеķ½·¨Ö÷Òª·ÖΪÁ½À࣬һÀàÓ벿ÊðºÍÉúÃüÖÜÆÚ¹ÜÀíÏà¹Ø£¬ÁíÒ»ÀàÊǹØÓÚÀûÓ÷þÎñ²ã½øÐÐbundle¼ä½»»¥µÄ·½·¨¡£

public interface BundleContext {
String getProperty(String key);
Bundle getBundle();
Bundle installBundle(String location, InputStream input) throws BundleException;
Bundle installBundle(String location) throws BundleException;
Bundle getBundle(long id);
Bundle[] getBundles();
void addBundleListener(BundleListener listener);
void removeBundleListener(BundleListener listener);
void addFrameworkListener(FrameworkListener listener);
void removeFrameworkListener(FrameworkListener listener);
}

BundleContext½Ó¿Ú¶ÔÓÚÓëÆäÏà¹ØµÄbundleÀ´Ëµ¶¼ÊÇΨһµÄÖ´ÐÐÉÏÏÂÎÄ£¬²¢ÇÒÖ»ÓÐÔÚbundleÊÇÊôÓÚactive״̬µÄʱºòÖ´ÐÐʱÉÏÏÂÎIJÅÊÇÓÐÒâÒåµÄ£¬¼´ÔÚstart·½·¨±»µ÷ÓúÍstop·½·¨±»µ÷ÓõÄÁ½¸öʱ¼äµãÖ®¼ä¡£Èç¹ûÒ»¸öbundleûÓд¦ÓÚactiveʱ¼ä¶Î£¬µ«×é¼þµÄbundlecontext¶ÔÏó±»Ê¹Ó㬿ò¼Ü»áÅ׳öÒì³£¡£

¿ò¼ÜʹÓÃÕâ¸öÉÏÏÂÎĶÔÏó»¹ÓÐÒ»¸öÄ¿µÄ¾ÍÊÇΪÁËbundleµÄ°²È«ºÍ×ÊÔ´·ÖÅ䣬ËùÒÔBundleContext¶ÔÏóÓ¦¸Ã±»µ±×ö˽ÓжÔÏ󣬲»Ó¦¸Ã±»ËæÒâÔÚbundleÖ®¼ä´«µÝ¡£

C¡¢Bundle

BundleÔÚÂß¼­Éϱíʾһ¸öbundle£¬OSGi»·¾³ÖеÄÒ»¸öÎïÀíbundle¶ÔÓ¦Ò»¸öbundle¶ÔÏó¡£bundle¶ÔÏóÖаüº¬ÁËbundleµÄ»ù±¾ÐÅÏ¢ºÍbundleÉùÃ÷ÖÜÆÚµÄ¿ØÖƽӿڡ£

ÔÚBundleContext½Ó¿ÚÖУ¬getBundle·½·¨¿ÉÒԵõ½Bundle¶ÔÏó¡£

¶ÔÓÚÿ¸ö±»°²×°µ½¿ò¼ÜÖеÄbundle£¬¿ò¼Ü¶¼´´½¨Ò»¸öBundle¶ÔÏóÔÚÂß¼­Éϱí´ïÖ®¡£Bundle½Ó¿ÚÖж¨ÒåÁËbundleÉúÃüÖÜÆÚ¹ÜÀíµÄ·½·¨£º

public interface Bundle {
BundleContext getBundleContext();
long getBundleId();
Dictionary getHeaders();
Dictionary getHeaders(String locale);
String getLocation();
int getState();
String getSymbolicName();
Version getVersion();
void start(int options) throws BundleException;
void start() throws BundleException;
void stop(int options) throws BundleException;
void stop() throws BundleException;
void update(InputStream input) throws BundleException;
void update() throws BundleException;
void uninstall() throws BundleException;
}

´ó²¿·ÖOSGi¿ò¼ÜµÄʵÏÖ¶¼Êǽ«locatioin½âÊÍΪָÏòOSGi bundleµÄÒ»¸öURL£¬ÔÚÐèÒªµÄʱºò¾Í»áͨ¹ýURL½«bundleÏÂÔØµ½¿ò¼ÜÖÐÀ´°²×°Ê¹Óᣵ«OSGi±ê׼ûÓй涨locationµÄÐÎʽ±ØÐëÊÇURL£¬¶øÇÒURLÒ²²¢²»ÊÇ·ÇÒª²»¿ÉµÄ£¬»¹¿ÉÒÔͨ¹ýÊäÈëÁ÷£¨Input Stream£©À´°²×°bundle¡£

bundle²»ÄÜ×Ô¼º¸Ä±ä×Ô¼ºµÄ״̬£¬±ÈÈç˵һ¸öactiveµÄbundle²»ÄÜstop×Ô¼º£¬stop×Ô¼º¾Í»áÅ׳öÒì³£¡£

Îå¡¢·þÎñ²ã

1¡¢·þÎñ¼ò½é

·þÎñÊÇ·þÎñÌṩÕߺͷþÎñʹÓÃÕßÖ®¼äµÄÒ»¸öÆõÔ¼¡£Ê¹ÓÃÕßÒ»°ã²»¹ØÐÄ·þÎñʵÏÖµÄϸ½Ú£¬Ö»¹ØÐÄÊÇ·ñÂú×ãÆõÔ¼£¨·þÎñÓ¦¸ÃÌṩʲô¹¦ÄÜ£¬Âú×ãʲô¸ñʽ£©¡£Ê¹Ó÷þÎñµÄ¹ý³Ì°üº¬ÁË·¢ÏÖ·þÎñºÍ´ï³ÉЭÒéµÄÐÎʽ£¬ÐèҪͨ¹ý·þÎñµÄ±êÖ¾ÐÔÌØÕ÷À´ÕÒµ½¶ÔÓ¦µÄ·þÎñ¡£

2¡¢OSGI·þÎñ²ã

·þÎñ²ãÊÇOSGi¿ò¼ÜÖÐ×îÉÏÃæµÄÒ»²ã£¬·þÎñ²ã´øÀ´Á˸ü¶àµÄ¶¯Ì¬ÐÔ£¬²¢ÇÒʹÓÃÁËÃæÏò·þÎñ±à³ÌÄ£ÐÍ¡£µ±Ò»¸öbundle·¢ÏÖ¿ªÊ¼Ê¹ÓÃOSGiÖеÄÒ»¸ö·þÎñºó£¬·þÎñ¿ÉÄÜÔÚÈκεÄʱºò¸Ä±ä»òÕßÊÇÏûʧ¡£

OSGi¿ò¼ÜÓÐÒ»¸öÖÐÐÄ»¯µÄ×¢²á±í£¬×¢²á±í×ñ´Ópublish-find-bindÄ£ÐÍ£º

Ò»¸öÌṩ·þÎñµÄbundle¿ÉÒÔ·¢²¼POJO×÷Ϊ·þÎñµÄʵÌ壻һ¸öʹÓ÷þÎñµÄbundle¿ÉÒÔͨ¹ý×¢²á±íÕÒµ½ºÍ°ó¶¨·þÎñ¡£

¿ÉÒÔͨ¹ýBundleContext½Ó¿ÚÀ´Íê³É·þÎñµÄ·¢²¼¡¢·¢ÏÖ¡¢°ó¶¨£¬ÈçÏ£º

public interface BundleContext {
void addServiceListener (ServiceListener listener, String filter) throws InvalidSyntaxException;
void addServiceListener (ServiceListener listener);
void removeServiceListener(ServiceListener listener);
ServiceRegistration registerService (String[] clazzes, Object service, Dictionary properties);
ServiceRegistration registerService (String clazz, Object service, Dictionary properties);
ServiceRegistration[] getServiceReferences (String clazz, String filter) throws InvalidSyntaxException;
ServiceRegistration[] getAllServiceReferences (String clazz, String filter) throws InvalidSyntaxException;
ServiceReference getServiceReference(String clazz);
Object getService (ServiceReference reference);
boolean ungetService (ServiceReference reference);
}

3¡¢·¢²¼·þÎñ

ΪÁËÈÃÆäËübundleÄÜ·¢ÏÖ·þÎñ£¬±ØÐëÔÚ·¢²¼·þÎñǰ¶ÔÆä½øÐÐÌØÕ÷ÃèÊö¡£·þÎñÌØÕ÷°üÀ¨½Ó¿ÚµÄÃû×Ö£¨¿ÉÒÔÊÇÃû×ÖµÄÊý×飩£¬½Ó¿ÚµÄʵÏÖºÍÒ»¸ö¿ÉÑ¡µÄjava.util.DictionaryÀàÐ͵ÄÔªÊý¾ÝÐÅÏ¢¡£Ê¾ÀýÈçÏ£º

String[] interfaces = new String[] {StockListing.class.getName(), StockChart.class.getname()};
Dictionary metadata = new Properties();
metadata.setProperty (¡°name¡±, ¡°LSE¡±);
metadata.setProperty (¡°currency¡±, Currency.getInstance(¡°GBP¡±));
metadata.setProperty (¡°country¡±, ¡°GB¡±);
ServiceRegistration registration = bundleContext.registerService (interfaces, new LSE(), metadata);

ÉÏÊö´úÂëÖУ¬Í¨¹ýServiceRegistration¶ÔÏó¿ÉÒÔ¸üзþÎñµÄÔªÊý¾Ý£º

registration.setProperties(newMetadata);

¿ÉÒÔÖ±½Ó½«·þÎñ×¢Ïú£º

registration.unregister();

ServiceRegistration¶ÔÏó²»ÄÜºÍÆäËüBundles¹²Ïí£¬ÒòΪServiceRegistration¶ÔÏóºÍ·¢²¼·þÎñµÄbundleµÄÉúÃüÖÜÆÚÏ໥ÒÀ´æ¡£Èç¹ûbundleÒѾ­²»ÔÚ¿ò¼ÜÖ´Ðл·¾³ÖдæÔÚ£¬ÄÇôServiceRegistration¶ÔÏóÒ²²»Ó¦¸Ã´æÔÚ¡£

´úÂëÖеIJÎÊýnew LSE()ÊÇÒ»¸öPOJO£¬²»ÐèҪʵÏÖÈκÎOSGiÀàÐÍ»òÕßʹÓñê×¢£¬Ö»ÒªÂú×ã·þÎñÔ¼¶¨¾Í¿ÉÒÔ¡£

Èç¹ûÔÚɾ³ý·¢²¼µÄ·þÎñǰbundleÒÔ¼°Í£Ö¹£¬¿ò¼Ü»á°ïÖúɾ³ý·þÎñ¡£

4¡¢·¢ÏÖ·þÎñ

¿ÉÒÔ¸ù¾Ý·þÎñÔ¼¶¨´Ó×¢²á±íÖÐÕÒµ½ÕýÈ·µÄ·þÎñ¡£·¢ÏÖ·þÎñ²¢»ñµÃÆäÒýÓõĽӿÚÈçÏ£º

ServiceReference reference =
bundleContext.getServiceReference (StockListing.class.getName());

referenceÊÇ·þÎñ¶ÔÏóµÄ¼ä½ÓÒýÓ㬲»Ö±½ÓʹÓ÷þÎñ¶ÔÏóÊÇΪÁ˽«·þÎñµÄʹÓúͷþÎñµÄʵÏÖ½øÐнâñ½«·þÎñ×¢²á±í×÷ΪÁ½ÕßµÄÖмäÈË£¬´ïµ½¸ú×ٺͿØÖÆ·þÎñµÄÄ¿µÄ£¬Í¬Ê±»¹¿ÉÒÔÔÚ·þÎñÏûʧºó֪ͨʹÓÃÕß¡£

ServiceReference¿ÉÒÔÔÚbundleÖ®¼ä»¥Ïí£¬ÓëʹÓ÷þÎñµÄbundleµÄÉúÃüÖÜÆÚÎ޹ء£

ÔÚgetServiceReference·½·¨ÖУ¬Ñ¡ÔñserviceµÄĬÈÏÓÅÏȼ¶ÊÇÏÈÑ¡Ôñservice.rank×î¸ßµÄ£¬ÔÚrankÏàµÈµÄÇé¿öÏÂÑ¡Ôñ×îÔçÔÚ¿ò¼ÜÖÐ×¢²áµÄ¡£³ýÁËĬÈϵĹæÔò£¬»¹¿ÉÒÔÔÚgetServiceReferencesÖÐͨ¹ýÌí¼Ó¹ýÂ˲ÎÊý£¨×÷Ϊµ÷Óø÷½·¨µÄµÚ¶þ¸ö²ÎÊý£©À´×öһЩɸѡ¡£

ServiceReference[] references =
bundleContext.getServiceReferences (StockListing.class.getName(), ¡°(&(currency=GBP) (objectClass=org.example.StockChart))¡±);

Æ¥Åä²ÎÊýÊÇÒ»¸ö×Ö·û´®£¬×Ö·û´®µÄ¸ñʽÊôÓÚLDAP²éѯ¸ñʽ£¬ÔÚRFC1960±ê×¼ÖÐÓÐÍêÕûµÄÃèÊö¡£

×Ö·û´®ÖеȺÅ×ó±ßµÄÄÚÈÝÊÇÔªÊý¾Ý£¨Dictionary£©ÖеÄ×óÖµ£¬Í¨¹ý×óÖµ¶ÔÓ¦µÄÓÒÖµÓë·þÎñµÄÔªÊý¾Ý½øÐÐÆ¥Å䡣ƥÅäʾÀýÈçÏ£º

ÊôÐÔÆ¥Åä:

(name=John Smith)
(age>=20)
(age<=65)

Ä£ºýÆ¥Åä:

(name~=johnsmith)

ͨÅä·ûÆ¥Åä:

(name=Jo*n*Smith*)

ÅжÏij¸öÊôÐÔÊÇ·ñ´æÔÚ:

(name=)

Ìõ¼þÓë:

(&(name=John Smith)(occupation=doctor))

Ìõ¼þ»ò:

(|(name~=John Smith)(name~=Smith John))

*Ìõ¼þ·Ç: **

(!(name=John Smith))

5¡¢°ó¶¨ºÍʹÓ÷þÎñ

·¢ÏÖ·þÎñºó£¬Ê¹Ó÷þÎñ֮ǰ£¬±ØÐë´Ó×¢²á±íÖаó¶¨ÊµÏֵķþÎñ¡£

StockListing listing =
(StockListing) bundleContext.getService(reference);

·µ»ØµÄPOJOʵÀýºÍÔÚ×¢²á±íÖÐ×¢²áµÄʵÀýÊÇͬһ¸ö¡£

ÿ´ÎʹÓÃgetService·½·¨µÄʱºò£¬×¢²á±í»á½«¶ÔÓ¦·þÎñµÄʹÓôÎÊý¼Ó1£¬Í¬Ê±»á¼Ç¼˭ÔÚʹÓø÷þÎñ¡£Èç¹û²»ÏëʹÓ÷þÎñµÄ£¬×¢Ïú·þÎñ¡£

bundleContext.ungetService(reference);
listing = null;

Áù¡¢OSGIµÄʵÏÖ

1¡¢OSGIµÄ¾ßÌåʵÏÖ

OSGIÊÇOSGi Alliance×éÖ¯ÖÆ¶¨µÄJavaÄ£¿é»¯¹æ·¶£¬µ«OSGIÁªÃ˲¢Ã»Óиø³öOSGIÈÝÆ÷µÄʵÏÖ£¬¾ßÌåʵÏÖÓɵÚÈý·½³§ÉÌÍê³É£¬Ä¿Ç°Ê¹Óý϶àµÄOSGIÈÝÆ÷ÓÐApache Felix¡¢Equinox¡¢Spring DM¡£

2¡¢OSGIµÄJAVAʵÏÖ

A¡¢Apache Felix

Apache FelixÊÇApacheÆìϵÄÒ»¸öOSGi¿ò¼Ü£¬FelixÊÇÒ»¸öOSGi°æ±¾4¹æ·¶µÄApacheʵÏÖ¡£Apache FelixÌṩµÄ·þÎñ¼¸ºõº­¸ÇÁËÈ«²¿µÄOSGi 4.2µÄ±ê×¼£¬³ý´ËÖ®Í⻹ÌṩÁËһЩ·Ç±ê×¼µÄ¹¦ÄÜ£¬ÀýÈçiPOJO¡£Apache Felix¿ò¼Ü±¾Éí·Ç³£½ô´Õ£¬Ö»ÐèÒª3¸ö°ü¼ÓÒ»¸öshell¾Í¿ÉÒÔÔËÐУ¬ÎÞÂÛÊÇ¿ª·¢»¹ÊÇDebug¶¼·Ç³£¼ò±ã¡£

B¡¢Equinox

EquinoxÊÇEclipseÆìϵÄOSGi¿ò¼Ü£¬±¾ÉíÒ²±»Eclipse²ÉÓã¬ÊÇEclipseµÄPDE¿ª·¢»·¾³µÄµ×²ã¡£Equinox±¾ÉíÒ²ÊÇÏ൱µÄÈ«ÃæµÄ¿ò¼Ü£¬ÌṩµÄ¹¦Äܲ»±ÈFelixÉÙ¶àÉÙ¡£Equinox±»µ±×ö¿ª·¢Eclipse PluginµÄÓ¦Óý϶࣬Èç¹ûÒª¿ª·¢Ò»¸öWeb³ÌÐò£¬¾Í»á¸Ðµ½¹¦ÄܺÍÎĵµ²»¹»È«Ãæ¡£Equinox×î´óµÄÓÅÊÆÔÚÓÚºÍEclipse½áºÏ½ôÃÜ£¬Ö»Òª°²×°ÁËPDE£¬¾ÍÒѾ­ÓÐÁËEquinox£¬¿ÉÒÔ·½±ãµÄÔÚEclipseÀïÉèÖÿª·¢µÄBundle£¬Æô¶¯¡¢²¿ÊðµÈ²Ù×÷Ò²Òì³£¼òµ¥£¬¶øÇÒÓÐרÃŵÄDebug½çÃæ¡£

C¡¢Spring DM

Spring DMÊÇSpringÆìϵÄOSGi¿ò¼Ü£¬Spring DMµÄ×î´óÌØµãÊǽáºÏÁËSpring¿ò¼Ü¡£

D¡¢Knopflerfish

KnopflerfishÊÇOSGiµÄÏÈÐÐÕߣ¬ÊÇÒ»¸öÏ൱±ê×¼OSGi¿ò¼Ü£¬ÌṩÁ˾ø´ó¶àÊý±ê×¼¹¦ÄÜ¡£

3¡¢OSGIµÄC++ʵÏÖ

A¡¢CTK Plugin Framework

CTKÊÇ»ùÓÚQt¿ª·¢µÄÖ§³ÖÉúÎïҽѧӰÏñ¼ÆËãµÄ¿ªÔ´ÏîÄ¿¡£

CTKÖеÄCTK Plugin FrameworkÄ£¿é½è¼øÁËOSGIµÄ˼Ï룬²¢ÊµÏÖÁ˼¸ºõÍêÕûµÄOSGI¿ò¼ÜAPI¡£

B¡¢C++ Micro Services

C++ Micro ServicesÊÇ»ùÓÚOSGI˼ÏëµÄÓÃÓÚ´´½¨ºÍ¹ÜÀíÄ£¿é»¯Èí¼þϵͳµÄC++¿â¡£

4¡¢OSGIµÄCʵÏÖ

Apache CelixÊÇ»ùÓÚC/C++µÄOSGI¹æ·¶ÊµÏÖ£¬ÌṩÁËÒ»¸öʹÓÃ×é¼þºÍÃæÏò·þÎñ±à³Ì£¨SOP£©¿ª·¢Ä£¿é»¯Ó¦ÓõĿò¼Ü¡£

Apache CelixÖ÷ҪʹÓÃCÓïÑÔ¿ª·¢£¬ÎªÁËÖ§³ÖC++£¬ÒÔ¿âµÄÐÎʽÔö¼ÓÁ˳éÏó¡£

¹Ù·½ÍøÕ¾£ºhttp://celix.apache.org/

 

 

 
   
5757 ´Îä¯ÀÀ       30
Ïà¹ØÎÄÕÂ

Java΢·þÎñÐÂÉú´úÖ®Nacos
ÉîÈëÀí½âJavaÖеÄÈÝÆ÷
JavaÈÝÆ÷Ïê½â
Java´úÂëÖÊÁ¿¼ì²é¹¤¾ß¼°Ê¹Óð¸Àý
Ïà¹ØÎĵµ

JavaÐÔÄÜÓÅ»¯
Spring¿ò¼Ü
SSM¿ò¼Ü¼òµ¥¼òÉÜ
´ÓÁ㿪ʼѧjava±à³Ì¾­µä
Ïà¹Ø¿Î³Ì

¸ßÐÔÄÜJava±à³ÌÓëϵͳÐÔÄÜÓÅ»¯
JavaEE¼Ü¹¹¡¢ Éè¼ÆÄ£Ê½¼°ÐÔÄܵ÷ÓÅ
Java±à³Ì»ù´¡µ½Ó¦Óÿª·¢
JAVAÐéÄâ»úÔ­ÀíÆÊÎö
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]
 
×îÐÂÎÄÕÂ
JavaÐéÄâ»ú¼Ü¹¹
JVM¡ª¡ªJavaÐéÄâ»ú¼Ü¹¹
JavaÈÝÆ÷Ïê½â
Java½ø½×--ÉîÈëÀí½âArrayListʵÏÖÔ­Àí
Java²¢·¢ÈÝÆ÷£¬µ×²ãÔ­ÀíÉîÈë·ÖÎö
×îпγÌ
java±à³Ì»ù´¡µ½Ó¦Óÿª·¢
JavaEE¼Ü¹¹¡¢ Éè¼ÆÄ£Ê½¼°ÐÔÄܵ÷ÓÅ
¸ßÐÔÄÜJava±à³ÌÓëϵͳÐÔÄÜÓÅ»¯
SpringBoot&Cloud¡¢JavaSSM¿ò¼Ü
Spring Boot Åàѵ
³É¹¦°¸Àý
¹úÄÚÖªÃûÒøÐÐ Spring+SpringBoot+Cloud+MVC
±±¾© Java±à³Ì»ù´¡ÓëÍøÒ³¿ª·¢»ù´¡
±±¾© Struts+Spring
»ªÏÄ»ù½ð ActiveMQ Ô­Àí
ijÃñº½¹« Java»ù´¡±à³Ìµ½Ó¦Óÿª·¢