Ñ¡ÔñÏÔʾ×ÖÌå´óС

ejb 2.1ÖÐʵÏÖweb service

xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 


ejb2.1£¨enterprise javabeans 2.1£©ÕýÊ½ÍÆ¼ö°æ±¾ÒѾ­³ǫ̈£¬Ëü²úÉúµÄ¶¯Á¦Ö÷ÒªÊÇenterprise javabeans¶ÔÖ§³Öweb serviceµÄÐèÇó£¬Í¬Ê±Ò²ÊÇÒòΪmicr
osoft .netµÄ·¢²¼£¬Ëü¶Ôj2ee»òÕß˵¶Ôjava¼¼ÊõÀ´ËµÒѾ­¹¹³ÉÁ˾޴óÍþв¡£ÔÚа汾µÄejb2.1ÖУ¬Ö÷ÒªµÄ±ä»¯Ö÷Òª¼¯ÖÐÔÚ»ùÓÚsoapºÍwsdlµÄweb serviceÉÏ¡£ejbÒѾ­³ÉΪһÖÖеÄweb serviceƽ̨¡£Ëü¶Ôweb serviceµÄÖ§³ÖÖ÷ÒªÌåÏÖÔÚÈý¸öеÄweb service apiÉÏ:·Ö±ðÊÇjax-rpc£¨java api for xml-rpc£¬Ëü»ù±¾ÉÏÊÇͨ¹ýsoapʵÏÖµÄjava rmi£¬Îªrpc¸ñʽµÄsoapÏûÏ¢ÌṩԶ¶Ë½Ó¿Ú£©¡¢saaj£¨soap api with attachments for java£¬ËüÄ£·ÂsoapÏûÏ¢µÄ½á¹¹£¬Í¬Ê±Ò²Óй¦ÄÜÓÐÏÞµÄÏûÏ¢·Ö·¢ÄÜÁ¦£©ºÍjaxm£¨java api for xml messaging£¬ËüÀàËÆÓÚjms£¬Ìṩ·¢ËͺͽÓÊÕsoapÏûÏ¢µÄÏûÏ¢¼Ü¹¹£©£¬ÀûÓÃËüÃÇ¿ÉÒÔʵÏÖÓëÆäËüÀàÐ͵Äweb service½øÐÐͨѶ£¬¶øÇÒ»¹ÔÊÐíÎÞÐòµÄ»á»°beanºÍÏûÏ¢Çý¶¯µÄbeanÀ´×÷Ϊweb serviceʹÓã¬Ê¹ËüÃÇÄܹ»±»ÈκÎÓë soap1.1¼æÈݵĿͻ§¶ËËù·ÃÎÊ¡£ÀýÈ磺ʹÓÃsoap£¬ÎÒÃǾͿÉÒÔ´ÓÆäËüƽ̨web serviceÀ´µ÷ÓÃÎÞÐòµÄ»á»°beanµÄ·½·¨£¬Ïó΢ÈíµÄ.net£¬perl£¬apache axixºÍÆäËûµÄÓïÑÔºÍÆ½Ì¨¡£ejb2.1ÖÐеÄweb service¹¦ÄÜÄܹ»ÌṩһÖÖǰËùδÓÐµÄ¿çÆ½Ì¨»¥²Ù×÷ÐÔ£¬ËüÖ÷ÒªÊǽ¨Á¢ÔÚÁ½¸öոеÄj2ee soap¹¤¾ß°üjax-rpcºÍjaxm¡£

web service´ú±íÁË·Ö²¼Ê½¼ÆËãµÄ×îг±Á÷£¬¿ÉÄÜÊÇ×Ô1995ÄêjavaµÄ³öÏÖºÍ1998Äêxml³öÏÖÒÔÀ´×îÖØÒªµÄ¼¼ÊõÁË¡£Æäʵ£¬¸øweb serviceÏÂÒ»¸ö׼ȷµÄ¶¨ÒåÊǺÜÄѵģ¬ÒòΪweb service²¢²»ÊÇÈκÎÌØÊâ¼¼Êõ»òÕ߯½Ì¨ËùÌØÓеģ¬web serviceÊÇÒ»ÖÖÍøÂçÓ¦ÓóÌÐò£¬ÒÔxmlÐÎʽµÄÎĵµ£¬Ê¹ÓÃsoapºÍwsdl½øÐÐÐÅÏ¢½»»»¡£Òª¸üºÃµØÀí½âÕâ¾ä»°µÄº¬Ò壬Äã±ØÐëÏÈÀí½âsoapºÍwsdl£¬ÏÂÃæÊÇÓйØÕâ·½ÃæµÄ¶¨Ò壺

soap£º¼òµ¥¶ÔÏó·ÃÎÊЭÒ飨simple object access protocol£©£¬ÊÇÔÚw3cµÄÖ§³ÖÏ£¬ÓÉmicrosoft£¬ibmºÍÆäËû¹«Ë¾¿ª·¢µÄ£¬»ùÓÚxml¸ñʽµÄÒ»ÖÖЭÒ飬ËüÊÇ¿ÉÉìËõºÍ¿ÉÀ©Õ¹µÄ£¬²»ÏóÒÔǰµÄdce rpc, corba iiop, java rmi-jrmpÒÔ¼°dcom£¬ËüÒѾ­±»¼¸ºõËùÓеĿª·¢³§ÉÌËùÈϿɺͽÓÊÜ¡£

wsdl£ºweb·þÎñÃèÊöÓïÑÔ£¨web service description language£©£¬Ò²ÊÇÔÚw3cµÄÖ§³ÖÏ£¬ÓÉmicrosoft£¬ibmºÍÆäËû¹«Ë¾¿ª·¢µÄ£¬xml¸ñʽµÄÓïÑÔ£¬ÓÃÀ´¶Ôweb service½øÐÐÃèÊö£¬°üÀ¨ÆÚÍûµÄÏûÏ¢¸ñʽÀàÐÍ¡¢ËùʹÓõÄinte.netЭÒéºÍweb serviceµÄinte.netµØÖ·¡£

Æäʵ£¬web service´ú±íÁËÒ»ÖÖеķֲ¼Ê½¶ÔÏó¼¼Êõ£¬ËüºÍcorba iiopºÍjava rmiºÜÏàËÆ£¬µ«Ò²ÓÐÐí¶à²îÒ죬×î´óµÄ²îÒìÓ¦¸Ã¾ÍÊÇÕæÕýµÄƽ̨ÎÞ¹ØÐÔ¡£¾¡¹Üjava rmiºÍcorba iiop¶¼Éù³Æ×Ô¼ºÊÇÆ½Ì¨Î޹ص쬵«Êµ¼ÊÉÏ£¬ËüÃǶ¼ÐèÒªËüÃÇ×Ô¼ºµÄƽ̨¡£ÒªÊ¹ÓÃjava rmi£¬ÄãÐèÒªÒ»¸öjavaÐéÄâ»úºÍjava±à³ÌÓïÑÔ£¬¶ÔʹÓÃÆäËüÓïÑԵĿª·¢ÕßÈçvisual basic»òc++À´Ëµ£¬java rmi²¢²»ÊÇÆ½Ì¨Î޹صġ£corba iiopÒ²ÊÇÓоÖÏÞÐԵģ¬iiopЭÒéͨ³£ÐèÒªÒ»¸öÌØ¶¨µÄ¼Ü¹¹Èçcorba orb£¬Ò²Ö»ÓÐÉÙÊý¼¸¸ö³§ÉÌÖ§³Öcorba¡£ÁíÒ»·½Ã棬web service×ÅÖØÃèÊöÐÅÏ¢½»»»µÄЭÒ飬¶ø²»ÊÇ×ÅÖØÃèÊö¶ÔÕâЩЭÒéµÄʵÏÖ£¬»»¾ä»°Ëµ£¬Äã¿ÉÒÔÓÃÈκÎÓïÑÔ£¬ÔÚÈÎºÎÆ½Ì¨ÉÏ£¬ÒÔÈκÎÄã×Ô¼ºÏ²»¶µÄ·½Ê½À´´´½¨web service¡£

web serviceÁíÍâÒ»¸öºÃ´¦¾ÍÊÇ£¬²»ÏóÆäËüµÄ·Ö²¼Ê½¶ÔÏóÌåϵ£¬Ëü½¨Á¢ÔÚÏÖÓеļ¼Êõ¼Ü¹¹µÄ»ù´¡Ö®ÉÏ£¬Òò´Ë´ó¶à˵³§É̺ÜÈÝÒ×ʵÏÖ¡£soapºÍwsdl¶¼ÊÇ»ùÓÚxmlµÄ£¬¶øxmlÒѾ­±»¹ã·ºÖ§³Ö£¬xml½âÎöÆ÷ÔÚ¼¸ºõÿһÖÖ¿ª·¢ÓïÑÔÖж¼ÓУ¬Òò´Ë£¬´¦ÀísoapÏûÏ¢ºÍwsdlÎĵµµÄ»ù´¡ÒѾ­´æÔÚÁË¡£´ËÍ⣬web serviceÏûϢͨ³£ÊÇͨ¹ýtcp/ip½øÐн»»»µÄ£¬Ò²ÒѾ­±»¼¸ºõËùÓÐµÄÆ½Ì¨ºÍÓïÑÔËùÖ§³Ö¡£

jax-rpcºÍejb

jax-rpc£¨java api for xml-rpc£©ÊµÖÊÉϾÍÊÇͨ¹ýsoap·ÃÎʵÄjava rmi¡£ËüºÍ¡°±¾µØµÄ¡±java rmi (java rmi-jrmp)ºÍjava rmi-iiopºÜÏ󣬵«ÊÇËüÊÇÒÔsoap×÷ΪͨѶЭÒ顣ҪʵÏÖjax-rpc,×îµÍÒªÇóÊDZØÐë¶Ôͨ¹ýhttp·ÃÎʵÄsoapÖ§³Örpc±àÂ룬µ«ÊÇ£¬ÎÒÃÇÈÔÈ»¿ÉÒÔÌṩ¶ÔÆäËû±àÂ뷽ʽ¡¢ÏûÏ¢¸ñʽºÍinte.netЭÒéµÄÖ§³Ö¡£jax-rpcÄܹ»±»ÓÃÀ´´Ó»á»°¡¢ÊµÌåºÍÏûÏ¢Çý¶¯µÄbeanÀ´µ÷ÓÃweb serviceµÄ²Ù×÷¡£jax-rpcÄܹ»ÓÃÀ´·ÃÎÊÆäËüƽ̨µÄweb service¡£ÀýÈ磺һ¸öÎÞÐòµÄ»á»°bean¿ÉÄÜ»áʹÓÃjax-rpcÀ´µ÷ÓÃ.net web serviceµÄ·½·¨¡£ÈçÏÂͼËùʾ£º

xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />aspectratio="t">asp?p=/2006-4-28/4828810_29_2a.gif" src="./0011.files/image001.gif">


ÿ¸öejb¿ª·¢É̶¼»áÌṩ×Ô¼º¶Ôjax-rpcµÄʵÏÖ£¬µ«ËüÃÇÖ®¼äµÄ²î±ðÊǺÜСµÄ£¬Ö÷ÒªÊÇÒòΪËùÓеÄʵÏÖ¶¼±ØÐë×ñÕÕjax-rpc¹æ·¶£¬jax-rpcÄܹ»µ±×÷¿Í»§¶ËapiÀ´·ÃÎÊÆäËüµÄweb service£¬µ«ÊÇ£¬ËüͬʱҲÊÇÒ»¸ö±»³Æ×÷¡°endpoint½Ó¿Ú¡±µÄÐÂÐÍÆóÒµbean½Ó¿Ú¡£µ±jax-rpcµ±×÷¿Í»§¶ËapiµÄʱºò£¬»á»°¡¢ÊµÌå»òÕßÏûÏ¢Çý¶¯µÄbeanÄܹ»Ê¹ÓÃËüÓëÆäËüƽ̨µÄweb service½»»»ÏûÏ¢¡£jax-rpc¶¨ÒåÁËÈýÖÖ±à³ÌÄ£ÐÍ£ºgenerated stub¡¢dynamic proxyºÍdii£¨dynamic invocation interface£©£¬ÎÒÃÇÔÚejb»·¾³Öг£ÓõÄgenerated stubÄ£ÐÍ¡£

Èç¹ûʹÓÃjax-rpcÈ¥·ÃÎÊweb service£¬ÄÇô£¬Õâ¸öweb service±ØÐë·¢ÐÐÒ»¸öwsdlÎĵµ£¬ejb¿ª·¢ÉÌÌṩµÄjax-rpc¹¤¾ß°ü²úÉújava rmi½Ó¿ÚºÍʵÏÖwsdlÎĵµËùÃèÊöµÄweb service²Ù×÷µÄstub£¬Ò»µ©stubºÍ½Ó¿Ú´´½¨³öÀ´Ö®ºó£¬ÎÒÃǾͿÉÒÔ°ÑËüÃÇÓëÆóÒµbeanµÄjndi enc£¨environment naming context£©½øÐа󶨣¬È»ºóÓë web service½øÐÐͨÐÅ¡£

wsdl°Ñ·ÃÎÊweb serviceµÄ½Ó¿ÚÃèÊö³É¡°¶Ë¿Ú¡±£¬Ã¿¸ö¶Ë¿ÚÓÐÒ»¸ö»òÕß¶à¸ö¡°²Ù×÷¡±£¬¶Ë¿ÚºÍ²Ù×÷µÄ¸ÅÄîºÍjavaµÄ½Ó¿ÚºÍ·½·¨ÀàËÆ¡£Êµ¼ÊÉÏ£¬jax-rpc¶¨ÒåÁËwsdlºÍjava rmiÖ®¼äµÄÓ³Éä¹ØÏµ£¬Ëü²úÉúÀ´×Զ˿ڵÄÔ¶¶Ë½Ó¿Ú£¬²¢´øÓÐÏìÓ¦¶Ë¿Ú²Ù×÷µÄ·½·¨¡£ÀýÈ磺һ¸öwsdlÎĵµ¿ÉÄÜÃèÊöÒ»¸ö±»³Æ×÷¡°bookprice¡±¡¢²¢´øÓе¥¸ö²Ù×÷getboolpriceµÄ¶Ë¿Ú£¬ÏÂÃæ¾ÍÊÇbookprice wsdlÎĵµµÄһЩ¼òµ¥´úÂ룺

<?xml version="1.0"?>

<definitions name="bookprice"

targetnamespace="http://lucky.myrice.com/getbookprice"

xmlns:tns="http://lucky.myrice.com/getbookprice"

xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"

xmlns:xsd="http://www.w3.org/2001/xmlschema"

xmlns="http://schemas.xmlsoap.org/wsdl/">

<!-- ÃèÊö²ÎÊýºÍ·µ»ØÖµµÄmessageÔªËØ -->

<message name="isbnmessage">

<part name="isbn" type="xsd:string" />

</message>

<message name="pricemessage">

<part name="price" type="xsd:float" />

</message>

<!-- ÃèÊöweb service³éÏó½Ó¿ÚµÄporttypeÔªËØ -->

<porttype name="bookprice">

<operation name="getbookprice">

<input name="isbn" message="tns:isbnmessage"/>



<output name="price" message="tns:pricemessage"/>

</operation>

</porttype>

<!-- ÔÚÕâÀï½øÐÐ°ó¶¨ -->

<!-- serviceÔªËØ¸æËßÎÒÃÇweb serviceµÄµØÖ· -->

<service name="bookpriceservice">

<port name="bookprice" binding="tns:bookprice_binding">

<soap:address location="http://lucky.myrice.com/bookprice" />

</port>

</service>

</definitions>

ÔÚ²¿ÊðµÄʱºò£¬jax-rpc stubÉú³É¹¤¾ß»á°Ñwsdl¶Ë¿Úת»»³ÉÔ¶³Ì½Ó¿ÚºÍstub£¬¶Ë¿ÚºÍ·þÎñstub¿ÉÄÜÊÇÏÂÃæµÄÑù×Ó£º
 
public interface bookpriceservice extends javax.xml.rpc.service{

public bookprice getbookprice( ) throws remoteexception;

}

public interface bookprice extends java.rmi.remote {

public float getbookprice(string isbn)

throws remoteexception;

}

ÕâÀïÖ»ÊÇÒ»¸ö¼òµ¥µÄÀý×Ó£¬Õâ¸ö·þÎñÖ»ÓÐÒ»¸ö¶Ë¿Ú£¬¶øÊµ¼ÊÉÏÒ»¸ö·þÎñ»áÓжà¸ö¶Ë¿Ú£¬Ã¿¸ö¶Ë¿ÚÓÐÏàÓ¦µÄ½Ó¿ÚºÍstub¡£Ò»µ©½Ó¿ÚºÍstub²úÉú²¢±»°ó¶¨µ½jndi encÖ®ºó£¬ËüÃǾͿÉÒÔÔÚÔËÐÐÆÚµ÷ÓÃweb serviceµÄ¡°²Ù×÷¡±ÁË£¬ÔÚÏÂÃæµÄÎÞÐò»á»°beanÀbookcatalog ejbÀûÓÃjax-rpc´Ó.net web webvices²éÕÒÒ»±¾ÊéµÄÅú·¢¼Û¸ñ¡£
 
public class bookcatalog implements javax.ejb.sessionbean {

...

public float getwholesaleprice(string isbn) {

try {

initialcontext jndicontext = new initialcontext ( );

bookpriceservice service =

jndicontext.lookup("java:comp/env/service/bookpriceservice");

bookprice bookprice_port = service.getbookprice();

float price = bookprice_port.getbookprice( isbn );

return price;

catch(remoteexception re){

}catch(serviceexception se){

}catch(namingexception ne){

}

}
...

}

µ±µ÷ÓÃgetbookprice()·½·¨Ê±£¬jax-rpc stubÏò.net web service·¢ËÍsoapÐÅÏ¢£¬stub²úÉúµÄsoapÐÅÏ¢¿ÉÄÜ»áÊÇÏÂÃæµÄÑù×Ó£º

 
<?xml version=&#39;1.0&#39; ?>

<env:envelope

xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"

xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"

xmlns:xyz=&#39;http://lucky.myrice.com/bookprice"

encodingstyle="http://schemas.xmlsoap.org/soap/encoding/">

<body>

<xyz:getbookprice>

<isbn xsi:type="string">1565928695

</xyz:getbookprice>

</body>

</env:envelope>

.net erb services´¦ÀísoapÐÅÏ¢£¬²¢°Ñ½á¹û·µ»Øµ½stub£¬stub·ÖÎö½á¹û£¬×îºóÏò¿Í»§¶Ë·¢ËÍ×îÖÕ½á¹û¡£

jax-rpc stubÖеķ½·¨¿ÉÒÔÓвÎÊý£¬²ÎÊýÀàÐÍ¿ÉÒÔÊÇ»ù±¾Êý¾ÝÀàÐÍ£¬Èçint,longµÈ£»»ù±¾°ü×°ÀàÐÍ£¬Èçjava.lang.interger,java.lang.longµÈ£»Êý×飻java±ê×¼ÀàÐÍ£¬Èçstring,dateµÈ£»Ò²¿ÉÒÔÊÇ×Ô¶¨Òå¶ÔÏóÀàÐÍ¡£×Ô¶¨Òå¶ÔÏó±ØÐë·ûºÏjax-rpc¹æ·¶µÄ¹æÔò¡£

³ýÁ˲úÉústubÍ⣬jax-rpcÒ²Ö§³Ö¶¯Ì¬´úÀí·þÎñ£¬³ýÁËËüµÄÔ¶³Ì½Ó¿ÚºÍstubµÄʵÏÖÊÇÔÚÔËÐÐʱ¶¯Ì¬²úÉúµÄÖ®Í⣬¶¯Ì¬´úÀí·þÎñµÄ×÷ÓúÍstubÒ»Ñù¡£ÏÂÃæµÄÀý×Ó¾ÍÊÇjax-rpc²úÉú¶¯Ì¬stubµÄ
£º

public class bookcatalog implements javax.ejb.sessionbean {

...

public float getwholesaleprice(string isbn) {

try {

initialcontext jndicontext = new initialcontext ( );

javax.xml.rpc.service service =

jndicontext.lookup("java:comp/env/service/dynamicservice");



bookprice bookprice_port = service.getport(bookprice.class);

float price = bookprice_port.getbookprice( isbn );

return price;

catch(remoteexception re){}

catch(serviceexception se){}

catch(namingexception ne){}

}

...

}

ÔÚÔËÐÐʱ£¬getport()·½·¨×Ô¶¯°Ñbookprice½Ó¿ÚÓ³Éäµ½wsdlÎĵµÀﶨÒåµÄÏàÓ¦¶Ë¿Ú£¬È»ºó²úÉústubʵÏֽӿڵŤ×÷¡£

jax-rpc»¹Ö§³ÖÃûΪdii£¨dynamic invocation interface£©µÄ¶¯Ì¬api£¬diiÔÊÐí¿ª·¢ÈËÔ±ÔÚÔËÐÐʱµ÷ÓÃsoap·½·¨¡£Èç¹ûÄãʹÓùýcorba dynamic invocation interfaceµÄ»°£¬ÄÇÄã¶Ôjax-rpc diiÒ»¶¨ºÜÈÝÒ×Àí½â¡£jax-rpc diiÀàËÆÓÚjavaµÄ·´É䣨reflection£©,ËüÔÊÐíÄãÒÔ·½·¨µÄÐÎʽµÃµ½Ò»¸ö´ú±íweb service²Ù×÷µÄ¶ÔÏóµÄ²Î¿¼£¬µ÷ÓÃÄǸö·½·¨£¬¾ÍÎÞÐèÔÙ·ÃÎÊservice factory»òÕßÔÙʹÓÃstubºÍÔ¶¶Ë½Ó¿Ú¡£ÏÂÃæµÄÀý×Ó¾ÍÊÇÆóÒµbean·ÃÎÊbookprice¶Ë¿ÚµÄgetbookprice()²Ù×÷£º
 
public class bookcatalog implements javax.ejb.sessionbean {

...

public float getwholesaleprice(string isbn) {

try {

initialcontext jndicontext = new initialcontext ( );

javax.xml.rpc.service service =

jndicontext.lookup("java:comp/env/service/dynamicservice");

qname port = new qname("http://lucky.myrice.com/getbookprice ","bookprice");

qname operation = new qname("http://lucky.myrice.com/getbookprice",

"getbookprice");

call callobject = service.createcall(port, operation);

object [] args = new object[1]; args[0] = isbn;

float price = (float) callobject.invoke( args );

return price.floatvalue();

}

catch(jaxrpcexception se){}

catch(namingexception ne){}

}



}

...

}

ʵ¼ÊÉÏ£¬Äã¿ÉÒÔÔÚÔËÐÐÆÚÅäÖòÎÊý¡¢ÀàÐÍ¡¢±àÂëµÈ£¬ÄãÄÜÓÃwsdlÅäÖõÄËùÓÐÐÅÏ¢¶¼¿ÉÒÔÓÃdii¶¯Ì¬ÅäÖá£

jax-rpcÁíÍ⻹ÊÇÒ»¸ö³ÆÎªÖն˽ӿڣ¨endpoint interface£©µÄÐÂÐÍ×é¼þ£¬Õâ¸öнӿÚÔÊÐíÎÒÃǰÑÎÞÐòµÄ»á»°bean×÷Ϊweb serviceÀ´ÊµÏÖ£¬Õâ¸öÖն˽ӿڼò»¯ÁËjavax.rmi.remote½Ó¿ÚµÄʵÏÖ£¬²¢ÇÒ×ñÊØjax-rpc¹æ·¶ÖеĹæÔò¡£°ÑÒ»¸öÎÞÐòµÄ»á»°bean×÷Ϊweb serviceÀ´ÊµÏÖÊǷdz£¼òµ¥µÄ£ºÖ»Ð趨ÒåbeanÀàºÍÔ¶¶Ë½Ó¿Ú£¬È»ºóʹÓÿª·¢É̵ÄÌṩµÄ¹¤¾ßÀ´ÊµÏÖ¡£Ò»µ©½¨Á¢ÁËweb service£¬ËüµÄ·½·¨¾ÍÄܹ»±»ÈκÎsoap¼æÈݵġ¢À´×ÔÈκÎÓïÑÔºÍÆ½Ì¨µÄ¹¤¾ß°üÀ´µ÷Ó㬱ÈÈ磺.net£¬perl£¬apache axis£¬c£¬c++µÈµÈ¡£ÈçÏÂͼËùʾ£º

asp?p=/2006-4-28/7179710_29_2b.gif" src="./0011.files/image002.gif">


ÓÉÓÚjax-rpc½ö½öÊÇjava rmiµÄÁíÍâÒ»ÖÖÐÎʽ£¬Òò´Ë£¬ÀûÓÃËü·ÃÎÊÆóÒµbeanÊǺÜ×ÔÈ»µÄ£¬ÎÒÃÇÒÔǰÒѾ­ÀûÓÃrmi-iiopºÍrmi·ÃÎʹý¡£ÀûÓÃjax-rpcÓëejb½øÐÐͨÐÅÒâζ×Åejb¿ÉÒÔµ±×÷web serviceÀ´Ê¹Óã¬ÖÁÉÙÎÞÐòµÄbeanÊÇ¿ÉÒԵġ£ejb2.1ÔÊÐíÎÒÃÇÀûÓÃjax-rpc£¬µ«Ö»ÄÜÊÇÓ¦ÓÃÓÚÎÞÐòµÄbean£¬ÕâÖ÷ÒªÊÇÒòΪsoapÊÇÒ»ÖÖÎÞÐòµÄÏûϢЭÒ飬ËüûÓжÔÏóʶ±ðµÄ¸ÅÄÒò´ËËü²»ÄÜÓ¦ÓÃÔÚÓÐÐòµÄºÍʵÌåµÄbeanÖС£

ejb2.1ΪÎÞÐòµÄbean¶¨ÒåÁËÒ»¸öеÄweb serviceÖÕ¶Ë£¨endpoint£©½Ó¿Ú£¬web service½çµÄÈËʹÓá°ÖÕ¶Ë¡±À´³Æºô·¢ËͺͽÓÊÕsoapÐÅÏ¢µÄÈκζ«Î÷¡£ÔÚejbÖУ¬Öն˾ÍÊÇÒ»¸öÎÞÐòµÄ»á»°bean£¬Ëü¿ÉÒÔͨ¹ýsoapÀ´·ÃÎÊ£¬²¢ÇÒ×ñÕÕjax-rpc¹æ·¶Öж¨ÒåµÄ´Ójava-to-wsdlµ½java-to-soapµÄÓ³É乿Ôò¡£Ê¹ÓÃjax-rpc×îΪejbÖն˵Ļù´¡ÊÇ˳Àí³ÉÕµģ¬ÒòΪjax-rpc¹æ·¶Öж¨ÒåÁËsoapÏûÏ¢ºÍjava·½·¨µ÷ÓÃÒÔ¼°´ÓjavaÔ¶³Ì½Ó¿Ú²úÉúwsdlÎĵµµÄÏêϸ¹æÔò¡£

²»Ïóejb¿ª·¢ÕßÒѾ­ºÜÊìϤµÄÔ¶¶ËºÍ±¾µØ½Ó¿Ú,Öն˽ӿڲ¢Ã»Óм̳Ðejb¶ÔÏóÀàÐÍ£¬Èçejbobject»òejblocalobject¡£Ïà·´£¬Öն˽ӿÚÖ±½Ó¼Ì³ÐÁËjavax.ejb.remote½Ó¿Ú¡£ÀýÈ磺ÔÚÉÏÃæµÄÀý×ÓÖеÄbookpriceµÄweb serviceÄܹ»ºÜÇáÒ×ʵÏÖΪejbÖеÄÖÕ¶Ë¡£ÏÂÃæµÄ´úÂë˵Ã÷ÁËÒ»¸öbookpriceµÄÖն˽ӿڣ¬ºÍʵÏÖΪweb serviceµÄÎÞÐò»á»°beanµÄ²¿·ÖÁÐ±í¡£

 
public interface bookprice extends javax.rmi.remote {

public string getbookprice(string isbn) throws javax.rmi.remoteexception;

}

public class bookpricews implements bookprice, javax.ejb.sessionbean {

public float getbookprice(string isbn){

connection con = null;

statement stmt = null;

resultset rs;

try {

datasource ds = jdnienc.lookup("java:comp/env/jdbc/datasource");

con = ds.getconneciton();

stmt = con.createstatement();

rs = stmt.executequery("select wholesale from catalog where isbn = \&#39;"

+isbn+"\&#39;");

if(rs.next()){

float price = rs.getfloat("wholesale");

return price;

}else{

return 0;

}

}

catch (sqlexception se) {

//´¦ÀíÒì³£

}

}

...

}

Öն˽ӿڱÈÔ¶³ÌºÍ±¾µØ½Ó¿ÚÒ»¸öºÜÃ÷ÏԵĺô¦¾ÍÊÇËü²»»á´øÀ´Ïóejbobject»òÕßejblocalobectÎÞÓ÷½·¨µÈÐÎʽµÄ¶îÍ⸺µ££¬´ËÍ⣬Öն˽ӿÚûÓаüÀ¨home½Ó¿Ú£¬soap²»Ö§³Ö°´ÒýÓô«Öµ¡£Òò´Ë£¬Äã²»ÄÜÒªÇóÒ»¸öweb services½Ó¿Ú£¨home ½Ó¿Ú£©°´ÒýÓô«µÝµ½ÁíÍâÒ»¸öÔ¶¶Ë½Ó¿Ú£¬¸ü½øÒ»²½½²£¬Äã²»ÄÜ´´½¨»òÒÆ³ýÒ»¸öweb service¡£

µ±ÎÒÃǰÑÒ»¸öÎÞÐò»á»° bean¿ª·¢³Éweb serviceʱ£¬Ê×Ïȶ¨ÒåÒ»¸öÖն˽ӿڣ¬È»ºóÀûÓÃËü²úÉújax-rpcµÄ¿Í»§¶ËstubºÍwsdlÎĵµ»òÕßÈç¹ûÄã²úÉújax-rpc¿Í»§¶Ëstub£¬ÎÞÐè×öÈκθı䣬Äã¿ÉÒÔ°ÑËü°ü×°³Éj2ee¿Í»§¶Ëjar£¬ÀûÓÃËüÈ¥·ÃÎÊÎÞÐò»á»°bean£¬ÀûÓÃsoap×öͨѶЭÒé¡£Èç¹ûÄã´ÓÖն˽ӿڲúÉúwsdlÎĵµ£¬ÆäËüµÄsoap¹¤¾ß°üÒ²Äܹ»Ê¹ÓÃÕâ¸öÎĵµÈ¥·ÃÎÊÄãµÄÎÞÐòbean¡£wsdlºÍsoapÊÇweb serviceµÄ»ù´¡£¬Òò´Ë£¬Îªejb web services·¢²¼wsdl¿ÉÒÔʵÏÖÓëÆäËüƽ̨µÄ½»»¥¡£

saaj

saaj£¨soap with attachments api for java£©ÊÇÒ»¸ö»ùÓÚapiµÄsoap¹¤¾ß°ü£¬Ëü¶¨ÒåÁËsoap messages with attachments (swa)ºÍsoapÓõÄmimeÐÅÏ¢¸ñʽ¡£java¿ª·¢ÈËÔ±Äܹ»ÀûÓÃsaajÀ´´´½¨¡¢¶ÁÈ¡»òÕßÐÞ¸ÄsoapÐÅÏ¢¡£Õâ¸öapi°üº¬Ðí¶àÀàºÍ½Ó¿Ú£¬ÓÃÀ´¶¨ÒåsoapÔªËØ£¨envelope, body, header, faultµÈ£©£¬xmlÃû³Æ¿Õ¼ä£¬ÊôÐÔ£¬ÎÄ×Ö½ÚµãÒÔ¼°mime¸½¼þ¡£Äã¿ÉÒÔʹÓÃsaaj²Ù×÷¼òµ¥µÄ¡¢Ã»Óи½¼þµÄxml¸ñʽµÄsoapÐÅÏ¢£¬Ò²¿ÉÒÔ²Ù×÷¸ü¼Ó¸´Ôӵġ¢´ømime¸½¼þµÄsoapÐÅÏ¢¡£saaj¿ÉÒÔÓëjax-rpc½áºÏʹÓ㬵«Ò²¿ÉÒÔµ¥¶ÀʹÓã¬ËüÓÐ×Ô¼ºµÄ¡¢Í¨¹ýhttp1.1ʵÏÖµÄ
ÇëÇó/Ó¦´ð·½Ê½µÄÏûÏ¢»úÖÆ¡£

saajÊÇ»ùÓÚabstract factoryģʽµÄ¡£saajÊÇÀàÐ͵ijéÏ󼯺ϣ¬Ã¿Ò»ÖÖÀàÐ͵ĶÔÏó¶¼ÊÇÓÉsaaj¼¯ºÏÖÐÁíÍâµÄ¶ÔÏó²úÉúµÄ¡£ÔÚabstract factoryµÄsaajʵÏÖÖУ¬messagefactoryÀàÊǸù£¬Ëü¸ºÔð´´½¨×Ô¼ºµÄʵÀý£¬·´¹ýÀ´´´½¨soapmessage£¬soapmessage°üº¬soappart£¬Ëü´ú±ísoapÎĵµ¡¢0¸öºÍ¶à¸öattachmentpart£¨´ú±í¸½¼þµÄ¶ÔÏó£¬Èçgif,pdfµÈ£©¡£soappart°üº¬soapenvelope¡¢soapbody¡¢soapheaderºÍÆäËüÀàÐ͵ĶÔÏó¡£
 
<?xml version=&#39;1.0&#39; ?>

<env:envelope

xmlns:env=&#39;http://schemas.xmlsoap.org/soap/envelope/&#39;

xmlns:xsi=&#39;http://www.w3.org/2001/xmlschema-instance&#39;

xmlns:book=&#39;http://lucky.myrice.com/bookprice&#39;

encodingstyle=&#39;http://schemas.xmlsoap.org/soap/encoding/&#39;>

<env:body>

<book:getbookprice>

<isbn xsi:type=&#39;string&#39;>1565928695

</book:getbookprice>

</env:body>

</env:envelope>

¶øÏÂÃæÊÇÓÃsaaj´´½¨µÄÀý×Ó£º
 
import javax.xml.soap.*;

public class example_1 {

public static void main(string [] args) throws soapexception{

messagefactory msgfactory = messagefactory.newinstance();

soapmessage message = msgfactory.createmessage();

soappart soap = message.getsoappart();

soapenvelope envelope = soap.getenvelope();

envelope.getheader().detachnode();

soapbody body = envelope.getbody();

soapelement getbookprice = body.addchildelement(

"getbookprice","book",

"http://lucky.myrice.com/bookprice");

getbookprice.setencodingstyle(soapconstants.uri_ns_soap_encoding);

soapelement isbn = getbookprice.addchildelement("isbn");

isbn.addnamespacedeclaration("xsi",

"http://www.w3.org/2001/xmlschema-instance");



name xsitype = envelope.createname("type","xsi",

"http://www.w3.org/2001/xmlschema-instance");

isbn.addattribute(xsitype,"string");

isbn.addtextnode("1565928695");

message.writeto(system.out);

}

}

Èç¹ûÎÒÃǶԱÈÉÏÃæµÄÀý×Ó£¬¾Í»á·¢ÏÖsaaj¶¨ÒåÁËswaÏûÏ¢¸ñʽµÄ׼ȷ½á¹¹£¬soapÏûÏ¢µÄÊôÐÔºÍsaajÀàÐÍÖ®¼ä¿ÉÒÔ·¢ÏÖÊÇÒ»Ò»¶ÔÓ¦µÄ¹ØÏµ£ºenvelope¶ÔÓ¦soapenvelope£»body¶ÔÓ¦soapbody£»getboolprice¶ÔÓ¦soapbodyelement£»isbn¶ÔÓ¦soapelement(text)µÈ¡£

µ±È»£¬ÉÏÃæµÄÀý×ÓÊǺܼòµ¥µÄ£¬Ëü²¢Ã»Óаüº¬Èκθ½¼þ£¬swaÖеĸ½¼þͨ³£ÊǶþ½øÖÆ»òÕßÊÇÆäËüµÄ·Çxml¸ñʽµÄÎļþ£¬Ëüͨ³£±»soapÎĵµÒýÓá£saaj¿¿jaf£¨ java activation framework£©Ìí¼Ó¸½¼þ£¬²¢´¦Àí¶ÔÏóºÍÊý¾ÝÁ÷Ö®¼äµÄÏ໥ת»»¡£ÏÂÃæµÄÕâ¶ÎʾÀý´úÂëÀûÓÃsaajÏòsoap¸½¼ÓÒ»¸öpdfÎļþ¡£
 
messagefactory msgfactory = messagefactory.newinstance();

soapmessage message = msgfactory.createmessage();

attachmentpart pdfattach = message.createattachmentpart();

filedatasource file = new filedatasource("testsaajattachment.pdf");

datahandler pdfdh = new datahandler(file);

pdfattach.setdatahandler(pdfdh);

Òª³É¹¦´¦Àí¸½¼þ£¬ÎÒÃDZØÐëÏÈÀí½âjaf£¬jafÊÇ´¦ÀímimeÊý¾ÝµÄ¼«ºÃ¿ò¼Ü£¬µ«ËüÒ²ÓÐ×Ô¼ºµÄ¾ÖÏÞÐÔ£¬´ó²¿·Ö¾ÖÏÞÐÔÓëʹÓÃdatacontenthandlerÀàÐÍÓйء£²ØÔÚjafµÄ¾ÖÏÞÐÔºóÃæµÄϸ½ÚÎÊÌâÊǺܸ´Ôӵ쬵«ÎÒÃÇ¿ÉÒÔʹÓÃjaf datasourceÀàÐÍÀ´¿Ë·þ´ó²¿·ÖµÄ¾ÖÏÞÐÔ£¬¾ÍÏóÀý×ÓÖеÄjavax.activation.filedatasourceÄÇÑù¡£

saajÊÇÒ»¸öÓÃ;¹ã·ºµÄapi£¬¿ÉÒÔÈÃÎÒÃÇÔÚ¼¸ºõÈκεÄÓ¦ÓÃÖд´½¨swaÏûÏ¢£¬ÔÚijЩÇé¿öÏ£¬ÎÒÃÇ¿ÉÒÔÓëjax-rpcÒ»ÆðÔÚÎÄ×ÖÏûÏ¢ºÍsoapÏûÏ¢ÖÐʹÓÃsaaj£¬µ«Ò²¿ÉÒÔÓëÆäËüµÄapiÈçjavamail£¬jms£¬jaxmÒ»ÆðʹÓá£Èç¹ûjavaÓ¦ÓÃÒѾ­´´½¨ÁËswaÏûÏ¢£¬ËüÈÔ¿ÉÒÔʹÓÃsaaj°ÑÕâ¸öÏûϢת»»³É¶þ½øÖÆÁ÷£¬È»ºóÓëʹÓÃÆäËüapiµÄweb services½øÐн»»»ÐÅÏ¢¡£

jaxm ºÍ ejb

jaxm (java api for xml messaging)ÊǺÍ(java message service)ÀàËÆµÄsoapÏûÏ¢api£¬¾ÍÏójmsÊÇÒ»ÖÖͨ¹ýÃæÏòÏûÏ¢µÄÖмä¼þÀ´·¢ËͺͽÓÊÕÏûÏ¢µÄapiÒ»Ñù£¬jaxmÊÇÒ»ÖÖͨ¹ýweb serviceÀ´·¢ËͺͽÓÊÕÏûÏ¢µÄapi¡£
    jaxmÊÇÃæÏòÎĵµµÄ£¬Ëü°ÑsoapÏûÏ¢ÒÔxml¸ñʽµÄÎĵµÀ´½øÐд«Ë͵ġ£jaxm¿Í»§¶Ë¶¼ÊÇʹÓÃsaaj£¨soap with attachments api for java£©À´×°Åä¡¢½ÓÊÕºÍʹÓÃsoapÏûÏ¢µÄ£¬saajÄ£·ÂsoapÏûÏ¢µÄʵ¼Êxml½á¹¹£¬ÕâÖÖ»úÖÆÓëjax-rpcÊÇÓкܴóÇø±ðµÄ£¬jax-rpcʹÓ÷½·¨µ÷ÓõÄÓï·¨£¬°ÑsoapÏûÏ¢Òþ²Øµ½ÁËjava rmi´úÀíµÄºóÃæ¡£Ê¹ÓÃjax-rpc£¬Äã Ëù¿´µ½µÄÊǽö½öÓÉ·½·¨¡¢²ÎÊý¡¢·µ»ØÖµ×é³ÉµÄÔ¶¶Ë½Ó¿Ú£¬¶øÊ¹ÓÃjaxm£¬ÄãÖ±½Ó´¦ÀísoapЭÒé¡£Ïójax-rpcÒ»Ñù£¬jaxm±ØÐëÓësoap¼æÈݵÄweb service½»»»soapÐÅÏ¢¡£ÀýÈ磺һ¸öÆóÒµbean¿ÉÄÜʹÓÃjaxmÓëÓÃperlдµÄweb service½»»»soapÐÅÏ¢¡£ejb2.1¿ª·¢ÕßÄܹ»ÒÔjaxm×÷ΪһÖÖеÄÏûÏ¢Çý¶¯beanµÄ»ù´¡£¬ÎÒÃdzÆËüΪ»ùÓÚjaxmµÄÏûÏ¢Çý¶¯bean£¨jaxm-mdb£©¡£jaxm-mdbʹÓõÄÊÇsoapÏûÏ¢£¬µ«°çÑݵÄÊÇweb serviceµÄ½ÇÉ«¡£jaxm-mdbÄܹ»ÊµÏÖµ¥ÏòµÄÒì²½½Ó¿Ú£¬¾ÍÏó»ùÓÚjmsµÄÏûÏ¢Çý¶¯µÄbean£¬Ò²¿ÉÒÔʵÏÖÇëÇó/Ó¦´ðʽµÄͬ²½½Ó¿Ú¡£
    jax-rpcºÍjaxm¶¼ÔÊÐíÆóÒµbean·ÃÎʲ»Í¬Æ½Ì¨ÉϵÄweb service£¬Ò²¿ÉÒÔ×÷ΪÓÃÎÞÐòºÍÏûÏ¢Çý¶¯bean½¨Á¢µÄweb serviceµÄ»ù´¡¡£µ«ÊÇ£¬ÓÉÓÚȱ·¦³§É̵ÄÖ§³Ö£¬jaxmµÄʹÓÃǰ¾°²¢²»ÊǺÜÀÖ¹Û¡£


 


¹Ø¼ü×Ö ±¾ÎÄËùÊô¹Ø¼ü×Ö

Ïà¹Ø Óë±¾ÎÄÏà¹ØÎÄÕÂ