·þÎñ×é¼þ¼Ü¹¹(SCA)ÊÇÒ»¸ö¿ª·¢SOAÃæÏò·þÎñÓ¦Óõļòµ¥Ä£ÐÍ¡£ÕâÆªÎÄÕÂͨ¹ýÒ»¸öÀý×ÓÃèÊöÁËSCAµÄÖÖÖÖÓÅÊÆ£¬²¢½éÉÜSCAµÄÏà¹Ø¸ÅÄî¡£±¾ÎÄÖеÄÀý×ÓÊÇ»ùÓÚApache Tuscany¿ªÔ´ÏîÄ¿¿ª·¢µÄ(
http://incubator.apache.org/tuscany/)¡£ÎÄÖÐËùÉæ¼°µÄʵÀýÔ´Âë¾ù¾Apache License 2.0ÈÏÖ¤(
http://www.apache.org/licenses/LICENSE-2.0)£¬ÔÚ±¾ÎĵIJο¼×ÊÁϲ¿·ÖÌṩÁËÏà¹ØÎļþµÄÁ´½Ó¡£Apache Tuscany ºÍPHP SCA_SDO (
http://pecl.php.net/package/sca_sdo)ÌṩÁËÃâ·ÑµÄÃæÏò·þÎñµÄ»ù´¡¼Ü¹¹£¬ÔÚÆäÉÏ¿ÉÒÔÀûÓÃSCA±à³ÌÄ£ÐÍ´´½¨¡¢´ò°ü¡¢·¢²¼ºÍ¹ÜÀíÓ¦Óá£
SCA±à³ÌÄ£Ðͱ¾ÉíÊÇÓÉÖÚ¶à³§¼ÒºÍ¸öÈ˹²Í¬¿ª·¢µÄ¹æ·¶£¬ÕâÌ׹淶±»¹±Ï׸øÁËOpen SOAÐ×÷×éÖ¯£¨
http://www.osoa.org£©¡£
SCA
ÃæÏò·þÎñµÄÌåϵ¼Ü¹¹(SOA)ÌṩÁËÒ»Ìõ;¾¶À´½â¾ö½ôñîºÏºÍÓ¦Óù̻¯µÄÎÊÌâ¡£SOA³ÐŵËü½«´øÀ´Öî¶àºÃ´¦£¬ÀýÈçÌá¸ßÉÌÒµÃô½ÝÐÔ,Ìá¸ßÁé»îÐÔ£¬½µµÍ³É±¾£¬Ê¹Òì¹¹ºÍ·Ö²¼Ê½»·¾³ÖеÄÐÅÏ¢¹²Ïí±äµÃ¸ü¼ÓÈÝÒס£
SOAÃè»æÁËÒ»¸öÀ¶Í¼£¬µ«ÊµÏÖSOAÈÔÈ»ÊÇÒ»¸öÌôÕ½¡£¿É¹©Ñ¡ÔñµÄÓÃÀ´ÊµÏÖSOAµÄ¼¼ÊõÁî¼¼ÊõÈËÔ±ÃÔ»ó, ËûÃÇÐèÒª¾ßÓбȽÏÈ«ÃæµÄ¼¼Êõ²ÅÄܳɹ¦½¨¹¹Ò»¸öSOAÓ¦Óá£SCA¿ÉÒÔ½â¾öÕâÒ»ÎÊÌ⡪¡ªÌṩÁËÒ»¸öÓÃÒÔ´´½¨ÃæÏò·þÎñµÄ¶Ëµ½¶ËÆóÒµÓ¦Óõļòµ¥Ä£ÐÍ¡£²ÉÓÃÁËSCAµÄÒµÎñ½«´ÓÒÔϼ¸¸ö·½ÃæÊÜÒæ£º
¿ìËÙ¿ª·¢£¬Ìá¸ßÉú²úÁ¦: SCA°ÑÒ»¸öÓ¦Óÿ´³ÉһϵÁÐÏ໥Á¬½ÓµÄ×é¼þ¡£ËüÌṩÁËÒ»¸ö¼òµ¥µÄ¡¢ÓïÑÔÖÐÁ¢µÄ×é¼þÄ£ÐÍ£¬×é¼þ¿ÉÒÔÊÇд´½¨µÄ£¬Ò²¿ÉÒÔÖØÓÃÒÑÓÐ×é¼þ¡£×é¼þ¿ÉÒÔÓÃSCAÔËÐл·¾³ËùÖ§³ÖµÄÈκÎÓïÑÔÀ´ÊµÏÖ¡£Í¨¹ý×é¼þµÄʵÏÖºÍ×éװϸ½ÚµÄ·ÖÀ룬SCAʵÏÖÁËÕæÕýµÄËÉñîºÏ¡£ÕâÖÖ×Ôµ×ÏòÉϵĿª·¢·ç¸ñÔÊÐí¿ª·¢ÈËÔ±¼¯Öо«Á¦¿ª·¢ÒµÎñÏà¹Ø´úÂë,¶ø²»Óõ£ÐÄÈçºÎʹÆäÊÊÓÃÓÚÕû¸ö½â¾ö·½°¸¡£
¸ü¸ßµÄ×éÖ¯Ãô½ÝÐÔºÍÁé»îÐÔ:SCAͬÑùÖ§³ÖÓɶ¥ÏòϵĿª·¢·½Ê½£¬Í¨¹ýSCAÁé»îµÄ·þÎñ×°ÅäÄ£ÐÍ´´½¨ÒµÎñ½â¾ö·½°¸¡£SCA×é¼þ¿ÉÒÔÔÚÒ»¸ö¹¹¼þ×éÖÐÁ¬½ÓÔÚÒ»Æð¡£Ò»¸ö×é¼þ¿ÉÒÔ±»ÓÐ×ÅÏàͬ½Ó¿ÚµÄÁíÒ»¸ö×é¼þËùÌæ´ú¡£Õâ¸ö¹¹¼þ×é¿ÉÒÔ¸ù¾ÝIT¼Ü¹¹ÐèÇó½øÐе÷Õû£¬ÀýÈç·þÎñÁ¬½Ó¡¢´«ÊäÐÒé¡¢ÊÂÎñ¡¢°²È«ºÍÏûÏ¢¿É¿¿ÐÔ¡£¿É¹©Ñ¡ÔñµÄ´«Êä°ó¶¨·½Ê½Ê¹¿ª·¢³öµÄ½â¾ö·½°¸¿ÉÒÔÊÊÓ¦¸ü¹ã·ºµÄ²¿ÊðÐèÇó¡£
¸ü¸ßµÄͶ×ʻر¨: SCA×é¼þÄ£ÐÍʹµÃÖØÓÃÒÑͶ×ʵÄÏÖÓÐÓ¦ÓúͷþÎñ±äµÃ·Ç³£ÈÝÒס£Æä±ê×¼·½·¨ÊÇ·â×°ºÍ³éÏó½Ó¿Ú£¬Í¨¹ýÖØÐÂÁ¬½Ó·þÎñ´´½¨ÐÂÓ¦ÓÃ,ÒÔ´ËÖØÓ÷þÎñ¡£SCA±¾ÉíÊǼ¼ÊõÖÐÁ¢µÄ£¬Ò²²¢·ÇҪȡ´úÏÖÓеļ¼Êõ¡£Æä½ö½öÌṩÁËÒ»¸ö×é¼þ×é×°Ä£ÐÍ£¬²¢ÃèÊöÁËÈçºÎÈ¥×°ÅäеĺÍÏÖÓеķþÎñ¡£
ͼ1È¡×ÔSCA×°ÅäÄ£Ð͹淶£¬ÆäչʾÁËSCAµÄÖ÷Òª×é³É¡£(
http://www.osoa.org/display/Main ... ture+Specifications)
ÉîÀ¶É«·½¿ò£¨ComponentAºÍComponentB£©±íʾÊÇ×é¼þ(Component)¡£×é¼þÊÇSCAºËÐÄ£¬Æä·â×°ÁËÒµÎñÂß¼¡£×é¼þ¿ÉÒÔ²ÉÓÃÔËÐл·¾³Ö§³ÖµÄÈκαà³Ì¼¼ÊõʵÏÖ¡£ÀýÈç, Apache Tuscany ÏîĿĿǰ֧³ÖJava¡¢JavaScript¡¢Ruby¡¢PythonºÍC++×é¼þÀàÐÍ£¬Í¬Ê±Îª´´½¨ÐµÄ×é¼þÀàÐÍÌṩÁËÀ©Õ¹API¡£
SCA×é¼þ¿ÉÒÔ¶¨ÒåÊôÐÔ(Property£¬ComponentAºÍComponentBÉÏ·½µÄ»ÆÉ«·½¿ò±íʾÊôÐÔ)¡£ÊôÐÔ¿ØÖÆ×é¼þµÄÐÐΪ£¬ÔÚ²¿ÊðÆä¼ä¿ÉÒÔ±»¿É¸Ä±ä¡£ÀýÈ磬һ¸ö¹ÉƱ±¨¼ÛÓ¦ÓóÌÐò¿ÉÄÜ»áÓÐÒ»¸öÊôÐÔÓÃÀ´Ö¸¶¨¹ÉƱ±¨¼ÛÖÐʹÓõĻõ±ÒÀàÐÍ¡£
SCA×é¼þÃèÊöÁ˽ӿÚ,ÕâЩ½Ó¿Ú¿É¹©ÆäËü×é¼þµ÷ÓÃʱʹÓá£ÔÚͼÖнӿÚÓÃ×é¼þ·½¿ò×ó±ßµÄÂÌÉ«¼ýÍ·À´±íʾ,±»³Æ×÷SCAµÄ¡°·þÎñ¡±£¨Service£©¡£×é¼þÒ²ÃèÊöÁ˱»¸Ã×é¼þµ÷ÓÃµÄÆäËü×é¼þµÄ½Ó¿Ú£¬ÔÚͼÖÐÕâÑùµÄ½Ó¿ÚÓÃ×é¼þ·½¿òÓұߵķۺìÉ«¼ýÍ·À´±íʾ£¬³ÆÎªSCAµÄ¡°ÒýÓá±£¨Reference£©¡£ÕâЩ·þÎñºÍÒýÓñ»Á¬½ÓÔÚÒ»Æð£¬×é³ÉÒ»¸ö¿ÉÔËÐеÄϵͳ¡£
ͼÖеÄÁ½¸ö×é¼þ£¬AºÍB£¬±»×é×°ÔÚÒ»¸ö¸ü´ó¡°¹¹¼þ×顱£¨Composite£©·¶Î§ÄÚ£¬±»³Æ×÷¹¹¼þ×éA¡£SCAµÄ¹¹¼þ×éÃèÊöÁËÒ»¸öÓÉ»¥ÏàÁ¬½ÓµÄ×é¼þËù¹¹³ÉµÄ¼¯ºÏ¡£ÕýÈçÄãËù¿´µ½£¬¹¹¼þ×éÒ²ÉùÃ÷ÁË·þÎñºÍÒýÓã¬ËüÃDZ»±©Â¶µ½¹¹¼þ×éÍⲿ.Ò»¸ö¹¹¼þ×éÄÚ²¿µÄ×é¼þ±Ë´ËÁ¬½Ó¾ÍÈçͬ´´½¨Ò»¸öÔËÐÐÔÚͬһ½ø³ÌÖеĽôñîºÏµÄÓ¦ÓóÌÐò¡£½«¹¹¼þ×éͨ¹ý·þÎñºÍÒýÓÃÁ¬½ÓÔÚÒ»Æð£¬ÔòÐγÉÁËÒ»¸ö¸ü¼ÓËÉñîºÏµÄϵͳ£»ÏµÍ³ÖеÄÿһ¸ö¹¹¼þ×é¶¼¿ÉÄÜÔËÐÐÔÚÒ»¸öµ¥¶ÀµÄ½ø³Ì»ò´¦ÀíÆ÷ÖУ¬ÔÚÍøÂçÖÐͨ¹ý¸÷ÖÖµÄÐÒéºÍ´«Êä°ó¶¨Á¬½ÓÆðÀ´¡£Í¨¹ýÕâ¸ö;¾¶SCAΪ¶ÀÁ¢ºÍ·Ö²¼Ê½Ó¦ÓÃÌṩÁËͳһµÄ±à³ÌÄ£ÐÍ¡£
ʵÀý³¡¾°
±¾ÎĽ«Ê¹ÓÃÒ»¸öÐé¹¹µÄMostMortgage¹«Ë¾µÖѺ´û¿îÉêÅúÓ¦ÓÃÀ´½éÉÜSCAµÄ¸ü¶àϸ½Ú¡£´û¿îÉóÅúÓ¦ÓÃ(Loan Approval)½ÓÊܵÖѺÉêÇ룬°üÀ¨¿Í»§µÄÏêϸ×ÊÁϺÍÉêÇëµÄ´û¿îÊýÄ¿¡£Ó¦ÓÃÊ×ÏÈ»á¼ì²é¿Í»§µÄÐÅÓüǼ(Credit Check)£¬È·±£ÐÅÓöî¶È·ûºÏ×îµÍÒªÇ󡣸ù¾ÝÉêÇëµÄ±¾½ðÊýÁ¿£¬´û¿îÌõÔ¼ÒÔ¼°¿Í»§µÄ¼ÒÍ¥×´¿ö£¬µÃ³öÀûÏ¢ÂÊ(Interest Rate)¡£È»ºóʹÓð´½Ò¼ÆËãÆ÷(Mortgage Calculator)£¬ÓÿÉÄܵÄÔ³¥»¹¶î¶È³ýÒÔ¿Í»§µÄÔÂÊÕÈë¶î¼ÆËã³ö±ÈÂÊ¡£¸ù¾ÝÕâ¸ö±ÈÂʺͿͻ§µÄÐÅÓÃÆÀ·Ö½øÐзçÏÕÆÀ¹À(Risk Assessment)£¬È»ºó×ö×îÖյľö¶¨¡£(¼ûͼ2)
ÓÃSCAʵÏÖµÖѺ´û¿îÉóÅúÓ¦ÓóÌÐò
ÔÚÏÂÃæµÄ²¿·Ö£¬½«½éÉÜÈçºÎÓÃSCAʵÏÖ´û¿îÉóÅúÓ¦ÓóÌÐò(Loan Approval Application)£¬ÆäÖлáÏêϸ½²½âÿ¸öSCAÔªËØµÄ´´½¨¹ý³Ì¡£´ÓÕûÌåÉÏ¿´£¬´û¿îÉóÅúÓ¦ÓóÌÐò¿ÉÒÔ±»·Ö½â³É×éºÏ×°ÅäËùÐèÒªµÄÈô¸ÉSCA×é¼þ¡£Õâ¸ö¹¹¼þ×é(Mortgage Composite)Ëù°üº¬µÄ×é¼þÓУº´û¿îÉóÅú£¨Loan Approval£©£¬ÐÅÓüì²é£¨Credit Check£©£¬ÀûÂʼÆË㣨Interest Rate£©£¬°´½Ò¼ÆËãÆ÷£¨Mortgage Calculator£©ºÍ·çÏÕÆÀ¹À£¨Risk Assessment£©¡£Õû¸ö¹¹¼þ×鲿ÊðÔÚÒ»¸öSCAϵͳÖС£(¼ûͼ3)
SCA×é¼þ
SCA×é¼þÊÇ¿ª·¢SOAÓ¦ÓóÌÐòµÄ»ù±¾¹¹Ôìµ¥Ôª¡£Æä¾ß±¸Èý¸öÌØÓеÄͬʱҲ±Ë´Ë¹ØÁªµÄ²¿·Ö:
a)¹¹Ôì×é¼þ¹¦ÄܵijÌÐòÂß¼(¼ò³ÆÎª×é¼þʵÏÖ)
b)×é¼þÓëÆäËü×é¼þ½»»¥µÄ¶¨Òå(¼ò³ÆÎª×é¼þÀàÐÍ)
c)ÕâÒ»×é¼þºÍÆäËü×é¼þÈçºÎ×°ÅäÒÔÐγÉÒ»¸ö½â¾ö·½°¸µÄ¾ßÌåÃèÊö(¼ò³Æ×é¼þ×°Åä»ò¹¹¼þ×é)
±¾ÎĽ«ÔÚÏÂÃæµÄÕ½ھßÌå½éÉܲ¢¾ÙÀý˵Ã÷ÿһ²¿·Ö¡£
l ×é¼þʵÏÖ: ×é¼þʵÏÖ¿ÉÒÔÓÉÈκÎSCAÔËÐл·¾³ËùÖ§³ÖµÄ±à³ÌÓïÑÔÀ´Íê³É¡£×é¼þʵÏÖ¿ÉÒÔ×ÔÓɵØÑ¡Ôñ×Ô¼ºµÄ·ç¸ñ£¬µ«ÆäÐèÒªÓë·þÎñ¡¢ÒýÓúÍÊôÐ԰󶨣¬°´ÕÕ×é¼þÀàÐ͵͍Òå½øÐÐ×é¼þ¼äµÄ½»»¥¡£SCA¹æ·¶ÃèÊöÁ˳ÌÐòÓïÑÔºÍSCA¼äµÄÓ³Éä¡£
l ×é¼þÀàÐÍ£º×é¼þÀàÐÍͨ¹ý×é¼þËù±©Â¶µÄ·þÎñ£¬ÒÀÀµµÄÒýÓÃÒÔ¼°¿ØÖÆ×é¼þÐÐΪµÄÊôÐÔÀ´ÃèÊöÒ»¸ö×é¼þµÄÂÖÀª¡£×é¼þÀàÐÍÐÅÏ¢¿ÉÒÔͨ¹ýÎļþ¶¨Ò壬ͨ³£ÎļþÃû³ÆÊÇ£¼ÊµÏÖÎļþÃû£¾.componentType£¬»òÕßͨ¹ý¿¼²ì×é¼þʵÏÖ»ñÈ¡£¬»òÕßÁ½Õß²¢Óá£
l ×é¼þ×°Åä»ò¹¹¼þ×飺һµ©×é¼þµÄʵÏÖºÍ×é¼þÀàÐÍÒѾ¶¨Ò壬×é¼þ¾Í¿ÉÒÔ±»×°Åäµ½·þÎñÍøÂçÖУ¬ÓëÆäËü·þÎñһͬÌṩһ¸öSOA½â¾ö·½°¸¡£×°ÅäÎļþ¶¨ÒåÁËÒ»¸öSCA¹¹¼þ×é¡£SCAµÄÔËÐл·¾³Ê¹ÓôËÎļþÖеÄÐÅÏ¢À´ÊµÀý»¯Ò»¸öSCAÓ¦ÓóÌÐò¡£
·þÎñ×é¼þÃèÊöÓïÑÔ(SCDL)ÊÇSCA¶¨ÒåµÄÒ»ÖÖ¿ÉÀ©Õ¹±ê¼ÇÓïÑÔ(XML)¸ñʽ£¬±»ÓÃÓÚ¶¨Òå×é¼þÀàÐÍÎļþºÍ×°ÅäÎļþ¡£ÀýÈ磺´û¿îÉóÅúÓ¦ÓÃÖеİ´½Ò¼ÆËãÆ÷£¨Mortgage Calculator£©×é¼þÓÐ×é¼þÀàÐÍÎļþ£¬×é¼þʵÏÖÎļþÒÔ¼°½«°´½Ò¼ÆËãÆ÷×é¼þÓëÆäËü×é¼þÁ¬½ÓÔÚÒ»ÆðµÄ×°ÅäÎļþ¡£(¼ûͼ4)
×é¼þÀàÐÍ(Component Type)
°´½Ò¼ÆËãÆ÷×é¼þÀàÐÍÎļþ(MortgageCalculator.componentType)ÃèÊöÁËÕâÒ»×é¼þÌṩµÄ·þÎñ£¬Æä²¢Ã»ÓÐÒýÓÃÆäËü×é¼þ£¬Í¬Ê±Ò²Ã»ÓÐÌṩÈκοÉÅäÖõÄÊôÐÔ£¬Òò´ËÒýÓã¼reference£¾ºÍÊôÐÔ£¼proprety£¾ÔªËز¢Ã»ÓгöÏÖÔÚÕâ¸ö¶¨ÒåÖС£
£¼componentType£¾
£¼service name="MortgageCalculatorService"£¾
£¼interface.java inter/£¾
£¼/service£¾
£¼/componentType£¾
×é¼þʵÏÖ(Component Implementation)
JavaÀà"mortgage.MortgageCalculatorImpl" (MortgageCalculatorImpl.java)°üº¬ÁËÕâ¸ö×é¼þµÄÒµÎñÂß¼¡£
public class MortgageCalculatorImpl implements MortgageCalculator {
public double getMonthlyPayment(double principal, int years, float interestRate) {
double monthlyRate = interestRate / 12.0 / 100.0;
double p = Math.pow(1 + monthlyRate, years * 12);
double q = p / (p - 1);
double monthlyPayment = principal * monthlyRate * q;
return monthlyPayment;
}
}
ÔÚÏÂÃæµÄÕ½ÚÖÐ(×é¼þ·þÎñ)£¬½«Õ¹Ê¾ÈçºÎʹÓÃ×¢ÊÍ·½Ê½½«×é¼þÀàÐÍÐÅÏ¢°üº¬ÔÚʵÏÖÎļþÖУ¬ÕýÈçJavaÓïÑÔËùÄÜ×öµÄ¡£±¾ÎÄÖд󲿷ֵijÌÐòƬ¶Ï²¢·ÇʹÓÃ×é¼þÀàÐÍÎļþ£¬¶øÊÇͨ¹ý×¢ÊÍ·½Ê½Ìṩ×é¼þÀàÐÍÐÅÏ¢¡£
×é¼þ·þÎñ(Component Service)
Ò»¸ö×é¼þÈçºÎΪÆäËü·þ¼þÌṩ·þÎñÄØ£¿ÏÂÃæµÄÀý×ÓÖа´½Ò¼ÆËãÆ÷£¨Mortgage Calculator£©Í¨¹ýʹÓá°@Service¡±×¢ÊÍÉùÃ÷ÁËÒ»¸ö·þÎñ£¬°üº¬ÁËÒ»¸öÃûΪ¡°getMonthlyPayment¡±µÄ·½·¨¡£ÒòΪJavaÓïÑÔÔËÐл·¾³Ö§³Ö×¢ÊÍ,ͨ¹ý¼òµ¥×¢ÊÍJavaÀ࣬¿ÉÒ԰Ѹ÷½·¨ÉùÃ÷Ϊһ¸ö·þÎñ½Ó¿Ú¡£
@Service(MortgageCalculator.class)
public class MortageCalculatorImpl implements MortageCalculator {
public double getMonthlyPayment(double principal, float interestRate) {
...
}
}
ͨ¹ý@Service×¢Êͱê¼Ç£¬SCAÔËÐл·¾³°ÑMortgageCalculatorImplÀàʵÀýÀí½âΪһ¸öº¬ÓÐMortgageCalcula½Ó¿Ú¶¨ÒåµÄ·þÎñ¡£
×é¼þÒýÓÃ(Component Reference)
ÏÖÔÚÀ´¿´Ò»ÏÂ×é¼þÊÇÈçºÎÒýÓÃÆäËü×é¼þµÄ¡£´û¿îÉóÅú£¨Loan Approval£©×é¼þÒýÓÃÁËÆäËü×é¼þ£¬±¾ÎĽ«ÒÔ´Ë×é¼þ×÷ΪÀý×Ó¡£´û¿îÉóÅú×é¼þÓÉJavaÓïÑÔʵÏÖ£¬²¢Ê¹ÓÃÁË×¢ÊÍ¡£@Reference±íÃ÷¸Ã×é¼þÒÀÀµ·çÏÕÆÀ¹À£¨Risk Assessment£©×é¼þ¡¢ÐÅÓüì²é£¨Credit Check£©×é¼þ¡¢ÀûÂʼÆË㣨Interest Rate£©×é¼þºÍ°´½Ò¼ÆËãÆ÷£¨Mortgage Calculator£©×é¼þ¡£±»ÒýÓõÄ×é¼þ¿ÉÒÔÊDZ¾µØµÄ£¬Ò²¿ÉÒÔÊÇÔ¶³ÌµÄ¡£SCAÔËÐл·¾³½«ÔÚÕû¸öÓ¦ÓõÄSCDLÎļþÖбéÀú×é¼þ¼äµÄ¹ØÁª£¬²¢¸ù¾Ý±éÀúµÄ½á¹ûÕýÈ·ÉèÖÃÒýÓá£(¼ûÁбí1)
Áбí1
@Service(LoanApproval.class) // Service declaration
public class LoanApprovalImpl implements LoanApproval {
// Reference declarations using a protected or public field
@Reference
public RiskAssessment riskAssessment;
@Reference
public MortgageCalculator mortgageCalculator;
@Reference
protected InterestRateQuote interestRateQuote;
// Reference declaration using a setter method
private CreditCheck creditCheck;
@Reference
public void setCreditCheck(CreditCheck creditCheck) {
this.creditCheck = creditCheck;
}
public boolean approve(Customer customer, double loanAmount, int years) {
int score = creditCheck.getCreditScore(customer.getSsn());
if (score £¼ minimumCreditScore) {
return false;
}
float rate = interestRateQuote.getRate(customer.getState(), loanAmount, years);
double monthlyPayment = mortgageCalculator.getMonthlyPayment(loanAmount, years, rate);
double ratio = monthlyPayment/customer.getMonthlyIncome();
return riskAssessment.assess(score, ratio);
}
}
×é¼þ½Ó¿Ú(Component Interfaces)
ÔÚSCAÖУ¬ÎÞÂÛ·þÎñÌṩµÄÒµÎñ¹¦ÄÜ»¹ÊÇËùÒýÓõÄÒµÎñ¹¦Äܶ¼ÐèÓýӿÚÀ´ÃèÊö¡£½Ó¿ÚΪ·þÎñºÍÒýÓÃÉùÃ÷Á˽»»¥Ê±µÄÔ¼¶¨¡£JavaºÍWSDLÊÇÁ½ÀàµäÐ͵Ľӿڶ¨ÒåÓïÑÔ¡£
@Remotable
public interface CreditCheck {
int getCreditScore(String ssn);
}
½Ó¿Ú¿ÉÒÔÊDZ¾µØ½Ó¿ÚÒ²¿ÉÒÔÊÇÔ¶³Ì½Ó¿Ú¡£±¾µØ½Ó¿ÚÌṩÁËÒ»¸ö¹¹¼þ×éÖÐ×é¼þ¼äÓÅ»¯µÄ±¾µØ½»»¥¡£Ïà±È֮ϣ¬Ô¶³Ì½Ó¿ÚÔò¶¨ÒåÁËËÉñîºÏµÄÔ¶³Ì½»»¥¡£
һЩÉÌÒµ·þÎñÓжԵȵĽ»»¥¹ØÏµ£¬Òò´ËÐèÒªÔÚ·þÎñ²ãÃæÓÐË«ÏòÒÀÀµ¡£ÔÚÕâЩ°¸ÀýÖУ¬ÉÌÒµ·þÎñ¼ÈÊÇ·þÎñµÄÏû·ÑÕߣ¬Ò²ÊÇ·þÎñÌṩÕߣ¬ÓÈÆäÊÇÔÚ½»»¥ÊÇ»ùÓÚÒì²½ÏûÏ¢¶ø·ÇÔ¶³Ì·½·¨µ÷Óý»»¥µÄÇé¿öÏ¡£SCAʹÓÃË«Ïò½Ó¿ÚÖ§³ÖË«Ïò¶ÔµÈµÄÒµÎñ·þÎñ¹ØÏµ½¨Ä£¡£
ÔÚһЩ·þÎñÖÐ,ΪÁËÍê³ÉÒ»¸ö¸ü¸ß²ãÃæµÄÄ¿±ê£¬ÒªÇóµ÷ÓÃһϵÁеIJÙ×÷¡£ÕâһϵÁеIJÙ×÷±»³Æ×÷»á»°(conversation)¡£Èç¹û·þÎñʹÓÃÁËÒ»¸öË«Ïò½Ó¿Ú,»á»°Ôò°üº¬²Ù×÷ºÍ»Øµ÷¡£SCAÔÊÐí½Ó¿Úͨ¹ý¡°conversational¡±±ê¼ÇÀ´Ê¹Ò»ÏµÁеIJÙ×÷ÔÚͬһ¸ö»á»°ÖнøÐС£
×é¼þÊôÐÔ(Component Properties)
×é¼þÊôÐÔ¿ÉÓÃÒԸıä×é¼þÔËÐÐʱÐÐΪ¶øÎÞÐè¸Ä±ä´úÂë¡£¼ÙÉè´û¿îÉóÅú£¨Loan Approval£©×é¼þÓÐÒ»¸öÃûΪ¡°minimumCreditScore¡±×é¼þÊôÐÔ£¬Æä¿ÉÒÔ¸ù¾Ý¹«Ë¾µÄ²ßÂÔ±»¸³Ó費ͬµÄÖµ¡£ÀýÈç´û¿îÉóÅú£¨Loan Approval£©×é¼þµÄ´úÂëÆ¬¶ÏÖÐʹÓá°@Property¡±¶¨ÒåÁËÒ»¸öÃûΪ¡°minimumCreditScore¡±ÊôÐÔ£¬ÊôÐÔµÄĬÈÏÖµÊÇ650£º
private int minimumCreditScore = 650;
// Property declaration using a setter method
@Property(name = "minimumCreditScore", override = "may"

public void setMinimumCreditScore(int minimumCreditScore) {
this.minimumCreditScore = minimumCreditScore;
}
ϱߵÄÀý×Ó˵Ã÷ͨ¹ýÔÚSCDL×°ÅäÎļþÖÐÉ趨¡°minimumCreditScore¡±ÊôÐÔֵΪ600£¬ÕâÒ»ÉèÖÿÉÒÔ¸²¸ÇÔÚ×é¼þÀàÐÍÖеÄĬÈÏÖµ(650)¡£(ÕâÀïʹÓÃJavaÓïÑÔµÄ×¢ÊÍÀ´¶¨Òå×é¼þÀàÐÍ):
£¼component name="LoanApprovalComponent"£¾
£¼implementation.java class="mortgage.LoanApprovalImpl" /£¾
£¼property name="minimumCreditScore"£¾600£¼/property£¾
...
£¼/component£¾
¹¹¼þ×é - ºÏ³É×é¼þ(Composites-Composing Components)
ÖÁ´Ë±¾ÎÄÖ÷Òª½éÉÜÁËÈçºÎ¿ª·¢µ¥¸ö×é¼þ¡¢´´½¨·þÎñÒÔ¼°¶¨ÒåÆä¶ÔÆäËü×é¼þµÄÒÀÀµ¡£ÈçºÎ½«Èô¸É×é¼þ×°ÅäÔÚÒ»ÆðÒÔÌṩһ¸öÉÌÒµ½â¾ö·½°¸ÄØ£¿SCAʹÓù¹¼þ×é(Composite)À´ÊµÏÖÕâһĿ±ê¡£ÕâÊÇÒ»¸öÂß¼¸ÅÄÆä°üº¬Ò»¸ö»ò¶à¸ö×é¼þ¡£(¼ûͼ5)
ͨ¹ýMortgageCompositeµÄ×°Å䶨ÒåÎļþ£¨default.scdl£©£¬¾ÍÄÜ¿´µ½SCAÈçºÎ½«×é¼þ×é×°ÔÚÒ»Æð¡£
SCAÔËÐл·¾³Ê¹ÓÃSCDLÎļþÖеÄÐÅÏ¢À´ÊµÀý»¯¡¢×°ÅäºÍÅäÖÃ×é¼þ¡£ÕýÈç±¾ÎÄÀý×ÓÖÐÃèÊöµÄ£¬Ã¿Ò»¸ö×é¼þÔÚ×°ÅäÎļþÖж¼ÓÃÒ»¸ö£¼component£¾ÔªËرêʶ,ÿһ¸ö×é¼þÒ²¿ÉÒÔÒýÓÃÆäËü×é¼þ¡£ÔÚÕâ¸öÀý×ÓÖУ¬´û¿îÉóÅú×é¼þ¶¨ÒåÁËËĸöÒýÓã¼reference£¾ÔªËØ£¬ÕâËĸöÒýÓ÷ֱðÖ¸Ïò×°ÅäÎļþÖÐµÄÆäËüËĸö×é¼þ¡£ÔÚͼÖУ¬Á¬½Ó(wiring)ÊÇÓüýÍ·±íʾµÄ¡£Ã¿¸öÁ¬½ÓÁ½¶ËËù¶¨ÒåµÄ½Ó¿Ú±ØÐëÊǼæÈݵġ£
ÔÚSCA×é×°Ä£ÐÍÖУ¬Ò»¸ö×°ÅäºÃµÄ¹¹¼þ×éÄܹ»±»µ±×÷×é¼þÖØÓ㬾¡¹Ü±¾ÎIJ¢Ã»Ã»ÓÐÕâÑùµÄÀý×Ó¡£
±¾µØ·þÎñ(Local Services)
ÉÏÀýÖеÄ×°Å䶨ÒåÎļþչʾÁË×é¼þµÄÒýÓÃÊÇÈçºÎÁ¬½Óµ½ÆäËü×é¼þµÄ£¬µ«ÊÇûÓÐÃèÊö²ÉÓúÎÖÖ¼¼ÊõÔÚ×é¼þ¼ä´«µÝÏûÏ¢¡£ÔÚÕâÖÖÇé¿öÏ£¬SCA¼Ù¶¨×é¼þ¾ùΪ±¾µØ£¬Ò²¾ÍÊÇ˵ÕâЩ×é¼þ½«ÔÚͬһ¸ö½ø³ÌµØÖ·¿Õ¼äÄÚ³õʼ»¯ºÍÔËÐС£ÓÉÓÚÕâ¸öÀý×ÓʹÓÃJavaÓïÑÔ£¬×é¼þʵÀý½«ÔËÐÐÔÚͬһ¸öJava VMÖУ¬ÔÚÕâÖÖÇéÐÎÏ£¬SCA»á×Ô¶¯µØÑ¡Ôñ×î¸ßЧµÄ»úÖÆ½«ÏûÏ¢´ÓÒ»¸ö×é¼þ´«µÝµ½ÁíÒ»¸ö×é¼þ£¬¼È×é¼þµ½×é¼þµÄÖ±½Ó½»»¥£¬¼¸ºõºÜÉÙ»òûÓÐÖнéµÄ²ÎÓë¡£
´Ó±íÃæÉÏ¿´£¬×é¼þ¼äʹÓñ¾µØÁ¬½ÓÏԵò¢·ÇÊ®·ÖÓÐÓá£ÎªºÎ²»Ó󣹿µÄJavaÀàÀ´±àдÕâЩ×é¼þ£¬×é¼þ¼äÓ󣹿µ÷Óõķ½Ê½½øÐн»»¥ÄØ£¿ÒòΪÔÚÕâÖÖ´ÖÁ£¶È×é¼þÇéÐÎÏ£¬SCA»áÓÐÐí¶àÓÅÊÆ£º
l ×é¼þ¿ÉÒÔÈÝÒ׵ر»ÖØÓûòÖØÐÂÅäÖõ½ÆäËü¹¹¼þ×éÖУ»
l ×é¼þ¿ÉÒÔÏÖÔÚÊDZ¾µØµÄ£¬µ«Êǽ«À´±ä³ÉÔ¶³ÌµÄ£»
l Óɲ»Í¬±à³ÌÓïÑÔËùʵÏÖµÄ×é¼þ¿ÉÒÔ·½±ãµØ±»×é×°¡£
Ô¶³Ì·þÎñ(Remote Services)
Ô¶³Ì·þÎñÊÇÖ¸ÔËÐÐÔÚͬһ¸ö»ò²»Í¬ÎïÀí»úÆ÷ÉϵÄÁíÒ»¸ö½ø³Ì¡£±¾ÎÄͨ¹ý´û¿îÉóºËÀý×ÓչʾÈçºÎÓëÔ¶³Ì·þÎñ½»»¥¡£Ê×ÏÈCreditCheck»á±»°ü×°³ÉÒ»¸ö·þÎñ£¬È»ºó¶ÔÍâÌṩCreditCheck Web·þÎñ¡£
°ü×°×é¼þΪԶ³Ì·þÎñ
Ò»¸öÀ©Õ¹µÄÓÃÀý³¡¾°ÊÇ£¬¼ÙÉèMostMortgage¹«Ë¾ÓÐÒ»¸öÒµÎñ»ï°é£¬Ëü¶ÔÓÚCreditCheck¹¦ÄÜÒ²¸ÐÐËȤ¡£ÎªÁËÈÃLoanApproval×é¼þºÍMostMortgageµÄÒµÎñ»ï°é¶¼ÄÜʹÓÃÕâ¸ö·þÎñ£¬CreditCheck¿ÉÒÔ±»°ü×°³ÉÒ»¸öWeb·þÎñ¡£Èç¹ûʹÓÃSCA£¬Õâ¸öÈÎÎñ¾Í±äµÃ·Ç³£µÄ¼òµ¥¡£ÏȽ«CreditCheck×é¼þ°þÀëµ½Ò»¸öÐµĹ¹¼þ×éÖУ¬È»ºóÔÚÕâÒ»¹¹¼þ×éÖÐÌí¼ÓÒ»¸öWeb·þÎñÔªËØ£¬È»ºó½«ÕâÒ»·þÎñÔªËØºÍCreditCheck×é¼þ°ó¶¨ÆðÀ´£¬ÕâÑù¾Í¿ÉÒÔʵÏÖÔ¤ÆÚµÄÄ¿±êÁË¡££¨²Î¼ûͼ6£©
£¼composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
xmlns:wsdli="http://www.w3.org/2006/01/wsdl-instance" name="CreditComposite"£¾
£¼service name="CreditCheckWebService"£¾
£¼interface.wsdl inter
wsdl:wsdlLocation="http://credit wsdl/credit.wsdl" /£¾
£¼binding.ws endpoint="http://credit#wsdl.endpoint(CreditCheck
Service/CreditCheckSoapPort)"
conformanceURIs="http://ws-i.org/profiles/basic/1.1"
location="wsdl/credit.wsdl" /£¾
£¼reference£¾CreditCheckServiceComponent£¼/reference£¾
£¼/service£¾
£¼component name="CreditCheckServiceComponent"£¾
£¼implementation.java class="credit.CreditCheckImpl"/£¾
£¼/component£¾
£¼/composite£¾
×¢Ò⣺еķþÎñÔªËØ²ÉÓÃÒ»¸öWSDLÎļþ£¬¸ÃÎļþ¼ÈÃèÊöÁË·þÎñµÄ½Ó¿Ú£¬Ò²ÃèÊöÁ˰󶨡£
ÓÃÔ¶³Ì·þÎñÈ¡´ú±¾µØ·þÎñ
ÔÚÇ°ÃæµÄÕ½ÚÀïCreditCheck±»×ö³ÉÁËÒ»¸öÔ¶³Ì×é¼þ¡£ÈçºÎÈÃMortgageCompositeÒýÓÃÕâ¸öÔ¶³ÌWeb·þÎñÄØ£¿ËùÐèÒª×öµÄÊÇÐÞ¸ÄMortgageCompositeµÄSCDLÎļþ£ºÔö¼ÓÒ»¸öÃûCreditCheckReferenceÒýÓÃÔªËØÓÃÒÔÉùÃ÷Ô¶³ÌCreditCheck Web·þÎñ£¬È»ºó½«LoanApprovalComponentµÄCreditCheckÒýÓð󶨵½ÐµÄCreditCheckReferenceÉÏ¡£
£¼composite xmlns="http://www.osoa.org/xmlns/sca/1.0" name="MortgageComposite"£¾
£¼component name="LoanApprovalComponent"£¾
...
£¼reference name="creditCheck"£¾CreditCheckReference£¼/reference£¾
...
£¼/component£¾
£¼reference name="CreditCheckReference"£¾
£¼interface.java inter /£¾
£¼binding.ws endpoint="http://credit#wsdl.endpoint(CreditCheckService/CreditCheckSoapPort)"
location="wsdl/credit.wsdl" /£¾
£¼/reference£¾
...
£¼/composite£¾
×¢Ò⣺ÔÚSCDLÖиÃÒýÓñ»Ö¸¶¨Ò»¸ö½Ð×ö¡°binding.ws¡±µÄ°ó¶¨£¬ÕâÒ»°ó¶¨ÐÅÏ¢±íÃ÷ÁËÓÃÓÚ´«ËÍÏûÏ¢µÄÐÒé¡£ÔÚÕâÖÖÇé¿öÏ£¬ÏµÍ³¿ÉÒÔºÜÁé»îµØÅäÖÃMortgageCompositeºÍCreditCompositeÖ®¼ä±£Õϰ²È«Í¨Ðŵİ󶨷½Ê½¡£²Î¼ûͼ7¡£
CreditCheck Web·þÎñµÄʵÏÖ²¢·Ç±ØÐëÊÇSCA×é¼þ¡£¼ÙÉèµÚÈý·½ÒѾÌṩÁËÒ»¸öCreditCheck Web·þÎñ£¬Ôò¿ÉÒÔʹÓÃͬÑùµÄ·½Ê½µ÷ÓÃÕâ¸öWeb·þÎñ¡£Î¨Ò»µÄ²»Í¬ÊÇÔÚWSDLÎļþÖÐÒªÖ¸¶¨Õâ¸öWeb·þÎñµÄURL¡£ÔÚͼ8ÖУ¬CreditCheck Web·þÎñÊÇÓÉÒ»¸ö²¿ÊðÔÚApache Tomcat·þÎñÆ÷ÉϵÄAxis2·þÎñÌṩµÄ¡£
£¼composite xmlns="http://www.osoa.org/xmlns/sca/1.0" name="MortgageComposite"£¾
£¼component name="LoanApprovalComponent"£¾
...
£¼reference name="creditCheck"£¾CreditCheckReference1£¼/reference£¾
...
£¼/component£¾
£¼reference name="CreditCheckReference1"£¾
£¼interface.java inter /£¾
£¼binding.ws endpoint="http://credit#wsdl.endpoint(CreditCheckService/CreditCheckSoapPort1)"
location="wsdl/credit.wsdl" /£¾
£¼/reference£¾
...
£¼/composite£¾
¶àÓïÑÔÀ©Õ¹
µ½Ä¿Ç°ÎªÖ¹£¬±¾ÎĽöÌÖÂÛÁËJavaʵÏÖµÄ×é¼þºÍ±¾µØ¼°Ô¶³ÌµÄ·þÎñ£¬»¹»ù±¾ÉÏûÓÐÉæ¼°ÆäËüµÄÑ¡Ôñ¡£SCAͨ¹ýSCDLÃèÊö×é¼þ¼°Æä×é×°µÄ·½·¨£¬²¢Ã»Óй涨×é¼þÈçºÎʵÏÖ£¬»òÕßÏûÏ¢ÊÇÈçºÎÔÚ×é¼þÖ®¼ä´«ÊäµÄ¡£¸÷ÖÖÔËÐл·¾³¿ÉÒÔ×ÔÓɵÄÌí¼ÓеÄ×é¼þʵÏÖÀ©Õ¹¡£Apache TuscanyÏîÄ¿ÒѾÌṩÁËÀ©Õ¹API£¬ÒÔ¾¡¿ÉÄܵØÊ¹Ö§³ÖеÄʵÏÖÀàÐͱäµÃ¼òµ¥¡£Ä¿Ç°Apache Tuscany Java SCAÔËÐл·¾³Ö§³ÖÈçϼ¸ÖÖ×é¼þʵÏÖÀàÐÍ£ºimplemetation.java¡¢implemetation..javascriptºÍimplementation.ruby¡£Tuscany×é֯ĿǰÕýÔÚÖÂÁ¦ÓÚʹÓÃÕâÖÖÀ©Õ¹»úÖÆÌṩSpringºÍBPELµÄʵÏÖÀàÐÍ¡£
Apache Tuscany C++ SCAÔËÐл·¾³Ä¿Ç°Ö§³ÖÈçϼ¸ÖÖ×é¼þʵÏÖÀàÐÍ£ºimplementation.cpp¡¢implementation.pythonºÍimplementation.ruby¡£
ĿǰPHP SCAÔËÐл·¾³½öÖ§³ÖÓÃPHPʵÏÖSCA×é¼þ¡£
ÔÚͼ8ÖУ¬ÒѾ½«Apache Tuscany Java SCAÔËÐл·¾³ÖÐMortgageCalculator×é¼þµÄʵÏÖÓÉJava±ä³ÉÁËJavaScript¡£
MortgageCalculator.getMonthlyPayment()µÄJavaScriptʵÏÖÈçÏÂËùʾ£º
function getMonthlyPayment(principal, years, interestRate) {
var monthlyRate = interestRate / 12.0 / 100.0;
var p = Math.pow(1 + monthlyRate, years * 12);
var q = p / (p - 1);
var monthlyPayment = principal * monthlyRate * q;
return monthlyPayment;
}
×é¼þµÄ¶¨ÒåÎļþ£¨ÎÞÐèÐ޸ģ©£º
£¼componentType xmlns="http://www.osoa.org/xmlns/sca/1.0"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"£¾
£¼service name="MortgageCalculatorService"£¾
£¼interface.java inter/£¾
£¼/service£¾
£¼/componentType£¾
ÏÖÔÚ¿ÉÒÔÐÞ¸ÄMortgage¹¹¼þ×鶨Ò壬ʹÆäÒýÓÃJavaScriptµÄMortgageCalculator ×é¼þ£º
£¼component name="MortgageCalculatorJSComponent"
xmlns:js="http://incubator.apache.org/tuscany/xmlns/container/js/1.0-incubator-M2"£¾
£¼js:implementation.js script="MortgageCalculator.js" /£¾
£¼/component£¾
°ó¶¨¼°ÆäÀ©Õ¹
×é¼þ¼ä´«µÝÏûÏ¢µÄÐÒéÒ²ÊÇ¿ÉÀ©Õ¹µÄ¡£±ÈÈ磬Apache TuscanyÔËÐл·¾³ÌṩÁËÏÔʽµÄÀ©Õ¹APIÀ´°ïÖú½¨Á¢Ðµİ󶨷½Ê½¡£Ä¿Ç°Apache Tuscany Java SCAÔËÐл·¾³Ö§³ÖÈçϰ󶨷½Ê½£ºbinding.ws£¬binding.celtix£¬binding.jsonrpcºÍbinding.rmi¡£
SCA¶¨ÒåµÄÒ»¸ö×é×°Ä£ÐÍÒÔ×î´óÏ޶ȵÄÀûÓÃÏÖÓм¼Êõ£¬¿ÉÒÔʹÓÃJavaºÍJavaScriptÓïÑÔÓëÍⲿWeb·þÎñͨÐÅ¡£Õâ¾ÍÒâζ×ÅSCA¿ÉÒÔ±»Ö𲽵ر»ÒýÈëµ½ÆóÒµÖжøÎÞÐèÖØÐ´ÏÖÓÐÓ¦Óá£Apache TuscanyÖ§³ÖµÄ×é¼þʵÏÖ·½·¨ºÍ°ó¶¨ÐÎʽµÄÁбí´ú±íÁËÏÖ½ñÕýÔÚÆÕ±éʹÓúͲ»¶Ï·¢Õ¹µÄ¼¼Êõ¡£½øÒ»²½¶øÑÔ£¬¿ÉÒÔͨ¹ýʹÓÃÀ©Õ¹API´´½¨Ä¿Ç°Ã»Óб»Ö§³ÖµÄеÄ×é¼þʵÏֺͰ󶨡£
·þÎñÖÊÁ¿£¨QoS£©ºÍ²ßÂÔ(Policy)
SCAÃ÷È·µØ½«×é¼þµÄʵÏÖºÍ×é¼þ¼äÏûÏ¢½»»¥»úÖÆ·ÖÀ뿪À´£¬ÆäÔÊÐíÏûÏ¢´«ËͲßÂÔµÄÉùÃ÷¶ÀÁ¢ÓÚ×é¼þʵÏÖ¡£ÀýÈ磬Èç¹ûÒªÇó¿É¿¿µÄÏûÏ¢´«ËÍ£¬»òÕßÒªÇóÔÚͬһ¸öÊÂÎñµÄÉÏÏÂÎÄÖУ¬»òÕßÒªÇó¼ÓÃÜ´«ËÍ£¬ÄÇô¿ÉÒÔÔÚSCDLÎļþÖжԲßÂÔ£¨policy£©Ìí¼ÓÏàÓ¦µÄÉùÃ÷¡£¹ØÓÚ²ßÂÔÉùÃ÷µÄ¹æ·¶Ä¿Ç°ÉÐδÍê³É£¬µ«ÊÇ¿ÉÒÔÔÚOSOAÍøÕ¾Éϲ鵽²Ý°¸¡£(
http://www.osoa.org/display/Main ... ture+Specifications)
·ÇSCA¿Í»§¶Ë·ÃÎÊSCA·þÎñ
ÔÚMostMortgateµÄÀý×ÓÖУ¬ÒѾ½²ÁË»ùÓÚSCAµÄϵͳ¼È¿ÉÒÔÌṩ·þÎñ½Ó¿Ú¸øÍâ½çµ÷Óã¬Ò²¿ÉÒÔµ÷ÓÃÍâ½çÌṩµÄ·þÎñ½Ó¿Ú¡£
ֻҪʹÓÃSCAÔËÐл·¾³Ö§³ÖµÄÐÒéÄܹ»·ÃÎʵķþÎñ£¬SCA¿ÉÒÔµ÷ÓÃÍⲿÈÎÒâÒ»¸ö·þÎñ¡£ÔÚÇ°ÃæµÄÀý×ÓÀïÒѾ½²ÁËCreditCheck Web·þÎñ¿ÉÒÔÓɵÚÈý·½Ìṩ£¬²¢Ã»ÓÐÒªÇó±ØÐëÓÃSCAʵÏÖ¡£ÆäÖÐÒÀÀµÓÚ±»·ÃÎÊ·þÎñµÄWSDLÃèÊö£¬²¢Ê¹ÓÃWeb·þÎñ£¨SOAP/HTTP£©°ó¶¨ÓëÆä½øÐн»»¥¡£
ÄÇôÈçºÎÓ÷ÇSCA¿Í»§¶Ë·ÃÎÊSCA·þÎñÄØ£¿ÔÚ±¾ÀýÖУ¬SCAʹÍⲿµÄÓ¦ÓÿÉÒÔͨ¹ýWeb·þÎñ·ÃÎÊCreditCheck×é¼þ£¬ÄÇôÈκοÉÒÔ·ÃÎÊWeb·þÎñµÄ¿Í»§¶Ë¶¼¿ÉÒÔ·ÃÎÊCreditCheck×é¼þ£¬²»¹Ü¿Í»§¶ËÊÇʹÓúÎÖÖ¼¼ÊõʵÏֵġ£¶øÇÒSCAÒ²ÌṩÁËÏàÓ¦µÄAPIʹ·ÇSCA¿Í»§¶Ëµ÷ÓÃÒ»¸ö±¾µØµÄSCA·þÎñ¡£
public class MortgageClient {
public static void main(String[] args) throws Exception {
// Locate the service using SCA APIs
CompositeContext context = CurrentCompositeContext.getContext();
LoanApproval loanApplication = context.locateService(LoanApproval.class,
"LoanApplicationComponent"

;
...
// Invoke the service
boolean result = loanApplication.approve(customer, 200000d, 30);
}
}
×¢ÒâSCAµÄAPIÀàCurrentCompositeContext¿É¸ù¾Ý×°ÅäÎļþÖÐ×é¼þµÄÃû×ÖÖ±½Ó»ñÈ¡µ½·þÎñʵÀý»òÕßÊÇʵÏÖ·þÎñ½Ó¿ÚµÄ´úÀí(Proxy)¡£µ±¿Í»§¶ËµÄ´úÂëµ÷ÓÃijһ¸ö·½·¨Ê±£¨ÔÚ±¾ÀýÖÐÊÇapprove()£©,SCAÔËÐл·¾³»á¸ù¾ÝSCDLÎļþÖе͍Ò彫²Ù×÷²ÎÊý´«µÝ¸øÏàÓ¦µÄ·½·¨¡£
SDOºÍDAS
±¾ÎÄÖ÷ÒªÐðÊöÁËSCAÈçºÎÃèÊö×é¼þÒÔ¼°ÈçºÎ×°Åä×é¼þ¡£SCAÓÐÒ»¸öæ¢Ãü¼Êõ£·þÎñÊý¾Ý¶ÔÏó£¨Service Data Object£¬SDO£©£ºÆä¶¨ÒåÁËÒ»×é·ÃÎÊÊý¾ÝµÄͳһAPI¡£Õâ¶ÔÓÚSCAÊǺÜÖØÒªµÄ£¬ÒòΪÆäʹµÃApache TuscanyºÍPHP SCAÔËÐл·¾³¿ÉÒÔ²ÉÓÃͳһµÄAPIÀ´´¦ÀíÏûÏ¢£¬°üÀ¨×é¼þ·¢ËͺͽÓÊÕµ½µÄÏûÏ¢¡£SCAºÍSDO¿ÉÒÔÒ»ÆðÐͬ¹¤×÷£¬µ±È»£¬Ò²Äܱ»¶ÀÁ¢Ê¹Ó᣹ØÓÚSDOµÄ¸ü¶àÐÅÏ¢ºÍÏà¹Ø¹æ·¶£¬Çë²Î¼ûOSOAÍøÕ¾¡££¨
http://www.osoa.org/display/Main/Service+Data+Objects+Home£©
×ܽá
SCAΪ¿ª·¢SOAÓ¦Óúͽâ¾öÃô½ÝIT»·¾³ÖеÄÕ½ÂÔÐèÇóÌṩÁËÒ»¸ö¼ò½à¶øÁé»îµÄÄ£ÐÍ¡£SCA±à³ÌÄ£Ð͹Ø×¢ÓÚÃèÊö×é¼þ¼°Æä×°Åä·½·¨¡£ÆäÖ÷ҪĿ±êÊÇʹÏÖÓеĸ÷ÖÖ¼¼ÊõÄܹ»Ðµ÷ÔË×÷£¬ÒÔ²¹³äÏÖÓеÄÒì¹¹»·¾³¡£±¾ÎÄÖ¼ÔÚ¶ÔSCA½øÐÐÒ»¸öºê¹ÛµÄ½éÉÜ£¬ÓÐÐËȤµÄ¶ÁÕß¿ÉÒÔÔÚ
www.osoa.orgÉÏÕÒµ½ÓйØSCA¸üÉîÈëµ ... ¬ÕâÈý¸öÏîÄ¿·Ö±ðÊÇ£º
l Apache Tuscany(
http://incubator.apache.org/tuscany/)£¬
l SCAµÄJavaºÍC++ÔËÐл·¾³ºÍSCAµÄPHPÔËÐл·¾³(
http://www.osoa.org/display/PHP/SOA+PHP+Homepage)¡£
Ïà¹Ø×ÊÔ´£º
l OSOAÍøÕ¾¨D¨Dwww.osoa.org/display/Main/Home£»
l Apache TuscanyÏîÄ¿¨D¨Dhttp://incubator.apache.org/tuscany/£»
l PHP PECL SOAÏîÄ¿¨D¨Dhttp://pecl.php.net/package/sca_sdo£»
http://www.osoa.org/display/PHP/SOA+PHP+Homepage;
l ´û¿îÉóºËÀý×Ó¨D?a href="Dhttp://svn.apache.org/repos/asf/incubator/tuscany/java/sca/demos/mortgage-loanapproval/" target="_blank">Dhttp://svn.apache.org/repos/asf/incubator/tuscany/java/sca/demos/mortgage-loanapproval/
±¾ÎÄÊ×·¢ÓÚ¡¶Java Developer's Journal¡·£¬all rights reserved¡£ ×÷Õß¼ò½é£º Simon Laws is with IBM and is working with the open source Apache and PHP communities to build Java, C++ and PHP implementations of the Service Component Architecture (SCA) and Service Data Object (SDO) specifications Haleh Mahbod is a program director with IBM, managing the team contributing to the Apache Tuscany as well as SOA for PHP open source. She has extensive development experience with database technologies and integration servers. Raymond Feng is a senior software engineer with IBM. He is now working on the Service Component Architecture (SCA) runtime implementation in Apache Tuscany project as a committer. Raymond has been developing SOA for more than 4 years and he was a key developer and team lead for WebSphere Process Server products since 2002.
ÊõÓï±í£º
Ó¢ÎÄ ÖÐÎÄ
Binding °ó¶¨
Component ×é¼þ
Composite ¹¹¼þ×é
Data Access Service (DAS) Êý¾Ý·ÃÎÊ·þÎñ
Interface ½Ó¿Ú
Local Service ±¾µØ·þÎñ
Reference ÒýÓÃ
Remote Service Ô¶³Ì·þÎñ
Policy ²ßÂÔ
Property ÊôÐÔ
Quality of Service (QoS) ·þÎñÖÊÁ¿
Service Component Architecture (SCA) ·þÎñ×é¼þ¼Ü¹¹
Service Data Object (SDO) ·þÎñÊý¾Ý¶ÔÏó
Service Oriented Architecture (SOA) ÃæÏò·þÎñ¼Ü¹¹
9ÔÂ4ÈÕ 12:48:55
Å£ÕߺãÅ£ ÓÚ 2007Äê09ÔÂ04ÈÕ 15:43:36
Å£ÕߺãÅ£ ÓÚ 2007Äê09ÔÂ05ÈÕ 12:23:18