×÷Ϊһ¸öеÄÊÂʵÉϵĹ¤Òµ±ê×¼£¬OSGi
ÒѾÊܵ½Á˹㷺µÄ¹Ø×¢£¬ ÆäÃæÏò·þÎñ£¨½Ó¿Ú£©µÄ»ù±¾Ë¼ÏëºÍ¶¯Ì¬Ä£¿é²¿ÊðµÄÄÜÁ¦£¬ ÊÇÆóÒµ¼¶Ó¦Óó¤ÆÚÒÔÀ´Ò»Ö±×·ÇóµÄÄ¿±ê¡£Spring
ÊÇÒ»¸öÖøÃûµÄ ÇáÁ¿¼¶ J2EE ¿ª·¢¿ò¼Ü£¬ÆäÌØµãÊÇÃæÏò½Ó¿Ú±à³ÌºÍ·ÇÇÖÈëʽµÄÒÀÀµ×¢Èë¡£½« OSGi ºÍ Spring
½áºÏÄܳä·Ö·¢»Ó¶þÕ߸÷×ÔµÄÌØ³¤£¬¸üºÃµØÂú×ãÆóÒµ¼¶Ó¦Óÿª·¢µÄÐèÇó¡£Spring ¿ª·¢×éÖ¯ÔÚ 2008 Äê·¢²¼Á˽«
OSGi ºÍ Spring ½áºÏµÄµÚÒ»¸ö°æ±¾£ºSpring-DM¡£±¾ÎÄͨ¹ýÒ»¸ö¼òµ¥ÊµÀý£¬½éÉÜÈçºÎÀûÓà Spring-DM
¿ª·¢»ùÓÚ OSGi ºÍ Spring ¼Ü¹¹µÄ Web Ó¦Óã¬Í¬Ê±Ì½ÌÖÆäÖÐÓõ½µÄ¹Ø¼ü¼¼Êõ¼°Æä»ù±¾Ë¼Ïë¡£
¿ª·¢Ò»¸ö¼òµ¥µÄ OSGi Web Ó¦ÓÃʵÀý
Ò»¸ö¼òµ¥µÄ Web Ó¦ÓÃ
ÎÒÃÇдһ¸ö¼òµ¥µÄ Web Ó¦Óà compute.html £º¼ÆËãÁ½¸öÊý×ֵĺͻò³Ë»ý¡£ÈçÏÂͼËùʾ£º

ͼ 1. Ò»¸ö¼òµ¥Àý×Ó
ΪÁËÌåÏÖ OSGi bundle µÄ¶¯Ì¬²¿ÊðÄÜÁ¦£¬ÎÒÃÇдÁ½¸ö service
bundle£¬ÆäÖÐÒ»¸ö¼ÆËãÁ½¸öÊý×ֵĺͣ¨³ÆÎª add bundle£©£¬ÁíÍâÒ»¸ö¼ÆËãÁ½¸öÊý×ֵĻý£¨³ÆÎª multiply
bundle£©¡£ µ±ÎÒÃǵã»÷¡°Compute¡±°´Å¥µÄʱºò£¬Èç¹û´Ëʱ add bundle ±»²¿Êð£¬ÔòÒ³Ãæ½«·µ»ØÁ½¸öÊý×ֵĺͣ¬·ñÔòÈç¹û´Ëʱ
multiply bundle ±»²¿Êð£¬ÔòÒ³Ãæ½«·µ»ØÁ½¸öÊý×ֵĻý¡£
¿ª·¢»·¾³×¼±¸
ÏÂÔØ Eclipse 3.4
»ñÈ¡ËùÓÐ OSGi, Equinox ºÍ Spring µÄ²å¼þ, ÈçÏÂͼËùʾ:

ͼ 2. Ïà¹Ø²å¼þÁбí
´ò¿ª Eclipse, ÉèÖà target platform ΪÉÏÊö²å¼þ¼¯ºÏ
»ù±¾Ä£¿éÉè¼Æ
¸ÃÓ¦ÓÃÖ÷Òª°üº¬Á½¸ö²ã´Î: ·þÎñ²ãºÍ Web ²ã¡£Web ²ã»ùÓÚ Spring-MVC
ʵÏÖ£¬°üº¬´¦Àí Web·ÃÎÊÏà¹ØµÄ bundle£¨±¾ÀýÖÐÖ»ÓÐÒ»¸ö£©¡£·þÎñ²ã°üº¬´¦ÀíÊý×Ö¼ÆËãµÄ bundle£¬±¾ÀýÖаüº¬Ò»¸öÉùÃ÷·þÎñ½Ó¿ÚµÄ
compute interface bundle ºÍÁ½¸öʵÏָ÷þÎñ½Ó¿ÚµÄ bundle £ºadd bundle
ºÍ multiply bundle¡£»ù±¾Ä£¿é½á¹¹ÈçÏÂͼËùʾ£º

ͼ 3. »ù±¾¿ò¼Ü
Ä£¿é³ÌÐòʵÏÖ
Step 1 £ºÊµÏÖ Service Layer
·þÎñ²ãµÄÈý¸ö OSGi bundle ʵÏÖÍê±ÏÖ®ºóÈçÏÂͼËùʾ £º

ͼ 4. ·þÎñ²ã
·þÎñ²ã.bmp
ÆäÖÐ com.zxn.example.service.compute ÊÇÉùÃ÷·þÎñ½Ó¿ÚµÄ
bundle¡£com.zxn.example.service.compute.add
com.zxn.example.service.compute.multiply
ÊÇʵÏÖÁË·þÎñ½Ó¿ÚµÄÁ½¸ö bundle¡£
com.zxn.example.service.compute
ÉùÃ÷Ò»¸ö Compute ½Ó¿Ú£¬ÆäÖаüº¬Ò»¸ö½Ó¿Ú·½·¨ computeNums£¨£©£¬ÈçÏÂͼËùʾ
£º

ͼ 5. ·þÎñ²ã½Ó¿Ú bundle
com.zxn.example.service.compute.add
bundle com.zxn.example.service.compute.add
µÄ»ù±¾³ÌÐò½á¹¹ÈçÏÂͼËùʾ£º

ͼ 6. ½Ó¿ÚʵÏÖ bundle £ºadd
Ôڸà add bundle ÖУ¬Ìí¼ÓÒ»¸ö Add À࣬ʵÏÖ Compute
½Ó¿Ú£¬ÈçÏÂͼËùʾ£º

ͼ 7. ½Ó¿ÚʵÏÖ´úÂë £ºAdd Àà
×¢Òâµ½ÎÒÃÇÔÚ META-INF Ͻ¨ÁËÒ»¸ö spring Ŀ¼£¬²¢ÇÒÌí¼ÓÁËÒ»¸ö
computeAdd-context.xml Îļþ¡£ÏµÍ³Æô¶¯Ê±£¬Spring ½«ÀûÓøà xml Îļþ´´½¨Ò»¸ö
bean ʵÀý£¬²¢°Ñ¸Ã bean Êä³öΪһ¸ö OSGi service£¬ÈçÏÂͼËùʾ £º

ͼ 8. Spring ÉùÃ÷Îļþ £ºcomputeAdd-context.xml
¸ÃxmlÎļþÖУ¬osgi : serviceÊÇ Spring-DM Êä³ö
OSGi service µÄ±ê¼Ç£¬ÆäÖÐµÄ interfaceÊôÐÔ±êÃ÷Á˸à service ʵÏֵķþÎñ½Ó¿Ú¡£
com.zxn.example.service.compute.multiply
°´ÕÕÓë add bundle ͬÑùµÄ·½·¨£¬ÊµÏÖ multiply bundle£¬ÈçÏÂͼËùʾ£º

ͼ 9. ½Ó¿ÚʵÏÖ´úÂ룺Multiply
Àà
½Ó¿ÚʵÏÖ´úÂë-MultiplyÀà.bmp
ÀàËÆµÄ£¬Ìí¼ÓÒ»¸ö computeMultiply-context.xml
Êä³ö OSGi service£¬ÈçÏÂͼËùʾ £º

ͼ 10. Spring ÉùÃ÷Îļþ£ºcomputeMultiply-context.xml
Step 2 £ºÊµÏÖ Web Layer
Web ²ãÖ»°üº¬Ò»¸ö bundle£ºcom.zxn.example.web£¬²ÉÓÃ
Spring-MVC ºÍ OSGi ¹¹½¨£¬»ù±¾³ÌÐò½á¹¹ÈçÏÂͼËùʾ£º

ͼ 11. Web Layer ³ÌÐò½á¹¹
ComputeControler.java
¸ÃJAVAÀàʵÏÖÁË org.springframework.web.servlet.mvc.Controller£¬ÊDZ¾
webÓ¦ÓÃÖкËÐÄµÄ servlet£¬¸ºÔð½ÓÊܲ¢´¦Àí web ÇëÇ󡣸ÃÀàµ÷Óà ComputeServiceRef
µÄ·½·¨ÊµÏÖÒµÎñÂß¼¡£¸ÃÀà¹Ø¼üµÄ·½·¨ÊÇ handleRequest(¡), ÈçÏÂͼËùʾ £º

ͼ 12. ºËÐÄ servlet Àà
ComputeServiceRef.java
¸Ã JAVA ÀฺÔðÒýÓò¿ÊðµÄ service bundle Íê³É×îÖÕ¼ÆË㣬ÆäÖеÄ
computeService ÓÉ Spring ¸ù¾Ý OSGi ÖÐʵ¼Ê²¿ÊðµÄ service ½øÐÐ×¢Èë¡£±¾ÀýÖУ¬Êµ¼Ê²¿ÊðµÄ
service ¿ÉÄÜÊÇ add bundle »òÕß multiply bundle¡£
ÐèÒªÌØ±ð×¢ÒâµÄÊÇ£¬´Ë´¦ÌåÏÖÁË Spring-DM µÄ¶¯Ì¬ÌØÐÔ¡£OSGi
µÄ¶¯Ì¬²¿ÊðÄÜÁ¦Ê¹µÃ Spring µÄ¶¯Ì¬·þÎñ×¢Èë³ÉΪ¿ÉÄÜ¡£

ͼ 13. ·þÎñÏû·ÑÀà
HTTPContextResgistry.java
¸Ã JAVA ÀฺÔðÔÚ OSGi »·¾³ÖÐÅäÖúÍ×¢²á HTTP ·þÎñ£¬Æä¹Ø¼ü·½·¨Îª
bean ³õʼ»¯Ê±µ÷ÓÃµÄ init( ) ·½·¨¡£

ͼ 14. ÔÚ OSGi »·¾³ÖÐ×¢²á HTTP
·þÎñ
¸Ã init ·½·¨ÖУ¬µÚÁùÐÐµÄ getHTTPService(¡) µ÷ÓÃ
OSGi µÄ ServiceTracker À´»ñÈ¡ OSGi»·¾³ÖÐ×¢²áµÄ HTTP ·þÎñµÄÒýÓã¬ÈçÏÂͼËùʾ£º

ͼ 15. ʹÓà ServiceTracker
»ñÈ¡ HTTP ·þÎñ
computeWeb-context.xml
¸Ã xml ÎļþÖ÷ÒªÓÃÓÚÅäÖà HTTPContextResgistry
bean À࣬ÒÔ¼°µ¼Èë¶Ô Compute ·þÎñ½Ó¿ÚµÄÒýÓᣱê¼Ç osgi : reference ÓÃÓÚÉùÃ÷Òªµ¼ÈëµÄ·þÎñ½Ó¿Ú£¬Æä
interface ÊôÐÔ±êÃ÷Á˸ýӿڵ͍Ò壬±¾ÀýÖÐΪ com.zxn.example.service.compute.Compute
½Ó¿Ú¡£

ͼ 16. Spring ÉùÃ÷Îļþ£ºµ¼Èë·þÎñ½Ó¿Ú
computeWeb-Dispatcher.xml
¸Ã xml ÎļþÓÃÓÚÅäÖà ComputeControler beanÀà¡£

ͼ 17. Spring ÉùÃ÷Îļþ£ºÅäÖúËÐÄ
servlet Àà
ÔËÐгÌÐò
ÒÔÍù¿ª·¢ J2EE Ó¦ÓÃͨ³£ÐèÒª½«Ó¦Ó÷þÎñÆ÷µÄ runtime ¼¯³Éµ½¿ª·¢»·¾³ÖвÅÄܽøÐгÌÐòµ÷ÊÔ£¬·Ç³£Âé·³¡£»ùÓÚ
OSGi µÄÓ¦ÓÃÍêÈ«¿ÉÒÔÍÑÀëÓ¦Ó÷þÎñÆ÷ÔËÐУ¬ÕâʹµÃ³ÌÐò¿ª·¢ºÍµ÷ÊÔ±äµÃ·Ç³£ÈÝÒ×£¬Ö±½ÓÔÚ Eclipse Öе÷ÊÔÔËÐоͿÉÒÔ¡£ÎÒÃÇÔÚ
Eclipse Öн«³ÌÐòÔËÐÐÆðÀ´£¬ÈçÏÂͼËùʾ£º

ͼ18. ÔËÐÐ OSGi ³ÌÐò
´ÓÉÏͼÖп´µ½£¬ÎÒÃÇͬʱѡÔñ²¿ÊðÁË add bundle ºÍ multiply
bundle£¬ÀûÓà OSGi console ²ì¿´ÈçÏ£º

ͼ 19. ²ì¿´²¿ÊðµÄ OSGi bundle
µ± OSGi »·¾³ÖÐͬʱ²¿ÊðÓжà¸ö·þÎñ½Ó¿ÚµÄʵÏÖ bundle ʱ£¬OSGi
»áÑ¡ÔñÒ»¸öĬÈ쵀 bundleÌṩ·þÎñ¡£±¾ÀýÖУ¬Spring »áĬÈÏ×¢Èë add bundle¡£ÎÒÃÇͨ¹ý
web ·ÃÎÊ compute.html Ò³Ãæ£º

ͼ 20. ·ÃÎÊÒ³Ãæ
µã Compute °´Å¥Ö®ºó£¬½á¹ûÒ³ÃæÈçÏ£º

ͼ 21. ·ÃÎʽá¹û
¿ÉÒÔ¿´³ö£¬ÊÇ add bundle ÌṩÁ˼ÆËã·þÎñ¡£ÏÂÃæÎÒÃÇͨ¹ýÃüÁî £¼stop
76£¾ À´Í£Ö¹ add bundleµÄ·þÎñ£º

ͼ 22. ֹͣ add bundle

ͼ 23. add bundle ״̬±äΪ
RESOLVED
ÖØÐ·ÃÎÊ compute.html Ò³Ãæ£¬½á¹ûµÃµ½µÄÊÇÁ½¸öÊý×ֵij˻ý¡£¿ÉÒÔ¿´³ö£¬ÊÇ
multiply bundl
ÌṩÁ˼ÆËã·þÎñ¡£ÈçÏÂͼËùʾ£º

ͼ 24. ÔٴηÃÎÊÒ³Ãæ
С½á
×÷Ϊµ±Ç°ÆÄ¾ßÉúÃüÁ¦µÄÁ½¸ö±ê×¼ºÍ¿ò¼Ü£¬OSGi ºÍ Spring ÒѾ³õ²½ÈÚºÏÔÚÒ»Æð¡£¶þÕߵĽáºÏ£¬Îª¿ª·¢ÆóÒµ¼¶µÄ
Web Ó¦ÓÃͬʱÌṩÁ˾޴óµÄÁé»îÐԺͶ¯Ì¬²¿ÊðÄÜÁ¦¡£±¾ÎÄͨ¹ýÒ»¸ö¼òµ¥µÄÀý×Ó£¬ÃèÊöÈçºÎ¿ª·¢Ò»¸ö»ùÓÚ OSGi
ºÍ Spring µÄ Web Ó¦Ó㬲¢ËµÃ÷ÁË¿ª·¢¹ý³ÌÖÐÉæ¼°µ½µÄ¼¼Êõ¹Ø¼üµã¡£
×¢Ò⣺±¾ÎĹ۵ã½ö´ú±í×÷Õß±¾ÈË£¬²»´ú±í IBM ¹«Ë¾¡£
|