ÈüµÏÍø > IT¼¼Êõ Java > JAVAÓëģʽ
  IT×ÊѶËÑË÷
 
IT²úÆ·ËÑË÷
[³ÌÐò¿ª·¢][Íø¹ÜÊÀ½ç][ÍøÂ簲ȫ][Êý¾Ý¿â¼¼Êõ]
[²Ù×÷ϵͳ][¼Î±öÁÄÌ졤ÔÚÏß·Ã̸][»î¶¯¼¯½õ]
[¾«²ÊרÌâ][Symantec×¨Çø][¶©ÔÄIT¼¼ÊõÖÜ¿¯]
[¿ª·¢ÂÛ̳][Íø¹ÜÂÛ̳][°²È«ÂÛ̳][Êý¾Ý¿âÂÛ̳]
[²Ù×÷ϵͳÂÛ̳][Sybase×¨Çø][IBM dW¼¼Êõ×¨Çø]
[²¡¶¾ÇóÖú][²¡¶¾Óë©¶´²¥±¨][Îĵµ¡¤Ô´ÂëÏÂÔØ]

SOA¼Ü¹¹ÖеÄʼþÇý¶¯·þÎñ

·¢²¼Ê±¼ä£º2006.03.15 17:01     À´Ô´£ºMatrix    ×÷Õߣºsteven_guo

SOA¼Ü¹¹ÖеÄʼþÇý¶¯·þÎñ

ʹÓÃMule¿ò¼ÜÉè¼ÆÊ¼þÇý¶¯ºÍÃæÏò·þÎñµÄƽ̨

×÷ÕߣºJeff Hanson

ÒëÕß:steven_guo


°æÈ¨ÉùÃ÷£ºÈκλñµÃMatrixÊÚȨµÄÍøÕ¾£¬×ªÔØÊ±ÇëÎñ±ØÒÔ³¬Á´½ÓÐÎʽ±êÃ÷ÎÄÕÂԭʼ³ö´¦ºÍ×÷ÕßÐÅÏ¢¼°±¾ÉùÃ÷
×÷Õß:Jeff Hanson;steven_guo
Ô­ÎĵØÖ·:http://www.javaworld.com/javaworld/jw-01-2005/jw-0131-soa.html
ÖÐÎĵØÖ·:http://www.matrix.org.cn/resource/article/43/43929_SOA_Event_driven.html
¹Ø¼ü´Ê£º SOA,Event-driven


ÕªÒª
¼°Ê±ÏìӦʵʱµÄ±ä»¯ºÍʼþ³ÉΪÁËÆóÒµ¼¶¼Ü¹¹µÄ×îÖØÒªÐèÇó¡£ÕâÆªÎÄÕÂÌÖÂÛÃæÏò·þÎñ¿ò¼ÜµÄ¼¼ÊõºÍ»úÖÆ£¬ÕâЩ¼¼ÊõʹµÃ¸Ã¿ò¼Ü¸ßЧ·¢ËÍ¡¢½ÓÊÜÄÇЩ¿çÔ½²ã¼¶½á¹¹µÄͬ²½ºÍÒ첽ʼþ£¬¶ø²»ÐèÒªÖªµÀ²úÉúÕâЩʼþµÄϵͳ·½ÃæµÄϸ½Ú

InternetÊÂÎñ£¬B2Bϵͳ£¬P2P³ÌÐò£¬ºÍʵʱ¹¤×÷Á÷£¬ÕâЩϵͳÓÐ×ŷdz£¸ßµÄ¶¯Ì¬ÐÔ£¬¸´ÔÓµÄϵͳ´¦Àí£¬Óô«Í³µÄÃæÏò¹ý³ÌµÄ´¦Àí·½·¨²»ÄÜÓÐЧµØÊµÏÖ¡£

Ò»¸öÃæÏò·þÎñµÄ¿ò¼Ü´ú±íÁËÒ»¸ö¶¯Ì¬µÄÔËÐÐʱ»·¾³£¬ÔÚÄÇÀï·þÎñÌṩÕߺͷþÎñÏû·ÑÕßËÉÉ¢ñîºÏ¡¢¸üÁé»îµÄ×é¼þ½»»¥¡£½¨Á¢Ò»¸ö¾ß±¸ËùÓÐÕâЩÓÅÊÆµÄ½»»¥Ä£ÐÍ£¬³ÉΪÈí¼þ¿ª·¢ÖÐ×îÓÅÏÈ¿¼Âǵġ£Ò»¸öʼþÇý¶¯µÄ½»»¥Ä£ÐÍ£¬±Èͨ³£µÄÇëÇó/ÏìÓ¦»úÖÆ¶Ôʵʱ±ä»¯ºÍ¼¤ÀøÓÐןüºÃµÄÓ¦´ðЧÂÊ¡£

ÃæÏò·þÎñµÄ¼Ü¹¹ºÍʼþÇý¶¯µÄ¼Ü¹¹ÌìÉú¾ÍÓÐ×ŶԷֲ¼Ê½ÏµÍ³µÄÊÊÓ¦ÐÔ£¬ÕâЩ¼Ü¹¹¶¼ÓÐ×ÅÄ£¿éÐÔ¡¢ËÉÉ¢ñîºÏ£¬ºÍÊÊÓ¦ÐÔµÈÌØÐÔ¡£

ÔÚÕâÆªÎÄÕÂÀÌÖÂÛʹÓÃMuleʵÏÖÒ»¸ö¸ßЧµÄʼþÇý¶¯ºÍÃæÏò·þÎñµÄƽ̨£¬Ò»¸öÇáÁ¿¼¶µÄʼþ-ÏûÏ¢¼Ü¹¹£¬ÆóÒµÐÅÏ¢×ÜÏߣ¨ESB£©Ä£Ê½¡£×é¼þºÍ³ÌÐò¿ÉÒÔʹÓÃMuleͨ¹ý¹«¹²µÄJMS»òÆäËûµÄÏûÏ¢´¦Àí¼¼ÊõȥʵÏÖͨÐÅ¡£

ÃæÏò·þÎñ¼Ü¹¹¸ÅÊö
“ÃæÏò·þÎñ”Õâ¸öÊõÓïÒѾ­Ñݱä³ÉÒ»¸ö¼Ü¹¹£¬ÔÚÄÇÀï·þÎñ×÷Ϊһ¸öÈí¼þ×é¼þǶÈëÔÚÆóÒµÒµÎñÂß¼­ºÍÌØÐµĺËÐÄÖУ¬ÌØÐÔÈçÏ£º
·        ËÉÉ¢ñîºÏ£º·þÎñ²¿ÓëÆäËü×é¼þÓÐןùÉîµÙ¹ÌµÄ¹ØÏµ
·        Ð­Òé¶ÀÁ¢£º¶àÖÖЭÒé͸Ã÷·ÃÎÊ
·        Î»Öò»¿ÉÖª£ºÒ»¸ö·þÎñÖ´ÐÐÒ»×éÒµÎñÂß¼­£¬Õë¶ÔÕâ´Îµ÷Ó÷µ»ØÒ»¸ö½á¹û
·        ´ÖÁ£¶È£º²»ÂÛÔÚʲôλÖþù¿É·ÃÎʸ÷þÎñ¡£
·        Î¬»¤ÎÞÓû§×´Ì¬

·þÎñÊǵäÐ͵Ø×¨×¢ÓÚ½â¾öÒµÎñÁìÓòµÄÎÊÌâ¡£

ͨ³££¬·þÎñʹÓö˸ù¾ÝÅäÖÃÊý¾Ý£¬×¢²áÏîºÍÈí¼þ¹¤³§È¥¾ö¶¨¸ø·þÎñµÄλÖã¬Ð­ÒéºÍ¹«¹²½Ó¿Ú¡£

Ó¦ÓóÌÐòͨ³£±»±íÊö³ÉËûÃÇÓÐʲô¹¦ÄÜ£¬¶ø²»Ç¿µ÷Õâ¸öÓ¦ÓóÌÐòÊÇʲô¶«Î÷£¬°üº¬Ê²Ã´¡£»ùÓÚÕâ¸öÔºÓ¦£¬¸ü¶àÖ±½ÓÃèÊöÒ»¸öÓ¦ÓóÌÐòͨ¹ýʹÓö¯´Ê£¨·þÎñ£©¶ø²»ÊÇÓÃÃû´Ê£¨Ó¦ÓÃÖ÷Ì壩¡£ÒòΪ£¬Ò»¸öÃû´Ê£¨Ó¦ÓÃÖ÷Ì壩ÊǶ¨ÒåÁËÁËÒ»¸öÊÂÎñ£¬¶ø²»ÊǶ¯×÷£¬µ±Ç¿ÖưÑÒ»¸ö×é¼þÓÐʲô¹¦ÄÜ×÷Ϊһ¸ö×é¼þÊÇʲôÀ´¶¨Ò壬ÄǾͻá³öÏÖÎó½â¡£ÔÚSOAÁìÓò£¬Ò»¸öÓ¦ÓóÌÐòÄܺÜ×ÔÈ»µÄ±»ÃèÊö£¬ÒòΪÿ¸öÓ¦ÓóÌÐòµÄÒµÎñÂß¼­²Ù×÷Äܱ»ÃèÊö³ÉΪһ¸ö·þÎñµÄÖ´ÐÐÑ¡Ôñ¡£Òò´Ë£¬SOA½â¾öÁËÕâÖÖÎó½â£¬ËüÔÊÐíÓ¦ÓóÌÐòºÍ×é¼þÈ¥·ÃÎÊÒ»¸ö·þÎñËùÄÜʵÏֵŦÄÜ£¬ÀýÈ磬ËûÃÇÖ´ÐÐʲô¶¯×÷¡£ÒÀ´Î£¬Ó¦ÓóÌÐò¿ª·¢ÕßÄܸüÈÝÒׯ¥ÅäËûÃǵÄÐèÒªÓëÊʵ±µÄ·þÎñ£¬ÒòΪ·þÎñ½Ó¿ÚµÄÃèÊö¸üÍêÕûµØËµÇåÁËËûÃÇÒª½â¾öµÄÎÊÌâ¡£

ʼþÇý¶¯¼Ü¹¹¸ÅÊö
Ò»¸öʼþÇý¶¯¿ò¼Ü£¨EDA£©¶¨ÒåÁËÒ»¸öÉè¼ÆºÍʵÏÖÒ»¸öÓ¦ÓÃϵͳµÃ·½·¨Ñ§£¬ÔÚÕâ¸öϵͳÀïʼþ¿É´«ÊäÓÚËÉÉ¢ñîºÏµÄÈí¼þ×é¼þºÍ·þÎñÖ®¼ä¡£Ò»¸öʼþÇý¶¯ÏµÍ³µäÐ͵ØÓÉʼþÏû·ÑÕߺÍʼþ²úÉúÕß×é³É¡£Ê¼þÏû·ÑÕßÏòʼþ¹ÜÀíÆ÷¶©ÔÄʼþ£¬Ê¼þ²úÉúÕßÏòʼþ¹ÜÀíÆ÷·¢²¼Ê¼þ¡£µ±Ê¼þ¹ÜÀíÆ÷´Óʼþ²úÉúÕßÄǽÓÊÕµ½Ò»¸öʼþʱ£¬Ê¼þ¹ÜÀí°ÑÕâ¸öʼþתË͸øÏàÓ¦µÄʼþÏû·ÑÕß¡£Èç¹ûÕâ¸öʼþÏû·ÑÕßÊDz»¿ÉÓõģ¬Ê¼þ¹ÜÀíÕ⽫±£ÁôÕâ¸öʼþ£¬Ò»¶Î¼ä¸ôÖ®ºóÔÙ´ÎתË͸ÃʼþÏû·ÑÕß¡£ÕâÖÖʼþ´«ËÍ·½·¨ÔÚ»ùÓÚÏûÏ¢µÄϵͳÀï¾ÍÊÇ£º´¢´æ£¨store£©ºÍתËÍ£¨forward£©¡£

¹¹½¨Ò»¸ö°üº¬Ê¼þÇý¶¯¹¹¼ÜµÄÓ¦ÓóÌÐòºÍϵͳ£¬ÕâÑù¾ÍʹµÃÕâЩӦÓóÌÐòºÍϵͳÏìÓ¦¸üÁéÃô£¬ÒòΪʼþÇý¶¯µÄϵͳ¸üÊʺÏÓ¦ÓÃÔÚ²»¿ÉÔ¤ÖªµÄºÍÒì²½µÄ»·¾³Àï¡£

ʼþÇý¶¯Éè¼ÆºÍ¿ª·¢µÄÓÅÊÆ£º
ʼþÇý¶¯Éè¼ÆºÍ¿ª·¢ËùÌṩµÄÓÅÊÆÈçÏ£º
·        ¿ÉÒÔ¸üÈÝÒ׿ª·¢ºÍά»¤´ó¹æÄ£·Ö²¼Ê½Ó¦ÓóÌÐòºÍ²»¿ÉÔ¤ÖªµÄ·þÎñ»òÒì²½·þÎñ
·        ¿ÉÒÔºÜÈÝÒ×£¬µÍ³É±¾µØ¼¯³É¡¢ÔÙ¼¯³É¡¢ÔÙÅäÖÃеĺÍÒÑ´æÔÚµÄÓ¢Ó³ÌÐòºÍ·þÎñ
·        ´Ù½øÔ¶³Ì×é¼þºÍ·þÎñµÄÔÙʹÓã¬ÓµÓÐÒ»¸ö¸üÁéÃô¡¢Ã»ÓÐBugµÄ¿ª·¢»·¾³
·        ¶ÌÆÚÀûÒæ£º¸üÈÝÒ×¶¨ÖÆ¡£ÒòΪÉè¼Æ¶Ô¶¯Ì¬´¦ÀíÓÖ¸üºÃµÄÏìÓ¦¡£
·        ³¤ÆÚÀûÒæ£ºÏµÍ³ºÍ×éÖ¯µÄ״̬±äµÃ¸ü¾«×¼£¬¶Ôʵʱ±ä»¯µÄÏìÓ¦½Ó½üÓÚͬ²½¡£

EDA ºÍ SOA ÕûºÏ
²»ÏóÇëÇó/ÏìӦϵͳ£¬ÒªÇóÇëÇóÕß±ØÐëÃ÷È··¢ËÍÇëÇóÐÅÏ¢£¬¶øÒ»¸öʼþÇý¶¯ ¼Ü¹¹Ìṩһ¸ö»úÖÆÈ¥¶¯Ì¬ÏìӦʼþ¡£ÔÚÒ»¸öEDAϵͳÀʼþ²úÉúÕß·¢²¼Ê¼þ£¬Ê¼þÏû·ÑÕß½ÓÊÜʼþ¡£

ÒµÎñϵͳ¿ÉÒÔ´ÓSOAºÍEDAÖÐÊÜÒæ·Ëdz£¬ÒòΪµ±Ê¼þ·¢ÉúʱEDAÄÜ´¥·¢Ê¼þÏû·ÑÕߣ¬SOA·þÎñ¿ÉÒÔ¿ìËٵشÓÏàͬµÄÏû·ÑÕßÖзÃÎÊ¡¢²éѯ¡£

ϵͳҪÓÐ×î¸ßµÄÏìÓ¦ÐÔ£¬µ±Ê¼þ´¥·¢Ê±Õâ¸öϵͳ±ØÐëÄÜ¿ìËÙ¾ö¶¨±ØÐëµÄ¶¯×÷¡£µ½Ê¼þ½áÊø£¬Ê¼þÓ¦¸Ã±»·¢²¼ºÍÏû·Ñ£¬¶øÇÒʼþÒª´©Ô½SOAËùÓеı߽磬°üÀ¨Õû¸öÌåϵ½á¹¹ºÍÎïÀí²ã¡£

ͼ1ÑÝʾÁËʼþ±»¼¤·¢ºÍ´©Ô½Ìåϵ½á¹¹µÄËùÓвã
image
ͼ1£ºÊ¼þ´©Ô½Ìåϵ½á¹¹µÄ²ã¼¶

ÔÚͼ1µÄ»·¾³ÖУ¬Ò»¸öʼþÄܱ»¶¨ÒåΪÈκÎϵͳµÄ£¬Æ½Ì¨µÄ£¬×é¼þµÄ£¬ÒµÎñµÄ»òÓ¢Ó½ø³ÌµÄ±ä»¯¡£Ê¼þ¿ÉÄÜÊǸ߲ãµÄÒµÎñʼþ»òµ×²ãµÄϵͳʼþ¡£ÒòΪʼþÄܱ»´«ËͺͽÓÊÕ£¬¶©ÔÄʼþµÄÓ¢Ó³ÌÐòºÍ·þÎñÄܶÔÕâЩ±ä»¯×ö³öÏìÓ¦¡£

ʼþ·ÖÀàºÍÒò¹û¹ØÏµ

Àí½âÒ»¸öʼþµÄÃØ¾÷ÊÇÖªµÀÕâ¸öʼþ·¢ÉúµÄÔ­Òò£¬Õâ¸ö¾ÍÊÇͨ³£ËµµÄÒò¹û¹ØÏµ¡£Ê¼þµÄÒò¹û¹ØÏµµäÐ͵طÖΪÁ½Àࣺ
·        Æ½ÐйØÏµ£ºÊ±¼äÔ´ºÍ´¥·¢ÔÚÌåϵ½á¹¹µÄͬһ²ã¡£
·        ´¹Ö±¹ØÏµ£ºÊ±¼äÔ´ºÍ´¥·¢ÔÚÌåϵ½á¹¹µÄ²»Í¬²ã¡£

´¹Ö±¹ØÏµÒâζ×ÅÒ»¸öʼþµÄ·ÖÀà·½·¨£¬ÕâЩʼþ±£ÁôÁËһЩ²»±äµÄ¶«Î÷¶ø´©Ô½Ò»¸öϵͳ²»Í¬µÄ²ã£¬Ê¼þ·ÖÀàÈçÏ£º
·        ÉúÃüÖÜÆÚʼþ£ºÒ»¸öʵÌåÉúÃüÖÜÆÚµÄ±ä»¯£¬ÀýÈçÒ»¸ö½ø³ÌµÄÍ£Ö¹»òÆô¶¯
·        Ö´ÐÐʼþ£ºÔËÐÐʱʼþ£¬ÀýÈç·þÎñ»ò×é¼þµÄµ÷ÓÃ
·        ¹ÜÀíʼþ£ºµ±Ò»¸ö״̬³¬¹ýÁËÔ¤Ïȵ͍Òå»òÒ»¶¨·¶Î§Ê±

ƽÐйØÏµÒâζ×ÅÒ»¸öʼþµÄ·ÖÀà·½·¨£¬ÕâЩʼþ±£ÁôÁËһЩ²»±äµÄ¶«Î÷¶ø´©Ô½Ò»¸öϵͳ²»Í¬µÄ²ã£¬Ê¼þ·ÖÀàÈçÏ£º
·        ÏµÍ³²ãʼþ£ºÏµÍ³¼¶¶¯×÷£¬ÀýÈç´´½¨Ò»¸öÎļþ»ò¹Ø±ÕÒ»¸ö¶Ë¿Ú
·        Æ½Ì¨²ãʼþ£ºÆ½Ì¨¼¶¶¯×÷,ÀýÈçÐÞ¸ÄÒ»¸öÊý¾ÝÔ´»òÔö¼ÓÒ»¸öеķþÎñ
·        ×é¼þ²ãʼþ£º×é¼þ¼¶¶¯×÷£¬ÀýÈçÊÓͼ¶ÔÏóµÄת»»»ò״̬»ú±ä»¯
·        ÒµÎñ²ãʼþ£ºÒµÎñ¼¶¶¯×÷£¬ÀýÈç´´½¨Óû§»òɾ³ýÕʺÅ
·        Ó¦Óòãʼþ£ºÓ¦Óü¶¶¯×÷£¬ÀýÈçÔö¼Ó±£ÏÕ½ð»ò±¨¼ÛÌá½»

Ðí¶àESB¿ò¼ÜºÍƽ̨Òâʶµ½ÔÚSOAÖаüº¬»ùÓÚʼþÇý¶¯µÄͨÐÅÓкܶàÓÅÊÆ¡£ÔÚJava¿ª·¢ÁìÓò£¬Mule¾ÍÊÇÕâЩ×îÓÐǰ¾°µÄƽ̨֮һ¡£

½éÉÜMule
MuleÊÇÒ»¸ö¿ªÔ´ÏûÏ¢ESB¿ò¼Ü£¬Ò»¸öÏûÏ¢´úÀí£¬Ò»¸ö·Ö¼¶Ê¼þÇý¶¯µÄ¿ò¼Ü£¨SEDA£©¡£SEDA¶¨ÒåÁËÒ»¸öÒÀÕÕ·Ö¼¶¶ÓÁС¢¸ß¶È²¢ÐÐµÄÆóÒµ¼¶Æ½Ì¨¡£MuleʹÓÃSEDµÄ¸ÅÄîÔö¼Óʼþ´¦ÀíµÄÐÔÄÜ¡£

MuleÖ§³Öͬ²½¡¢Òì²½ºÍÇëÇóÏìӦʼþ£¬Ê¼þ´¦ÀíºÍ´«ÊäʵÓò»Í¬µÄ¼¼ÊõÀýÈçJMS£¬HTTP£¬µç×ÓÓʼþºÍ»ùÓÚXMLµÄRPC¡£MuleÄܺÜÈÝÒ×µØÇ¶Èëµ½ÈκÎÓ¦Óÿò¼ÜÖУ¬Ã÷È·Ö§³ÖSpring¿ò¼Ü¡£MuleÒ²Ö§³Ö¶¯Ì¬µÄ£¬Ô¤¶¨ÒåµÄ£¬»ùÓÚÄÚÈݵĺͻùÓÚ¹æÔòµÄÏûϢ·ÓÉ¡£MuleʹµÃÔ¤¶¨ÒåµÄºÍ¼Æ»®ÐÔµÄÊÂÎñ¸üÈÝÒ×£¬°üÀ¨XAÊÂÎñÖ§³Ö¡£MuleÌṩһ¸öÓдú±íÐÔµÄ״̬µ÷Óã¨REST£©APIÌṩ¸øÓëWebµÄʼþ·ÃÎÊ¡£

Mule ESBģʽÇý¶¯ÏµÍ³ÖÐËùÓзþÎñ£¬Õâ¸öϵͳÓÐ×ÅÒ»¸ö·ÖÀëµÄÏûϢͨѶÖÐÊà¡£·þÎñ×¢²áÔÚ×ÜÏßÉÏ£¬µ«²»ÖªµÀÆäËûÈκα»×¢²áµÄÏûÏ¢£»Òò´Ë£¬Ã¿¸ö·þÎñÖ»¹ØÐÄ´¦ÀíËüÊÕµ½µÄʼþ¡£MuleÒ²°ÑÈÝÆ÷£¬´«Ê䣬ת»»Ï¸½Ú´Ó·þÎñÖзÖÀë³öÀ´£¬ÔÊÐíÈκζÔÏó×÷Ϊ·þÎñ×¢²áµ½×ÜÏߵġ£

ÎÒʹÓÃMule¿ò¼ÜÈ¥ÑÝʾÕâÆªÎÄÕÂËùÌÖÂ۵ĸÅÄîºÍ˼Ïë

Mule¿ò¼Ü
Mule¿ò¼ÜÖ÷Òª°üº¬ÏÂÁÐÄÚÈÝ£º

ͨÓÃÏûÏ¢¶ÔÏó£¨UMO£©API
UMO APIµÚÒ»ÁËËùÓб»Mule ¹ÜÀíµÄ·þÎñºÍ¶ÔÏó½»»¥

UMO×é¼þ
ÔÚMuleϵͳÖУ¬UMO×é¼þ¿ÉÒÔʹÈκÎÔÚϵͳÖнÓÊÕ¡¢´¦ÀíºÍ·¢ËÍʼþÏûÏ¢µÄ×é¼þ

Mule·þÎñÆ÷
Mule·þÎñÆ÷×é¼þÊÇÒ»¸öÔÚMuleÓ¦Óû·¾³ÖÐ×Ô¶¯¼ÓÔØµÄ·þÎñÆ÷Ó¦ÓóÌÐò

ÃèÊöÆ÷
ÃèÊöÆ÷×é¼þÃèÊöÒ»¸öMule UMOÊôÐÔ¡£ÐµÄMule MUO¶ÔÏóÄܱ»ËüÃÇËù¹ØÁªµÄÃèÊöÆ÷³õʼ»¯¡£Ò»¸öÃèÊöÆ÷°üº¬£º
·        UMO×é¼þÃû
·        UMO×é¼þ°æ±¾
·        UMO×é¼þʵÏÖÀà
·        Òì³£²ßÂÔ
·        ÈëÕ¾ºÍ³öÕ¾ÌṩÕß
·        ÈëÕ¾ºÍ³öվ·ÓÉÆ÷
·        À¹½ØÆ÷
·        ½ÓÊպͷ¢ËÍÇÐÈëµã
·        ÈëÕ¾ºÍ³öվת»»Æ÷
·        ¸÷ÖÖ¸÷ÑùµÄÌØÐÔ

Á¬½ÓÆ÷
Á¬½ÓÆ÷ÊÇһЩ×é¼þ£¬ËüÃÇ¿ÉÒÔÁ¬½Óµ½Íⲿϵͳ»òÆäËûЭÒé¡¢¹ÜÀíÄÇЩϵͳ»òЭÒéµÄ״̬¡£Ò»¸öÁ¬½ÓÆ÷¸ºÔð·¢ËÍÏûÏ¢µ½ÍⲿÏûÏ¢½ÓÊÕÆ÷¡¢¹ÜÀíÏûÏ¢½ÓÊÕÆ÷µÄ×¢²áºÍ×¢Ïú¡£

ÌṩÕß

ÌṩÕßÊÇһЩ×é¼þ£¬¹ÜÀí°ÑʼþÊý¾Ý·¢Ë͵½Íⲿϵͳ¡¢´ÓÍⲿϵͳ½ÓÊÜʼþÊý¾ÝºÍת»»Ê¼þÊý¾ÝµÈÊÂÏî¡£ÔÚMule¿ò¼ÜÀËûÃÇÄÜÁ¬½Óµ½Íⲿϵͳ»òÆäËû×é¼þ¡£Ò»¸öÌṩÕß¾ÍÏñÒ»¸ö´ÓÍⲿϵͳ½øÈëMule»ò´ÓMuleÄÚ²¿·ÃÎÊÍⲿϵͳµÄÇŽӯ÷¡£Êµ¼ÊÉÏ£¬ÌṩÕßÓÐÒ»×é¶ÔÏó×é³É£¬¿ÉÒÔÓëϲãϵͳÁ¬½Ó²¢Óë֮ͨÐÅ¡£ÌṩÕßµÄ×é³É²¿¼þÊÇ£º
·        Á¬½ÓÆ÷£º¸ºÔðÁ¬½Óµ½Ï²ãϵͳ
·        ÏûÏ¢½ÓÊÕÆ÷£º´Óϵͳ½ÓÊÕʼþ
·        Á¬½Óµ÷¶ÈÕߣº´«ËÍϵͳµ½ÏµÍ³
·        ×ª»»Æ÷£º×ª»»´Óϵͳ½ÓÊÕµ½µÄ»òÒª·¢Ë͵½ÏµÍ³µÄÊý¾Ý
·        ÖÕ¶Ë£ºËù½¨Á¢Á¬½ÓµÄͨµÀµØÖ·
·        ÊÂÎñÅäÖÆ£º¶¨ÒåÁ¬½ÓµÄÊÂÎñÊôÐÔ

Öն˵÷½âÕß
µ±UMO×é¼þ½ÓÊÕµ½Ò»¸öʼþʱ£¬Öն˵÷½âÕß¾ö¶¨È¥µ÷ÓÃËüµÄʲô·½·¨

ת»»Æ÷
ת»»Æ÷×é¼þ¸ºÔðË«Ïòת»»ÏûÏ¢»òʼþµÄÓÐÐ§ÔØºÉ¡£µ±Ò»¸öʼþµ½´ï½ÓÊյĶÔÏó֮ǰ£¬×ª»»Æ÷¿ÉÒÔÁ´½Óµ½Ò»ÆðÈ¥Ö´ÐÐһϵÁеÄ×°»»²Ù×÷¡£

ÏûÏ¢ÊÊÅäÆ÷
ÏûÏ¢ÊÊÅäÆ÷ÌṩһÖй«¹²µÄ·½Ê½È¥¶ÁÍⲿϵͳµÄÒì¹¹Êý¾Ý¡£

ÏûÏ¢½ÓÊÕÆ÷
ÏûÏ¢½ÓÊÕÆ÷ÊÇһЩÁÐÖն˼àÌýỊ̈߳¬¸ºÔð´ÓÍⲿϵͳ½ÓÊÕÊý¾Ý¡£

ÏûÏ¢µ÷¶ÈÕß
ÏûÏ¢µ÷¶ÈÕß·¢ËÍ£¨Í¬²½£©»òÅÉDz£¨Òì²½£©Ê±¼äµ½Ï²ãϵͳ¡£

ÏûϢ·ÓÉÆ÷
ÏûϢ·ÓÉÆ÷ÊÇһϵÁÐ×é¼þ£¬¿ÉÒÔʹ±»ÅäÖÆµÄUMO×é¼þÒÀ¾ÝÏûÏ¢»òÆäËûÅäÖÆÍ¼Â·ÓÐÒ»¸öÏûÏ¢µ½²»Í¬µÄÌṩÕß¡£

´úÀí
´úÀíÊÇһЩ°ï¶¨µ½Íⲿ·þÎñµÄ×齨£¬ÀýÈçJME·þÎñÆ÷¡£

MuleÄ£ÐÍ
Ò»¸öMuleÄ£ÐÍ·â×°ºÍ¹ÜÀíÒ»¸öMule·þÎñÆ÷ʵÀýµÄÔËÐÐʱÐÐΪ¡£Ò»¸öÄ£ÐͰüº¬£º
·        ÃèÊöÆ÷
·        UMO×é¼þ
·        Ò»¸öÖն˵÷½âÕß
·        Ò»¸öÉúÃüÖÜÆÚÊÊÅäÆ÷¹¤³§
·        Ò»¸ö×é¼þµ÷½âÕß
·        Ò»¸ö³Ø»¯¹¤³§
·        Ò»¸öÒì³£²ßÂÔ

Mule¹ÜÀíÆ÷
Mule¹ÜÀíÆ÷ά»¤ºÍÌṩÒÔÏ·þÎñ £º
·        ´úÀí
·        ÌṩÕß
·        Á¬½ÓÆ÷
·        ÖÕ¶Ë
·        ×ª»»Æ÷
·        À¹½ØÆ÷¶ÑÕ»
·        Ò»¸öMuleÄ£ÐÍ
·        Ò»¸öMule·þÎñÆ÷
·        ÊÂÎñ¹ÜÀíÆ÷
·        Ó¦ÓóÌÐòÊôÐÔ
·        MuleÅäÖÆ

ͼ2ÑÝʾÁËMule¿ò¼ÜÉϲãÏûÏ¢Á÷ÊÓͼ
image
ͼ2£ºMuleÉϲã¼Ü¹¹

Muleʼþ¶ÔÏó
Muleʼþ¶ÔÏó¶ÔÏó°üº¬Ê¼þÊý¾ÝºÍ±»×é¼þËù¸ÐÖªºÍ²Ù¿ØµÄÊôÐÔ¡£ÊôÐÔÊÇÈÎÒâµÄ£¬ÔÚʼþ´´½¨Ö®ºóÈκÎʱ¼ä¿É±»ÉèÖá£

org.mule.umo.UMOEventÀà´ú±íÁËÒ»¸öÔÚMule»·¾³ÖгöÏÖµÄʱ¼ä¡£ËùÓÐÔÚ×é¼þÖ®¼ä·¢ËÍ»ò½ÓÊÕµÄÊý¾Ý¶¼ÊÇorg.mule.umo.UMOEventµÄÒ»¸öʵÌå¡£¿ÉÒÔ·ÃÎÊÒ»¸öԭʼµÄ»ò±»×ª»»µÄMuleʼþ¶ÔÏóÖеÄÊý¾ÝÄÜ¡£Ò»¸öMuleʼþ¶ÔÏóʹÓÃÒ»¸öÓëÌṩÕß¹ÜÀíµÄÌṩÕßת»»Êý¾Ý£¬ÌṩÕßÊÕµ½Êý¾Ýºó°ÑʼþÖеÄÓÐÐ§ÔØºÉת»»³Éµ±Ç°×é¼þËùʶ±ðµÄ¸ñʽ¡£

Ò»¸öMuleʼþ¶ÔÏóµÄÓÐЧÓÐÐ§ÔØºÉÄÜͨ¹ýorg.mule.umo.UMOMessage½Ó¿Ú·ÃÎÊ£¬Ò»¸öorg.mule.umo.UMOMessageʵÀýÓÉÓÐÐ§ÔØºÉºÍËüµÄÊôÐÔ×é³É¡£Õâ¸ö½Ó¿ÚÊDz»Í¬¼¼ÊõʵÏÖµÄÏûÏ¢¶ÔÏóµÄÒ»¸ö³éÏó¡£

org.mule.extras.client.MuleClientÀඨÒåÁËÒ»¸ö¼òµ¥µÄ½è¿Ú£¬ÔÊÐíMule¿Í»§¶Ë´ÓMule·þÎñÆ÷½ÓÊպͷ¢ËÍʼþÊý¾Ý¡£ÔÚ´ó¶àÊýMuleÓ¦ÓóÌÐòÀʱ¼äÊDZ»Ò»Ð©ÍⲿµÄ²¢·¢ÐÐΪËù´¥·¢£¬ÀýÈçÒ»¸öÖ÷ÌâÉϽÓÊÕµ½ÏûÏ¢»òÔÚĿ¼ÀïÒ»¸öÎļþ±»É¾³ý¡£

ÏÂÃæÑÝʾÁËÈçºÎÈ¥·¢ËÍÒ»¸öͬ²½Ê¼þµ½ÁíÍâµÄMule×é¼þ£º
String componentName = "MyReceiver"; // The name of the receiving component. 
String transformers = null; // A comma-separated list of transformers
                            // to apply to the result message.
String payload = "A test event"; // The payload of the event.
java.util.Map messageProperties = null; // Any properties to be associated
                                        // with the payload.
MuleClient client = new MuleClient();
UMOMessage message = client.sendDirect(componentName,
                                       transformers,
                                       payload,
                                       messageProperties);
System.out.println("Event result: " + message.getPayloadAsString());


MuleClientÀàÐèÒªÒ»¸ö·þÎñÆ÷URLÇø¶¨ÒåËüËùÁ¬½ÓµÄÔ¶³ÌMule·þÎñÆ÷µÄÖÕ¶Ë¡£URL¶¨ÒåÁË´«ÊäЭÒé¡¢½ÓÊÕÏûÏ¢µÄµØÖ·£¬ÌṩÕßÔÚÅÉDzһ¸öʼþʱ¿ÉÒÔËæÊ±Ê¹ÓÃÕâЩÐÅÏ¢¡£ÖÕ¶ËÀýʾÈçÏ£º
·        vm://com.jeffhanson.receivers.Default: ʹÓÃÐéÄâ»úµÄÌṩÕßÅÉDzµ½Ò»¸öcom.jeffhanson.receivers.Default
·        jms://jmsProvider/accounts.topic:ʹÓÃÈ«¾Ö×¢²áµÄjmsProviderÅÉDzһ¸öJMSÏûÏ¢µ½ccounts.topic.
·        jms://accounts.topic: ʹÓõÚÒ»¸ö£¨Ä¬ÈÏ£©µÄJMSÌṩÕßÅÉDzJMSÏûÏ¢

Muleʼþ´¦Àí
Mule¿ÉÒÔÔÚÈýÖÖ²»Í¬µÄ·½Ê½·¢ËͺͽںóËÒʼþ£º
1£®Òì²½·½Ê½£ºÒ»¸ö×é¼þ¿Éͨ¹ý²»Í¬µÄÏß³Ìͬʱ´¦Àí¶à¸öʼþµÄ·¢ËͺͽÓÊÕ
2£®Í¬²½·½Ê½£ºÔÚÒ»¸ö×é¼þÖØÐ¹¤×÷֮ǰ£¬Ò»¸öµ¥Ò»µÄʼþ±ØÐë±»´¦ÀíÍê¡£»»ÑÔÖ®£¬Ò»¸ö´´½¨ÁËʼþµÄ×齨·¢ËÍʼþʱ½«±»×è¶Ï£¬Ö±µ½·¢ËÍÈÎÎñÍê³É£¬Òò´Ë£¬Ò»´ÎÖ»ÔÊÐí´¦ÀíÒ»¸öʼþ
3£®ÇëÇó-Ó¦´ð·½Ê½£ºÒ»¸ö×齨רÃÅÇëÇóÒ»¸öʼþ£¬È»ºóµÈ´ýÒ»¸öÌØ¶¨µÄʱ¼äÈ¥½ÓÊÕ»ØÓ¦¡£
org.mule.impl.MuleComponentʵÏÖÀàÌṩÁËÒ»¸ö¾ßÌåµÄ×齨À࣬Ëü°üÀ¨ÓÖÓд´½¨£¬·¢ËͺͽÓÊÕʼþµÄ¹¦ÄÜ¡£
Ö´ÐÐͬ²½¶¯×÷µÄ¶ÔÏóÓ¦¸ÃʵÏÖorg.mule.umo.lifecycle.Callable½Ó¿Ú£¬Õâ¸ö¶¨ÒåÁËÒ»¸ö¼òµ¥µÄ·½·¨Object onCall(UMOEventContext eventContext)¡£Callable½Ó¿ÚÌṩ֧³Öʼþµ÷ÓõÄUMO¶ÔÏó¡£ËäÈ»²»ÊÇÇ¿ÖÆµÄ£¬µ«Õâ¸ö½Ó¿ÚÌṩÁËÒ»¸öÉúÃüÖÜÆÚ¿ØÖƵķ½·¨£¬µ±ÊµÏÖÕâ¸ö½Ó¿ÚµÄ×齨½ÓÊÕµ½Ò»¸öÏûϢʱִÐÐÕâ¸ö·½·¨¡£ÏÂÃæÕ¹Ê¾ÁËÕâ¸ö½Ó¿ÚµÄ¼òµ¥ÊµÏÖ¡£
import org.mule.umo.lifecycle.Callable;

public class EchoComponent
   implements Callable
{
    public Object onCall(UMOEventContext context) throws Exception
    {
        String msg = context.getMessageAsString();
        // Print message to System.out
        System.out.println("Received synchronous message: " + msg);
        // Echo transformed message back to sender
        return context.getTransformedMessage();
    }
}


´ÓonCall£¨£©·½·¨¿É·µ»ØÈκζÔÏó¡£µ±×é¼þµÄUMOLifecycleAdapter½ÓÊÕÕâ¸ö¶ÔÏóʱ£¬ËüÊ×ÏÈ¿´¿´Õâ¸ö¶ÔÏóÊÇ·ñÊÇÒ»¸öUMOMessage£»Èç¹ûÕâ¸ö¶ÔÏó¼È²»ÊÇUMOMessageÒ²²»ÊÇNull£¬ÄÇôÒÔÕâ¸ö¶ÔÏó×÷ΪÓÐÐ§ÔØºÉÈ¥´´½¨Ò»¸öеÄÏûÏ¢¡£Õâ¸öÐÂʼþ¾­ÓÉËùÅäÖÆµÄ³öվ·ÓÐÆ÷·¢²¼£¬Èç¹ûUMO¶ÔÏóÒѾ­ÅäÖÆÁËÒ»¸ö³öվ·ÓÉÆ÷£¬ÄÇôÔÚUMOEventContextʵÀýÖв»Äܵ÷ÓÃsetStopFurtherProcessing(true)·½·¨¡£

MuleʹÓõÄÒ»¸ö¼òµ¥µÄʼþ¿ò¼Ü
ÈÃÎÒÃǰÑÕ⼸¶ÎMuleµÄ´úÂë·Åµ½Ò»ÆðÈ¥¹¹½¨Ò»¸ö¼òµ¥µÄʼþ¿ò¼Ü¡£Õâ¸ö¿ò¼Ü°üº¬Ò»¸ö¸ºÔð×¢²áºÍ×¢ÏúʼþµÄ¹ÜÀíÆ÷£¬¿ÉÒÔ½ÓÊÕʼþ£¬ºÍ¸ºÔð·ÓÐͬ²½ºÍÒì²½ÏûÏ¢µ½ËûÃÇÏàÓ¦µÄ·þÎñ¡£

MuleµÄÐéÄâ»úЭÒéÒªÇóÓÐÒ»¸ö·ÅÖÃʼþ¹ÜÀíÆ÷¹¤×÷Ŀ¼META-INF/services/org/mule/providers/vm·¾¶ÏµĿÉÅäÖÆÎļþ£¬ÅäÖÆÎļþΪЭÒ鶨ÒåÁË´óÁ¿µÄ×é¼þ£¬ÀýÈçÁ¬½ÓÆ÷ºÍµ÷¶È¹¤³§¡£ÅäÖÆÎļþµÄÄÚÈÝÈçÏ£º
connector=org.mule.providers.vm.VMConnector
dispatcher.factory=org.mule.providers.vm.VMMessageDispatcherFactory
message.receiver=org.mule.providers.vm.VMMessageReceiver
message.adapter=org.mule.providers.vm.VMMessageAdapter
endpoint.builder=org.mule.impl.endpoint.ResourceNameEndpointBuilder


Ò»¸ö¼òµ¥µÄ½è¿Ú¶¨ÒåÁËʼþ¹ÜÀíÆ÷µÄ¹«Óнṹ£º
package com.jeffhanson.mule;

import org.mule.umo.FutureMessageResult;

public interface EventManager
{
   /**
    * Sends an event message synchronously to a given service.
    *
    * @param serviceName    The name of the service to which the event
    *                       message is to be sent.
    * @param payload        The content of the event message.
    * @return Object        The result, if any.
    * @throws EventException on error
    */
   public Object sendSynchronousEvent(String serviceName,
                                      Object payload)
      throws EventException;

   /**
    * Sends an event message asynchronously to a given service.
    *
    * @param serviceName    The name of the service to which the event
    *                       message is to be sent.
    * @param payload        The content of the event message.
    * @return FutureMessageResult The result, if any.
    * @throws EventException on error
    */
   public FutureMessageResult sendAsynchronousEvent(String serviceName,
                                                    Object payload)
      throws EventException;

   /**
    * Starts this event manager.
    */
   public void start();

   /**
    * Stops this event manager.
    */
   public void stop();

   /**
    * Retrieves the protocol this event manager uses.
    * @return
    */
   public String getProtocol();

   /**
    * Registers a service to receive event messages.
    *
    * @param serviceName      The name to associate with the service.
    * @param implementation   Either a container reference to the service
    *                         or a fully-qualified class name.
    */
   public void registerService(String serviceName,
                               String implementation)
      throws EventException;

   /**
    * Unregisters a service from receiving event messages.
    *
    * @param serviceName  The name associated with the service to unregister.
    */
   public void unregisterService(String serviceName)
      throws EventException;
}


ʼþ¹ÜÀíÆ÷ÀàÊDZ»·â×°ÔÚÒ»¸ö¹¤³§ÀàÀÒò´Ë£¬¿ÉÒÔÒÀ¾ÝÐèҪȥ¸Ä±äËüµÄʵÏÖ¶ø²»»áÓ°Ïìµ½ËüµÄ¿Í»§¶Ë¡£Ê¼þ¹ÜÀíÆ÷ʵÏÖÈçÏ£º
package com.jeffhanson.mule;

import org.mule.umo.*;
import org.mule.extras.client.MuleClient;
import org.mule.impl.endpoint.MuleEndpoint;
import org.mule.config.QuickConfigurationBuilder;

import java.util.HashMap;
import java.util.Map;

public class EventManagerFactory
{
   private static HashMap instances = new HashMap();


   /**
    * Retrieves the event manager instance for a given protocol.
    *
    * @param protocol      The protocol to use.
    * @return EventManager The event manager instance.
    */
   public static EventManager getInstance(String protocol)
   {
      EventManager instance = (EventManager)instances.get(protocol);

      if (instance == null)
      {
         instance = new EventManagerImpl(protocol);
         instances.put(protocol, instance);
      }

      return instance;
   }

   /**
    * A concrete implementation for a simple event manager.
    */
   private static class EventManagerImpl
      implements EventManager
   {
      private UMOManager manager = null;
      private QuickConfigurationBuilder builder = null;
      private MuleClient eventClient = null;
      private String protocol = null;
      private MuleEndpoint receiveEndpoint = null;
      private MuleEndpoint sendEndpoint = null;

      private EventManagerImpl(String protocol)
      {
         this.protocol = protocol;
      }

      /**
       * Starts this event manager.
       */
      public void start()
      {
         try
         {
            builder = new QuickConfigurationBuilder();
            manager = builder.createStartedManager(true,
                                                   protocol + "tmp/events");
            eventClient = new MuleClient();
            receiveEndpoint = new MuleEndpoint(protocol
                                               + "tmp/events/receive");
            sendEndpoint = new MuleEndpoint(protocol + "tmp/events/send");
         }
         catch (UMOException e)
         {
            System.err.println(e);
         }
      }

      /**
       * Stops this event manager.
       */
      public void stop()
      {
         try
         {
            manager.stop();
         }
         catch (UMOException e)
         {
            System.err.println(e);
         }
      }

      /**
       * Retrieves the protocol this event manager uses.
       * @return
       */
      public String getProtocol()
      {
         return protocol;
      }

      /**
       * Registers a service to receive event messages.
       *
       * @param serviceName      The name to associate with the service.
       * @param implementation   Either a container reference to the service
       *                         or a fully-qualified class name
       *                         to use as the component implementation.
       */
      public void registerService(String serviceName,
                                  String implementation)
         throws EventException
      {
         if (!manager.getModel().isComponentRegistered(serviceName))
         {
            try
            {
               builder.registerComponent(implementation,
                                         serviceName,
                                         receiveEndpoint,
                                         sendEndpoint);
            }
            catch (UMOException e)
            {
               throw new EventException(e.toString());
            }
         }
      }

      /**
       * Unregisters a service from receiving event messages.
       *
       * @param serviceName  The name associated with the service to unregister.
       */
      public void unregisterService(String serviceName)
         throws EventException
      {
         try
         {
            builder.unregisterComponent(serviceName);
         }
         catch (UMOException e)
         {
            throw new EventException(e.toString());
         }
      }

      /**
       * Sends an event message synchronously to a given service.
       *
       * @param serviceName    The name of the service to which the event
       *                       message is to be sent.
       * @param payload        The content of the event message
       * @return Object        The result, if any.
       * @throws EventException on error
       */
      public Object sendSynchronousEvent(String serviceName,
                                         Object payload)
         throws EventException
      {
         try
         {
            if (!manager.getModel().isComponentRegistered(serviceName))
            {
               throw new EventException("Service: " + serviceName
                                        + " is not registered.");
            }

            String transformers = null;
            Map messageProperties = null;
            UMOMessage result = eventClient.sendDirect(serviceName,
                                                       transformers,
                                                       payload,
                                                       messageProperties);
            if (result == null)
            {
               return null;
            }
            return result.getPayload();
         }
         catch (UMOException e)
         {
            throw new EventException(e.toString());
         }
         catch (Exception e)
         {
            throw new EventException(e.toString());
         }
      }

      /**
       * Sends an event message asynchronously.
       *
       * @param serviceName    The name of the service to which the event
       *                       message is to be sent.
       * @param payload        The content of the event message.
       * @return FutureMessageResult The result, if any
       * @throws EventException on error
       */
      public FutureMessageResult sendAsynchronousEvent(String serviceName,
                                                       Object payload)
         throws EventException
      {
         FutureMessageResult result = null;

         try
         {
            if (!manager.getModel().isComponentRegistered(serviceName))
            {
               throw new EventException("Service: " + serviceName
                                        + " is not registered.");
            }

            String transformers = null;
            Map messageProperties = null;
            result = eventClient.sendDirectAsync(serviceName,
                                                 transformers,
                                                 payload,
                                                 messageProperties);
         }
         catch (UMOException e)
         {
            throw new EventException(e.toString());
         }

         return result;
      }
   }
}


Mule¿ò¼ÜÒÀ¾ÝÏûÏ¢ÓÐÐ§ÔØºÉµÄÀàÐÍÀ´ÅÉDzÏûÏ¢¡£Ê¼þ¿ò¼ÜʹÓûùÓÚÓÐÐ§ÔØºÉµÄÅÉDz»úÖÆ£¬ÕâÖÖÅÉDz»úÖÆ°Ñ×¢²áµ½Ê¼þ¹ÜÀíÆ÷ÖÐÒ»°ã¶¨ÒåµÄʼþ·½·¨×÷Ϊʼþ½ÓÊÕÆ÷¡£ÏÂÃæµÄÀඨÒåÁËÒ»¸ö°üº¬Èý¸öÖØÔØµÄreceiveEvent£¨£©·½·¨µÄ·þÎñ£º
package com.jeffhanson.mule;

import java.util.Date;

public class TestService
{
   public void receiveEvent(String eventMessage)
   {
      System.out.println("\n\nTestService.receiveEvent(String) received "
                         + "event message:  " + eventMessage + "\n\n");
   }

   public void receiveEvent(Integer eventMessage)
   {
      System.out.println("\n\nTestService.receiveEvent(Integer) received "
                         +"event message:  " + eventMessage + "\n\n");
   }

   public void receiveEvent(Date eventMessage)
   {
      System.out.println("\n\nTestService.receiveEvent(Date) received "
                         + "event message:  " + eventMessage + "\n\n");
   }
}


ʼþ¹ÜÀíÆ÷¿Í»§¶ËÓ¦ÓóÌÐò·¢ËÍÈý¸öʼþµ½²âÊÔ·þÎñÖУ¬È¥²âÊÔÿһ¸öreceiveEvent£¨£©·½·¨¡£¿Í»§¶ËÓ¦ÓóÌÐòÈçÏ£º
package com.jeffhanson.mule;

import org.apache.log4j.Logger;
import org.apache.log4j.Level;
import org.apache.log4j.BasicConfigurator;

import java.util.Date;

public class EventClient
{
   static Logger logger = Logger.getLogger(EventClient.class);

   public static void main(String[] args)
   {
      // Set up a simple configuration that logs on the console.
      BasicConfigurator.configure();
      logger.setLevel(Level.ALL);

      try
      {
         EventManager eventManager =
            EventManagerFactory.getInstance("vm://");
         eventManager.start();

         String serviceName = TestService.class.getName();
         String implementation = serviceName;

         eventManager.registerService(serviceName, implementation);

         Object result =
            eventManager.sendSynchronousEvent(serviceName, "A test message");

         if (result != null)
         {
            System.out.println("Event result: " + result.toString());
         }

         result =
            eventManager.sendSynchronousEvent(serviceName, new Integer(23456));

         if (result != null)
         {
            System.out.println("Event result: " + result.toString());
         }

         result =
            eventManager.sendSynchronousEvent(serviceName, new Date());

         if (result != null)
         {
            System.out.println("Event result: " + result.toString());
         }

         eventManager.stop();
      }
      catch (EventException e)
      {
         System.err.println(e.toString());
      }
   }
}


Muleƽ̨¼ò»¯ºÍ³éÏóÁËÇ°ÃæËùÐðÊö¿ò¼ÜµÄʼþ·½ÃæµÄ´¦Àí£¬Ê¹µÃÄã·¢ËͺͽÓÊÕ´©Ô½Ò»¸ö²ã¼¶½á¹¹µÄͬ²½ºÍÒì²½ÏûϢʱ£¬²»ÐèÒªÖªµÀϲãϵͳµÄϸ½Ú¡£¹¤³§Ä£Ê½ºÍSOA×¼ÔòµÄÓ¦Óã¬ÔòʹµÃÕâ¸ö¿ò¼ÜÓÐÁËÒ»¸öËÉÉ¢ñîºÏºÍ¿ÉÀ©Õ¹µÄÉè¼Æ¡£

×ܽá
µ±·þÎñºÍ½ø³ÌÐèÒª´©Ô½¶à²ã½á¹¹£¬Ê¹ÓöàÖÖЭÒéÈ¥½»»¥Ê±£¬Éè¼ÆÒ»¸öÓÐЧµØÊ¼þÇý¶¯µÄÈí¼þϵͳ¿ÉÄܱäµÃ¸´ÔÓÁË¡£¿ÉÊÇ£¬Ò»¸öʹÓñê׼ģʽ°üº¬Êʵ±Ê¼þ¹ÜÀí²ãµÄÃæÏò·þÎñ¼Ü¹¹ÄܼõÉÙ£¬ÉõÖÁÏû³ýÕâЩÎÊÌâ¡£

Mule ƽ̨ÌṩAPI£¬×é¼þºÍ³éÏó¶ÔÏó£¬ÕâЩ¶¼¿ÉÒÔÓÃÓÚÈ¥½¨Á¢Ò»¸öÇ¿´ó£¬½¡×³£¬Ê¼þÇý¶¯µÄÓÐ×ÅÁ¼ºÃµÄÉìËõÐԺͿÉά»¤ÐÔµÄϵͳ¡£

¹ØÓÚ×÷Õß
Jeff Hanson ÓÐ×Å18ÄêµÄÈí¼þÐÐÒµ´ÓÒµ¾­Ñé£¬Ôø¾­×÷Ϊ¸ß¼¶Èí¼þ¹¤³Ìʦ¹¤×÷ÓÚWindows OpenDocÏîÄ¿£¬×÷ΪÖ÷¹Ü¼Ü¹¹Ê¦ÔÚNovellµÄRoute66¿ò¼Ü¹¤×÷¡£ÏÖÔÚ£¬×÷ΪeReinsure.comµÄÊ×ϯ¼Ü¹¹Ê¦£¬ÕýÔÚ¹¹½¨Web·þÎñ¿ò¼ÜºÍ»ùÓÚJ2EEÔÙ±£ÏÕÆ½Ì¨¡£HansonÒѾ­Ð´×÷ÁË´óÁ¿µÄÎÄÕºÍÊé¼®£¬°üÀ¨£º¡¶Pro JMX: Java Management Extensions¡·(Apress³ö°æÉç,2003Äê11ÔÂ; ISBN: 1590591011)ºÍ¡¶Web Services Business Strategies and Architectures¡·(Wrox ³ö°æÉç,2002Äê8ÔÂ; ISBN: 1904284132)

×ÊÔ´
·javaworld.com:javaworld.com
·Matrix-Java¿ª·¢ÕßÉçÇø:http://www.matrix.org.cn/
·MuleÖ÷Ò³: http://wiki.muleumo.org/display/MULEPROJ/Home
·Mule FAQ: http://wiki.muleumo.org/display/MULE/Mule+FAQ




[ ·¢±íÆÀÂÛ ] ×ÖÌå[ ´ó¡¢ÖС¢Ð¡ ] [ ´òÓ¡ ] [ ½øÈ벩¿Í ] [ ½øÈëÂÛ̳ ]  [ ÍÆ¼ö¸øÅóÓÑ ]
  ¡¾Ïà¹ØÎÄÕ¡¿
¡¤ ½â¾öJAVA·þÎñÆ÷ÐÔÄÜÎÊÌâ (05-09) ¡¤ [¹Ø×¢Ãô½Ý]²ÉÓÃÃô½Ý·½·¨½øÐÐÓû§½çÃæ¿ª·¢ (04-17)
¡¤ ÃæÏò·½ÃæµÄAnnotation (05-06) ¡¤ ÉîÈëdz³öJavaµÄ·ÃÎÊÕßģʽ (04-09)
¡¤ ¶ÔÓÚģʽµÄ¡°Ê®´óÎó½â¡± (03-15) ¡¤ ¡¶SWI-211ʹÓÃUML½øÐÐÃæÏò¶ÔÏóµÄ·ÖÎöÓëÉè¼Æ¡· (04-21)
¡¤ JavaÖÐRSAʹÓüòÊö (09-19) ¡¤ TDD(Test-Driven development) (03-09)
¡¤ ÇáËɲâÊÔ-ѧϰÈçºÎ¼ò»¯²âÊÔÍⲿ×ÊÔ´ (12-16) ¡¤ java¿ò¼ÜÖ®AOP¿ò¼Ü (04-04)
  ¡¾¿Í»§ÐèÇó·´À¡±í¡¿
* ÐÕ¡¡¡¡Ãû:
¸ü¶à×ÊÁÏ¡¡ Á˽ⷽ°¸¡¡ ÈÏʶ³§ÉÌ
* µ¥Î»Ãû³Æ:
* ÁªÏµµç»°:
* µç×ÓÓʼþ:
  ÈüµÏÍÆ¼ö  
  ÊÖ»ú¡¤×Ê·Ñ ¡¤ÐÂÆ·¡¤µ¼¹º¡¤ÆÀ²â¡¤ÊÖ»ú×Ê·Ñ¡¤¿í´ø
ÊÖ»úËÑË÷  ŵ»ùÑÇ N73 MOTO Z6
  IT²úÆ· ¡¤±Ê¼Ç±¾¡¤Ì¨Ê½»ú¡¤·þÎñÆ÷¡¤´òÓ¡¡¤Í¶Ó°
IT²úÆ·ËÑË÷ 
  IT¼¼Êõ ¡¤¿ª·¢¡¤Íø¹Ü¡¤°²È«¡¤Êý¾Ý¿â¡¤²Ù×÷ϵͳ
  ÐÅÏ¢»¯ ¡¤Èȵ㡤רÌ⡤·Ã̸¡¤ÖÜ¿¯¡¤·½°¸°¸Àý
¡¤ ÖÐСÆóÒµ·¢Õ¹»ºÂý µç×ÓÉÌÎñ´æÔÚµÄÎÊÌâ¶à
¡¤ ÂíÔÆ×·¼Ó20ÒÚͶ×ÊÌÔ±¦ ͼıµç×ÓÉÌÎñ°ÔÖ÷
¡¤ ¹ú²úITILÔËάÏÈÐÐÕß ËÄ´ó³§É̽ÇÁ¦BIÊг¡
¡¤ ÆóÒµÐÅÏ¢°²È«½â¾ö·½°¸ ·½Õýµç×Ó¹«ÎÄϵͳ
  IT²©¿Í ¡¤Ôø½£ÇÏîÁ¢¸Õ¡¤Javaѧϰ¡¤Íø¹Ü
  IT¼¼ÊõÂÛ̳ ¡¤¿ª·¢¡¤Íø¹Ü¡¤°²È«¡¤Êý¾Ý¿â¡¤ÏµÍ³