±à¼ÍƼö: |
±¾ÎÄÖ÷Òª½éÉÜÁËRMI·¶ÐÍÓëÓ¦Óá¢RMI¼ò½é¡¢RMI»ù±¾Ó¦Óÿª·¢¡¢RMI¿Í»§»Øµ÷¼°×®ÏÂÔØÓ밲ȫ¹ÜÀíÆ÷¡£
±¾ÎÄÀ´×Ôcsdn£¬ÓÉ»ðÁú¹ûÈí¼þLinda±à¼¡¢ÍƼö¡£ |
|
RMI·¶ÐÍÓëÓ¦ÓÃ
·Ö²¼Ê½¶ÔÏó·¶ÐÍ
·Ö²¼Ê½¶ÔÏó·¶ÐÍÊÇÔÚÏûÏ¢´«µÝÄ£ÐÍÖ®ÉÏÌṩ³éÏóµÄÒ»ÖÖ·¶ÐÍ£¬ÊÇ»ùÓÚ·Ö²¼Ê½ÏµÍ³ÖжÔÏóÒ»ÖÖ¼ÆËã·¶ÐÍ£¬Ê¹ÓÃËüÓû§¿ÉÒÔ·ÃÎÊÍøÂçÉϵĶÔÏ󣨼´·Ö²¼Ê½¶ÔÏ󣩡£·Ö²¼Ê½¶ÔÏó·¶Ð͵ĺËÐÄÊDzÙ×÷µ÷Ó㬶ø´«µÝµÄÊý¾Ý³Ðµ£¸¨Öú½ÇÉ«¡£

ÉÏͼչʾÁË·Ö²¼Ê½¶ÔÏó·¶ÐÍ£¬ÔËÐÐÔÚÖ÷»úAÉϵĽø³ÌÏòפÁôÓÚÖ÷»úBÉϵķֲ¼Ê½¶ÔÏó·¢³ö·½·¨µ÷Óã¬Èç¹ûÐèÒª´«µÝÊý¾Ý£¬½«×÷Ϊ²ÎÊýËæµ÷Óô«µÝ¡£Ö÷»úAÉϵĽø³Ì·¢³öµÄµ÷ÓûᵼÖÂÖ÷»úBÉϵÄij¸ö·½·¨±»Ö´ÐУ¬Èç¹û¸Ãµ÷ÓôæÔÚ·µ»ØÖµ£¬Ò²»á´ÓÖ÷»úB´«Ë͵½Ö÷»úA¡£Ê¹Ó÷ֲ¼Ê½¶ÔÏóµÄ½ø³Ì³ÆÎª¸Ã¶ÔÏóµÄ¿Í»§½ø³Ì¡£¸Ã¶ÔÏóµÄ·½·¨³ÆÎª¿Í»§½ø³ÌµÄÔ¶³Ì·½·¨¡£
·Ö²¼Ê½¶ÔÏó·¶Ð͵ÄÌåϵ½á¹¹
ÏÂͼÃèÊöÁËÖ§³Ö·Ö²¼Ê½¶ÔÏó·¶Ð͵Ļù±¾Ìåϵ½á¹¹£¬Ò»¸ö·Ö²¼Ê½¶ÔÏóÓÉijһ½ø³ÌÌṩ£¬ÕâÀï³ÆÖ®Îª¶ÔÏó·þÎñÆ÷£¨object
server£©£¬Í¬Ê±±ØÐëÔÚϵͳÖÐΪ·Ö²¼Ê½¶ÔÏó×¢²áÌṩһÖÖÉèÊ©£¬ÕâÀï³ÆÖ®Îª¶ÔÏó×¢²áÆ÷£¨object registry£©£¬»ò¼ò³ÆÎª×¢²áÆ÷£¨registry£©¡£

peer-to-peer·¶ÐÍ
1.peer-to-peer·¶ÐÍÔ´ÓÚP2PÍøÂ磨ÓÖ³ÆÎª¶ÔµÈ¼ÆËãÍøÂ磩£¬¼ò³ÆÎªP2P·¶ÐÍ¡£P2PÍøÂçÊÇÎÞÖÐÐÄ·þÎñÆ÷¡£
2.ÔÚpeer-to-peer·¶ÐÍÖУ¬¸÷²ÎÓë½ø³ÌµÄµØÎ»ÊÇÆ½µÈµÄ£¬¶¼¾ßÓÐÏàͬµÄÐÔÄܺÍÔðÈΣ¨Òò´Ë£¬³ÆËüÃÇΪpeer£©¡£Ã¿¸ö²ÎÓëÕߣ¨½ø³Ì£©¶¼¿ÉÒÔÏòÁíÒ»¸ö²ÎÓëÕß·¢ÆðÇëÇóºÍ½ÓÊÕÏìÓ¦¡£ÔÚÒ»¸ö»ùÓÚP2P·¶Ð͵ķֲ¼Ê½Ó¦ÓÃÖУ¬Ã¿Ò»¸ö²ÎÓëµÄ½ø³ÌÍùÍù¼È³Ðµ£µÄ·þÎñÆ÷½ø³ÌµÄ½ÇÉ«£¨×ÊÔ´ÌṩÕߣ©£¬Óֳе£Á˿ͻ§½ø³ÌµÄ½ÇÉ«£¨×ÊÔ´ÇëÇóÕߣ©¡£
ÈçºÎ·ÃÎÊijһ·Ö²¼Ê½¶ÔÏó
1.¶ÔÏó¿Í»§£¨object client£©½ø³Ì´Ó×¢²áÆ÷Öвéѯ¸Ã¶ÔÏóµÄÒýÓã¬È»ºóʹÓöÔÏóµÄÒýÓõ÷ÓÃÔ¶³Ì·½·¨¡£¶ÔÏó¿Í»§Í¨¹ý¿Í»§´úÀíµ÷ÓÃÔ¶³Ì·½·¨¡£ÔÚ·Ö²¼Ê½¼ÆËã»·¾³ÖУ¬´úÀíÊÇÖ¸³äµ±ÆäËûÈí¼þ¹¹¼þÖ®¼äµÄе÷ÕßµÄÈí¼þ¹¹¼þ¡£´úÀíͨ¹ýÓë¿Í»§Ö÷»úÉϵÄÈí¼þ½»»¥£¬Ìṩ·Ö²¼Ê½¶ÔÏóϵͳµÄÔËÐÐʱ֧³Ö¡£ÀýÈ縺ÔðÏòÔ¶³ÌÖ÷»ú´«ËÍ·½·¨µ÷ÓÃËùÐèµÄ½ø³Ì¼äͨÐÅ£¬°üÀ¨·â×°ÐèÒª´«Êä¸øÔ¶³Ì¶ÔÏóµÄ²ÎÊýÊý¾Ý¡£
2.·þÎñÆ÷¶ËÒ²ÐèÒªÀàËÆÌåϵ½á¹¹£¬ÆäÖзֲ¼Ê½¶ÔÏóϵͳµÄÔËÐÐʱ֧³Ö´¦ÀíÏûÏ¢½ÓÊÕºÍÊý¾Ý½â·â£¬²¢½«µ÷ÓÃת·¢µ½³ÆÎª·þÎñÆ÷´úÀíµÄÈí¼þ¹¹¼þ¡£·þÎñÆ÷´úÀíͨ¹ýÓë·Ö²¼Ê½¶ÔÏó½»»¥£¬ÔÚ±¾µØµ÷Ó÷½·¨£¬²¢½«½â·âÊý¾Ý×÷Ϊ²ÎÊý´«Èë¡£¸Ã·½·¨µ÷Óóö·¢·þÎñÆ÷Ö÷»úÉÏijЩÈÎÎñµÄÖ´ÐС£·½·¨µÄÖ´Ðнá¹û£¬±»·þÎñÆ÷´úÀíͨ¹ýË«·½µÄÔËÐÐʱ֧³ÖºÍÍøÂçÖ§³Ö£¬×ª·¢¸ø¿Í»§´úÀí¡£
Ô¶³Ì¹ý³Ìµ÷Óã¨RMI£©
RMIÔ´ÓÚÔ¶³Ì¹ý³Ìµ÷ÓÃRPC£¨Remote Procedure Call£©,RPC·¶Ð͵÷Óùý³ÌÈçÏÂͼËùʾ¡£
±¾µØ¹ý³Ìµ÷ÓúÍÔ¶³Ì¹ý³Ìµ÷ÓõÄÇø±ð
RMI¼ò½é
1.RMI£¨Remote Method Invocation£©¼´Ô¶³Ì·½·¨µ÷Óã¬ÊÇ·Ö²¼Ê½¼ÆËãµÄ¹Ø¼ü¡£RMIÊÇRPCÄ£Ð͵ÄÃæÏò¶ÔÏóʵÏÖ£¬ÊÇÒ»ÖÖÓÃÓÚʵÏÖÔ¶³Ì¹ý³Ìµ÷ÓõÄÓ¦ÓóÌÐò±à³Ì½Ó¿Ú£¬Ëüʹ¿Í»§»úÉÏÔËÐеijÌÐò¿ÉÒÔµ÷ÓÃÔ¶³Ì·þÎñÆ÷ÉϵĶÔÏó¡£ÓÉÓÚRMI
APIÖ»ÊÊÓÃÓÚJava³ÌÐò£¬ËùÒÔ£¬ÎÒÃÇÒ»°ã³ÆÎªJava RMI¡£
2.ͨ¹ýµ÷ÓÃRMIµÄAPI£¬¶ÔÏó·þÎñÆ÷ͨ¹ýĿ¼·þÎñµ¼³öºÍ×¢²áÔ¶³Ì¶ÔÏó£¬ÕâЩ¶ÔÏóÌṩһЩ¿ÉÒÔ±»¿Í»§³ÌÐòµ÷ÓõÄÔ¶³Ì·½·¨¡£´ÓÓï·¨ÉÏÀ´¿´£¬RMIͨ¹ýÔ¶³Ì½Ó¿ÚÉùÃ÷Ô¶³Ì¶ÔÏ󣬸ýӿÚÊÇJava½Ó¿ÚµÄÀ©Õ¹¡£Ô¶³Ì½Ó¿ÚÓɶÔÏó·þÎñÆ÷ʵÏÖ¡£¶ÔÏó¿Í»§Ê¹ÓÃÓë±¾µØ·½·¨µ÷ÓÃÀàËÆµÄÓï·¨·ÃÎÊÔ¶³Ì¶ÔÏ󣬲¢µ÷ÓÃÔ¶³Ì¶ÔÏóµÄ·½·¨¡£
Java RMIÌåϵ½á¹¹ 
×®/¿ò¼Ü£¨Stub/Skeleton£©²ã£º¿Í»§¶ËµÄ×®ºÍ·þÎñÆ÷¶ËµÄ¿ò¼Ü£»
Ô¶³ÌÒýÓã¨remote reference£©²ã£º´¦ÀíÔ¶³ÌÒýÓÃÐÐΪ£»
´«Êä²ã£¨transport£©£ºÁ¬½ÓµÄ½¨Á¢ºÍ¹ÜÀí£¬ÒÔ¼°Ô¶³Ì¶ÔÏóµÄ¸ú×Ù¡£
stubºÍskeleton
-------×®£¨stub£©ÊÇÔ¶³Ì¶ÔÏóµÄÒ»ÖÖ´úÀí½á¹¹£¬Ê¹µÃÔ¶³Ì¶ÔÏó¿ÉÒÔÏñ±¾µØ¶ÔÏóÄÇÑù±»·ÃÎÊ¡£×®ÌṩÁËÔ¶³Ì¶ÔÏóµÄËùÓÐÄܱ»µ÷ÓõÄÔ¶³Ì·½·¨£¬µ÷ÓÃÕß¿ÉÒÔͨ¹ýµ÷Óñ¾µØ×®£¨Ô¶³Ì¶ÔÏó´úÀí£©ËùÌṩµÄ·½·¨À´ÊµÏÖÔ¶³Ì¶ÔÏóµÄ·½·¨µ÷Óá£ÔÚRMIÖУ¬×®ÉùÃ÷ÁËͬԶ³Ì¶ÔÏóËùʵÏֵĽӿÚÏàͬµÄ·½·¨¼¯ºÏ¡£
-----µ±µ÷Ó÷½µ÷ÓÃ×®Äڵķ½·¨Ê±£¬»áÒÔÈçÏ·½Ê½½øÐд¦Àí£º
1.³õʼ»¯Ò»¸öÓëÔ¶³ÌJVM£¨°üº¬ÁËÔ¶³Ì¶ÔÏ󣩵ÄÁ¬½Ó
2.ÏòÔ¶³ÌJVM´«Êä·â×°ºóµÄ²ÎÊý£¨µ÷Ó÷½·¨Ãû£¬²ÎÊýµÈ£©
3.µÈ´ýÔ¶³ÌJVMÉϵķ½·¨µ÷Óýá¹û
4.½«·µ»Ø½á¹û»òÒì³£ÐÅÏ¢½â°ü
5.µ÷Ó÷½µÃµ½µ÷Óýá¹û
-----¿ÉÒÔ¿´³ö£¬×®¸ºÔðΪµ÷Ó÷½ÊµÏÖ²ÎÊýµÄÐòÁл¯ºÍ·´ÐòÁл¯£¬ÒÔ¼°·â×°ÁËÍøÂç²ãµÄͨѶ¹ý³Ì£¬¼ò»¯Á˵÷Ó÷½µÄ²Ù×÷¡£
-----ÔÚÔ¶³ÌÖ÷»úJVM£¬Ã¿Ò»¸öÔ¶³Ì¶ÔÏóÓÐÒ»¸ö¶ÔÓ¦µÄskeleton£¨Java2ƽ̨ϲ»ÔÙÐèÒªskeleton£©¡£Skeleton¸ºÔð·ÖÎöµ÷Ó÷½´«À´µÄ²ÎÊý£¬²¢µ÷ÓÃÏàÓ¦µÄʵ¼Ê¶ÔÏó¡£µ±skeleton½ÓÊÕµ½Ò»¸öÔ¶³Ì·½·¨µ÷ÓÃÇëÇó£¬Ëü½«°´ÈçÏ·½Ê½½øÐд¦Àí£º
1.½â°ü²¢·ÖÎö½ÓÊÕµ½µÄ²ÎÊýÐÅÏ¢
2.µ÷ÓÃÏàÓ¦µÄʵ¼Ê¶ÔÏóÉϵķ½·¨
3.½«µ÷Óýá¹û·â×°²¢´«Ê䏸µ÷Ó÷½·¨
-------¿ÉÒÔ¿´³öskeletonÓëstubµÄ´¦Àí¹ý³ÌÀàËÆ£¬µ«Ë³ÐòÕýºÃÏà·´£¬µ«ÔÚJava 2ƽ̨»ò¸ü¸ßµÄ°æ±¾ÖÐÒѾ²»ÔÙÐèÒªskeleton£¬ËüµÄ¹¦Äܱ»·´Éä»úÖÆËùÈ¡´ú¡£
RMI stubÓëskeletonÖ®¼äµÄ½»»¥ 
¶ÔÏó×¢²á
ͨ¹ýRMI API£¬¿ÉÒÔÀûÓÃÈô¸ÉÖÖĿ¼·þÎñÀ´×¢²á·Ö²¼Ê½¶ÔÏó¡£JNDI£¨Java Naming and
Directory Interface£¬JavaÃû×ÖºÍĿ¼£©¾ÍÊÇÒ»ÖÖÕâÑùµÄĿ¼·þÎñ£¬¿ÉÒÔ½«ÆäÓÃÓÚδʹÓÃRMI
APIµÄÓ¦ÓÃÖС£ÁíÍ⣬RMI×¢²á±írmiregistry£¬ÊÇJava SDKÌṩµÄÒ»ÖÖ¼òµ¥Ä¿Â¼·þÎñ¡£
RMI»ù±¾Ó¦Óÿª·¢
Ô¶³Ì½Ó¿Ú
-----Ò»¸ö²»¶¨Òå·½·¨µÄ±ê¼Ç½Ó¿Ú¡£ÔÚRMI APIÖУ¬·Ö²¼Ê½¶ÔÏóµÄ´´½¨¿ªÊ¼ÓÚÔ¶³Ì½Ó¿Ú¡£¶ø´´½¨Ô¶³Ì½Ó¿Úʱ,±ØÐë×¼ÊØÒÔϹæÔò£º
(1)Ô¶³Ì½Ó¿Ú±ØÐëÖ±½Ó»ò¼ä½ÓÀ©Õ¹Java.rmi.Remote½Ó¿Ú£¬ÇÒ±ØÐëÉùÃ÷Ϊpublic£¬³ý·Ç¿Í»§¶ËÓÚÔ¶³Ì½Ó¿ÚÔÚͬһ°üÖУ»
(2)³ýÓëÓ¦ÓóÌÐò±¾ÉíÓйصÄÎ¥ÀýÖ®Í⣬Զ³Ì½Ó¿ÚÖеÄÿ¸ö·½·¨±ØÐëÔÚ×Ô¼ºµÄthrows´Ó¾äÖÐÉùÃ÷java.rmi.RemoteException£»
(3)ÔÚÔ¶³Ì·½·¨ÉùÃ÷ÖУ¬×÷Ϊ²ÎÊý»ò·µ»ØÖµÉùÃ÷µÄÔ¶³Ì¶ÔÏó±ØÐëÉùÃ÷ΪԶ³Ì½Ó¿Ú£¬¶ø·Ç¸Ã½Ó¿ÚµÄʵÏÖÀࣻ
·þÎñÆ÷¶ËÈí¼þ
-----¶ÔÏó·þÎñÆ÷ÊÇÖ¸ÕâÑùµÄÒ»ÖÖ¶ÔÏó£¬Ëü¿ÉÒÔÌṩijһ·Ö²¼Ê½¶ÔÏóµÄ·½·¨ºÍ½Ó¿Ú¡£Ã¿¸ö¶ÔÏó·þÎñÆ÷±ØÐ룺
1£©ÊµÏÖ½Ó¿Ú²¿·Ö¶¨ÒåµÄÿ¸öÔ¶³Ì·½·¨£»
2£©ÏòĿ¼·þÎñ×¢²á°üº¬ÁËʵÏֵĶÔÏó¡£
----Ò»°ã½¨Ò齫Á½²¿·Ö×÷Ϊ¶ÀÁ¢µÄÀà·Ö±ðʵÏÖ¡£
stubºÍskeletonÉú³É
1.ÔÚRMIÖУ¬·Ö²¼Ê½¶ÔÏóÐèҪΪÿ¸ö¶ÔÏó·þÎñÆ÷ºÍ¶ÔÏó¿Í»§Ìṩ´úÀí£¬·Ö±ð³ÉΪ¶ÔÏóskeletonºÍstub¡£ÕâЩ´úÀí¿Éͨ¹ýʹÓÃJava
SDKÌṩµÄRMI±àÒëÆ÷rmic£¬±àÒëÔ¶³Ì½Ó¿ÚʵÏÖÉú³É¡£¿ÉÔÚÃüÁîÐÐÏÂÊäÈëÏÂÊöÃüÁîÉú³ÉstubºÍskeletonÎļþ£ºrmic
2.Èô±àÒë³É¹¦£¬ÔòÉú³ÉÁ½¸ö´úÀíÎļþ£¬ÎļþÃû¶¼ÒÔʵÏÖÀàµÄÀàÃûΪǰ׺£¬ÈçSomeImpl_stub.classºÍSomeImpl_skel.class£¬ÔÚJava2ƽ̨Ï£¬Ö»Éú³ÉstubÎļþ¡£¶ÔÏóµÄstubÎļþ¼°Ô¶³Ì½Ó¿ÚÎļþ£¬±ØÐ뱻ÿ¸ö¶ÔÏó¿Í»§Ëù¹²Ïí¡£
RMIÓ¦Óù¹½¨²½Öè
1.Ϊ¸ÃÓ¦ÓõÄËùÓдýÉú³ÉÎļþ´´½¨Ò»¸öĿ¼¡£
2.ÔÚSomeInterface.javaÖж¨ÒåÔ¶³Ì·þÎñÆ÷½Ó¿Ú¡£±àÒë²¢Ð޸ijÌÐò£¬Ö±µ½²»ÔÙÓÐÈκÎÓï·¨´íÎó¡£
3.SomeImpl.javaÖÐʵÏÖ½Ó¿Ú£¬±àÒë²¢Ð޸ijÌÐò£¬Ö±µ½²»ÔÙÓÐÈκÎÓï·¨´íÎó¡£
4.ʹÓÃRMI±àÒëÆ÷rmic´¦ÀíʵÏÖÀ࣬Éú³ÉÔ¶³Ì¶ÔÏóµÄstubÎļþ rmic SomeImpl
5.ÒÔ´ÓĿ¼Öп´µ½ÐÂÉú³ÉÎļþSomeImpl_Stub.class£¬Ã¿´ÎÐ޸ĽӿÚʵÏÖʱ£¬¶¼ÒªÖØÐÂÖ´Ðв½Öè3ºÍ²½Öè4
6.´´½¨¶ÔÏó·þÎñÆ÷³ÌÐòSomeServer.java£¬±àÒë²¢Ð޸ijÌÐò£¬Ö±µ½²»ÔÙÓÐÈκÎÓï·¨´íÎó¡£
7.¼¤»î¶ÔÏó·þÎñÆ÷ java SomeServer
RMIÓ¦ÓõÄÎļþ·ÅÖÃλÖà 

²âÊԺ͵÷ÊÔ
------¿ª·¢RMIÓ¦ÓÃʱ£¬½¨Òé×ñÑÒÔϲ½Ö裺
1.¹¹½¨×îСRMI³ÌÐòµÄÒ»¸öÄ£°å¡£´ÓÒ»¸öÔ¶³Ì½Ó¿Ú¿ªÊ¼£¬ÆäÖаüÀ¨Ò»¸ö·½·¨Ç©Ãû£¬Ò»¸östubʵÏÖ£¬Ò»¸öÊä³ö¶ÔÏóµÄ·þÎñÆ÷³ÌÐòÒÔ¼°Ò»¸ö×ãÒÔÓÃÀ´µ÷ÓÃÔ¶³Ì·½·¨µÄ¿Í»§³ÌÐò¡£ÔÚµ¥»úÉϲâÊÔÄ£°å³ÌÐò£¬Ö±µ½Ô¶³Ì·½·¨µ÷Óóɹ¦¡£
2.ÿ´ÎÔÚ½Ó¿ÚÖÐÔö¼ÓÒ»¸ö·½·¨Ç©Ãû¡£Ã¿´ÎÔö¼Óºó¶¼Ð޸Ŀͻ§³ÌÐòÀ´µ÷ÓÃÐÂÔö·½·¨¡£
3.ÍêÉÆÔ¶³Ì·½·¨¶¨ÒåÄÚÈÝ£¬Ã¿´ÎÖ»ÐÞ¸ÄÒ»¸ö¡£ÔÚ¼ÌÐøÏÂÒ»¸ö·½·¨Ö®Ç°£¬²âÊÔ²¢³¹µ×µ÷ÊÔÿ¸öÐÂÔö·½·¨¡£
4.ÍêÈ«²âÊÔËùÓÐÔ¶³Ì·½·¨ºó£¬²ÉÓÃÔöÁ¿Ê½·½·¨¿ª·¢¿Í»§Ó¦Óá£Ã¿´ÎÔö¼Óºó£¬¶¼²âÊԺ͵÷ÊÔ³ÌÐò¡£
5.½«³ÌÐò²¿Êðµ½¶ą̀»úÆ÷ÉÏ£¬²âÊÔ²¢µ÷ÊÔ¡£
RMI¿Í»§»Øµ÷
¿Í»§»Øµ÷
----»Øµ÷¼¼ÊõÔÊÐí¶ÔÌØ¶¨Ê±¼äµÄ·¢Éú¸ÐÐËȤµÄ¶ÔÏó¿Í»§ÔÚ¶ÔÏó·þÎñÆ÷ÉÏ×¢²á×Ô¼º£¬ÒÔ±ã·þÎñÆ÷¿ÉÒÔÔÚËùµÈ´ýʼþ·¢Éúʱ£¬Ïò¶ÔÏó¿Í»§·¢ÆðÒ»´ÎÔ¶³Ì·½·¨µ÷Óá£ÏÂͼ±È½ÏÁËÂÖѯÓë»Øµ÷ÕâÁ½ÖÖ¼¼Êõ¡£
------ÔÚRMIÖУ¬¿Í»§»Øµ÷ÊÇÔÊÐí¶ÔÏó¿Í»§ÔÚÔ¶³Ì»Øµ÷¶ÔÏó·þÎñÆ÷ÉÏ×¢²á×Ô¼º£¬ÒÔ±ã·þÎñÆ÷¿ÉÒÔÔÚËùµÈ´ýʼþ·¢Éúʱ£¬Ïò¿Í»§·¢ÆðÔ¶³Ì·½·¨µ÷ÓõÄÒ»¸öÌØÕ÷¡£×¢Ò⣬ÔÚ¿Í»§»Øµ÷ÖУ¬Ô¶³Ì·½·¨µ÷Óñà³ÌÊÇË«ÏòµÄ£¨»ò³ÆÈ«Ë«¹¤µÄ£©¡£ÏÂͼ½éÉÜȫ˫¹¤Ó¦ÓÃģʽ¡£

ÏÂͼ½éÉÜÁ˿ͻ§»Øµ÷»ù±¾¼Ü¹¹¡£ÈçÏÂͼËùʾ£¬Ã¿¸ö¿Í»§¶ÔÏó¶¼Ôڻص÷·þÎñÆ÷ÉÏ×¢²á×Ô¼º£¬Ëæºóÿµ±ÁíÒ»¸ö¿Í»§¶ÔÏóΪ֧³Ö»Øµ÷¶øÔÚ¶ÔÏó·þÎñÆ÷ÉÏ×¢²áʱ¼´±»Í¨¸æ¡£

Ö§³Ö¿Í»§»Øµ÷µÄRMIÓ¦ÓõĴ´½¨²½Öè
----¿ª·¢·þÎñÆ÷¶ËÈí¼þµÄËã·¨²½Ö裺
1.Ϊ±¾Ó¦Óü´½«Éú³ÉµÄËùÓÐÎļþ´ò¿ªÒ»¸öĿ¼
2.ÔÚCallbackServerInterface.javaÖж¨ÒåÔ¶³Ì·þÎñÆ÷½Ó¿Ú£¬±àÒë³ÌÐò£¬Ö±µ½Ã»ÓÐÈκÎÓï·¨´íÎó
3.ÔÚCallbackServerImpl.javaÖÐʵÏָýӿڡ£±àÒë³ÌÐò£¬Ö±µ½Ã»ÓÐÈκÎÓï·¨´íÎó
4.ʹÓÃRMI±àÒëÆ÷rmic´¦ÀíʵÏÖÀ࣬Éú³ÉÔ¶³Ì¶ÔÏóµÄstubÎļþ£¬¿ÉÒÔ´Óµ±Ç°Ä¿Â¼Öз¢ÏÖÐÂÉú³ÉµÄÎļþ£ºrmic
CallbackServerImpl
5.»ñÈ¡¿Í»§Ô¶³Ì½Ó¿ÚÀàÎļþµÄÒ»¸ö¿½±´¡£´ËÍâÒ²¿ÉÒÔ»ñȡԶ³Ì½Ó¿ÚÔ´ÎļþµÄÒ»¸ö¿½±´Ê¹ÓÃjavac±àÒë¸Ã³ÌÐò£¬Éú³É½Ó¿ÚÀàÎļþCallbackClientInterface.class
6.´´½¨¶ÔÏó·þÎñÆ÷³ÌÐòSomeServer.java¡£±àÒë³ÌÐò£¬Ö±µ½Ã»ÓÐÈκÎÓï·¨´íÎó
7.»ñÈ¡¿Í»§Ô¶³Ì½Ó¿ÚstubÎļþµÄÒ»¸ö¿½±´CallbackClientImpl_stub.class
8.¼¤»î¶ÔÏó·þÎñÆ÷£ºjava SomeServer
´ø¿Í»§»Øµ÷µÄRMIÓ¦ÓÃÖеÄÎļþ²¼¾Ö 

×®ÏÂÔØÓ밲ȫ¹ÜÀíÆ÷
×®£¨stub£©ÏÂÔØ
-------ÔÚ·Ö²¼Ê½¶ÔÏóϵͳµÄÌåϵ½á¹¹ÖУ¬ÐèÒªÓôúÀíÓÚ¶ÔÏó¿Í»§µÄÔ¶³Ì·½·¨µ÷Óý»»¥¡£ÔÚJava RMI
ÖУ¬¸Ã´úÀíÊÇ·þÎñÆ÷Ô¶³Ì½Ó¿Ústub¡£Java¡¡RMIÌṩÁ˿ͻ§¶¯Ì¬·ÃÎÊstubµÄ»úÖÆ¡£Ê¹Óö¯Ì¬stubÏÂÔØ£¬¿Í»§Ö÷»úÉϾͲ»ÔÙÐèÒªÓÐstubÀàÎļþµÄ¿½±´ÁË¡£È¡¶ø´úÖ®µÄÊÇ£¬stubÀà¿ÉÒÔÔÚ¿Í»§±»¼¤»îʱ£¬°´Ðè´ÓWeb·þÎñÆ÷´«Ë͵½¿Í»§Ö÷»úÉÏ¡£
RMI°²È«¹ÜÀíÆ÷
1.stubÏÂÔØ»á´øÀ´ÏµÍ³°²È«ÎÊÌâ¡£µ±´ÓÔ¶³ÌÖ÷»ú´«ÊäRMI stubµÈ¶ÔÏóʱ£¬ËüµÄÖ´Ðлáʹ±¾µØÖ÷»úÔâÊܵ½Ç±ÔڵĶñÒâ¹¥»÷¡£
ΪÁËÓ¦¶ÔÏÂÔØµÄstubËùÒýÆðµÄÍþв£¬JavaÌṩÀàRMISecurityManager¡£RMI³ÌÐò¿ÉÒÔʵÀý»¯¸ÃÀàµÄÒ»¸ö¶ÔÏó£¬ÊµÀý»¯µÄ¶ÔÏóÄܼàÊÓ³ÌÐòÖ´2.ÐÐÆÚ¼äËùÒýÆðµÄËùÓа²È«Ãô¸Ð¶¯×÷¡£ÕâЩ¶¯×÷°üÀ¨·ÃÎʱ¾µØÎļþºÍʹÓÃÍøÂçÁ¬½Ó£¬ÒòΪÕâЩ¶¯×÷¿ÉÄܵ¼Ö¶Ա¾µØ×ÊÔ´ÒÔÍâÐ޸Ļò¶ÔÍøÂç×ÊÔ´µÄÎóÓá£
3.ÌØ±ðµØ£¬RMIÔËÐÐʱ֧³ÖÒªÇó·þÎñÆ÷½ø³ÌÔÚÊä³östubÏÂÔØËùÐèÒªµÄÈκζÔÏó֮ǰ£¬°²×°°²È«¹ÜÀíÆ÷£¬¿Í»§½ø³ÌÔÚÏÂÔØstub֮ǰ£¬Ò²ÐèÒª°²×°°²È«¹ÜÀíÆ÷¡£Ä¬ÈÏÇé¿öÏ£¬ÔÚÿ¸öÖ§³ÖJavaµÄϵͳµÄÌØ¶¨Ä¿Â¼ÖУ¬¶¼×°ÓÐÒ»¸öϵͳ¼¶°²È«²ßÂÔÎļþ¡£¸Ãϵͳ°²È«²ßÂÔÎļþ¶¨ÒåµÄÏÞÖÆ½«±»°²È«¹ÜÀíÆ÷Ö´ÐС£
Java°²È«²ßÂÔÎļþµÄÓï·¨
----Java°²È«²ßÂÔÎļþÊÇÒ»ÖÖÎı¾Îļþ£¬ÆäÖаüº¬Á˶¨ÒåÌØ¶¨Ðí¿ÉÊÚȨµÄ´úÂ룬ÏÂÃæÊÇRMIÓ¦ÓÃÖÐÒ»¸öµäÐ͵Äjava.policyÎļþ¡£
grant {
// permits socket access to all common TCP ports,
including the
// default RMI registry port (1099) ¨C need for both
the client and the server.
// permission java.net.SocketPermission ¡°:1024-65535",connect,accept,resolve";
// permits socket access to port 80, the default HTTP
port ¨C needed
// by client to contact an HTTP server for stub downloading
permission java.net.SocketPermission ":80¡±, ¡°connect¡±;
};
----¼¤»î¿Í»§Óë·þÎñÆ÷µÄÐÎʽÈçÏ£º
java -Djava.security.policy=java.policy SomeClient
java -Djava.security.policy=java.policy SomeServer
Ö¸¶¨stubÏÂÔØºÍ°²È«²ßÂÔÎļþ
**Èç¹û½«´ÓHTTP·þÎñÆ÷ÉÏÏÂÔØstub£¬ÄÇôӦ½«stubÀàÎļþ´«Êäµ½HTTP·þÎñÆ÷µÄÏàӦĿ¼ÖУ¬ÀýÈ磬Ö÷»úwww.mycompony.comµÄstubĿ¼£¬²¢È·±£¸ÃÎļþµÄ·ÃÎÊȨÏÞÊÇÈ«Çò¿É¶ÁµÄ¡£¼¤»î·þÎñÆ÷ʱ£¬Ö¸¶¨ÏÂÁÐÃüÁîÑ¡Ï
java ¨CDjava.rmi.server.codebase= -Djava.security.policy=<µ½°²È«²ßÂÔÎļþµÄÍêÕû·¾¶>
ÆäÖУ¬Êǰüº¬stubÀàµÄĿ¼URL£»<µ½°²È«²ßÂÔÎļþµÄÍêÕû·¾¶>Ö¸¶¨¸ÃÓ¦Óõݲȫ²ßÂÔÎļþ£»
ÀýÈ磺
java -Djava.rmi.server.codebase=
http://www.mycompany.com:8080/stubs/
-Djava.security.policy=java.policy HelloServer
----ÉÏÊö´úÂ뽫Æô¶¯HelloServer£¬²¢ÔÊÐí´ÓWeb·þÎñÆ÷www.mycompany.comµÄĿ¼stubsÏÂÔØstub¡£
----ÏÂͼչ³öÁËRMIÓ¦ÓÃËùÐèµÄÒ»×éÎļþ¼°ÕâЩÎļþµÄ²¼¾Ö¡£·þÎñÆ÷¶ËµÄÀàÎļþ°üÀ¨·þÎñÆ÷¡¢Ô¶³Ì½Ó¿Ú¡¢½Ó¿ÚʵÏÖ¡¢stubÀàµÄÀàÎļþºÍÓ¦Óõݲȫ²ßÂÔÎļþ¡£ÔÚ¿Í»§¶ËËùÐèµÄÎļþ°üÀ¨¿Í»§À࣬·þÎñÆ÷Ô¶³Ì½Ó¿ÚÀàºÍÓ¦Óð²È«²ßÂÔÎļþ¡£×îºó£¬stubÀàÎļþÐèÒª´æ´¢ÔÚHTTPÖ÷»úÉÏ£¬¿ÉÒԴӸ÷þÎñÆ÷ÉÏÏÂÔØstub¡£

Ö§³ÖstubÏÂÔØµÄRMIÓ¦ÓõĴ´½¨²½Öè
¡ª¿ª·¢·þÎñÆ÷¶ËÈí¼þµÄËã·¨²½Ö裺
1.Ϊ±¾Ó¦Óü´½«Éú³ÉµÄËùÓÐÎļþ´ò¿ªÒ»¸öĿ¼£»
2.ÔÚSomeInterface.javaÖж¨ÒåÔ¶³Ì·þÎñÆ÷½Ó¿Ú¡£±àÒë³ÌÐò£¬Ö±µ½Ã»ÓÐÈκÎÓï·¨´íÎó¡£
3.ÔÚSomeImpl.javaÖÐʵÏָýӿڡ£±àÒë³ÌÐò£¬Ö±µ½Ã»ÓÐÈκÎÓï·¨´íÎó£»
4.ʹÓÃRMI±àÒëÆ÷rmic´¦ÀíʵÏÖÀ࣬Éú³ÉÔ¶³Ì¶ÔÏóµÄstubÎļþ£¬¿ÉÒÔ´Óµ±Ç°Ä¿Â¼Öз¢ÏÖÐÂÉú³ÉµÄÎļþ£ºrmic
SomeImpl£»
5.´´½¨¶ÔÏó·þÎñÆ÷³ÌÐòSomeServer.java£¬±àÒë³ÌÐòÖ±µ½Ã»ÓÐÈκÎÓï·¨´íÎó£»
6.Èç¹ûÏ£ÍûʹÓÃstubÏÂÔØ£¬½«stubÀàÎļþ¿½±´µ½HTTPÖ÷»úµÄÏàӦĿ¼ÖУ»
7.Èç¹ûʹÓÃÁËRMI×¢²á±í£¬µ«Ã»Óм¤»î£¬Ç뼤»îRMI×¢²á±í¡£ÀýÈ磺
rmiregistry <¶Ë¿ÚºÅ£¬Ä¬ÈÏ1099>
8.Ò²¿ÉÒÔÔÚ¶ÔÏó·þÎñÆ÷³ÌÐòÖÐʹÓôúÂ뼤»îRMI×¢²á±í£»
9.ΪӦÓñà¼Ò»¸öJava°²È«²ßÂÔÎļþ£¬ÎļþÃûΪjava.policy£¬½«¸ÃÎļþ·ÅÔÚÏàӦĿ¼ÖУ¬»òÖ±½Ó·ÅÔÚµ±Ç°Ä¿Â¼ÖУ»
10.¼¤»î·þÎñÆ÷£¬Ö¸¶¨Ï£ÍûstubÏÂÔØµÄcodebaseºÍ°²È«²ßÂÔÎļþ£º
Java ¨CDjava.rmi.server.codebase
=http://somehost.someu/edu/stubs/
-Djava.security.polict=java.policy
----¿ª·¢¿Í»§¶ËÈí¼þµÄËã·¨²½Ö裺
1.Ϊ±¾Ó¦Óü´½«Éú³ÉµÄËùÓÐÎļþ´ò¿ªÒ»¸öĿ¼£»
2.»ñȡԶ³Ì·½·¨½Ó¿ÚÀàÎļþSomeInterface.classµÄÒ»¸ö¿½±´£»
3.¿ª·¢¿Í»§³ÌÐòSomeClient.java£¬±àÒë³ÌÐòÉú³É¿Í»§Àࣻ
4.Èç¹û²»Ï£ÍûstubÏÂÔØ£¬»ñÈ¡stubÀàÎļþµÄÒ»¸ö¿½±´£¬²¢½«Æä·ÅÔÚµ±Ç°Ä¿Â¼ÖУ»
5.ΪӦÓñà¼Ò»¸öJava°²È«²ßÂÔÎļþjava.policy£¬½«¸ÃÎļþ·ÅÔÚÏàÓ¦µÄĿ¼»òÖ±½Ó·ÅÔÚµ±Ç°Ä¿Â¼ÖУ»
6.¼¤»î¿Í»§£¬Ö¸¶¨°²È«²ßÂÔÎļþ£º
java ¨CDjava.security.policy=java.policy SomeClient
|