±à¼ÍƼö: |
±¾ÎÄÖ÷Òª½éÉÜÁË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) |
Ä£ºýÆ¥Åä:
ͨÅä·ûÆ¥Åä:
ÅжÏij¸öÊôÐÔÊÇ·ñ´æÔÚ:
Ìõ¼þÓë:
(&(name=John Smith)(occupation=doctor)) |
Ìõ¼þ»ò:
(|(name~=John Smith)(name~=Smith
John)) |
*Ìõ¼þ·Ç: **
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/
|