Java RMI Ö¸µÄÊÇÔ¶³Ì·½·¨µ÷Óà £¨Remote Method Invocation£©¡£ËüÊÇÒ»ÖÖ»úÖÆ£¬Äܹ»ÈÃÔÚij¸ö Java ÐéÄâ»úÉϵĶÔÏóµ÷ÓÃÁíÒ»¸ö Java ÐéÄâ»úÖеĶÔÏóÉϵķ½·¨¡£¿ÉÒÔÓô˷½·¨µ÷ÓõÄÈκζÔÏó±ØÐëʵÏÖ¸ÃÔ¶³Ì½Ó¿Ú¡£
Java RMI²»ÊÇʲôм¼Êõ£¨ÔÚJava1.1µÄʱ´ú¶¼ÓÐÁË£©£¬µ«È´ÊÇÊǷdz£ÖØÒªµÄµ×²ã¼¼Êõ¡£
´óÃû¶¦¶¦µÄEJB¶¼Êǽ¨Á¢ÔÚrmi»ù´¡Ö®Éϵģ¬ÏÖÔÚ»¹ÓÐһЩ¿ªÔ´µÄÔ¶³Ìµ÷ÓÃ×é¼þ£¬Æäµ×²ã¼¼ÊõÒ²ÊÇrmi.
ÔÚ´óÁ¦¹Ä´µWeb Service¡¢SOAµÄʱ´ú£¬ÊDz»ÊÇÿ¸öÓ¦Óö¼Ó¦¸ÃÑ¡Óñ¿×¾µÄWeb Service×é¼þÀ´ÊµÏÖ£¬Í¨¹ý¶Ô±È²âÊÔºó£¬RMIÊÇ×î¼òµ¥µÄ£¬ÔÚһЩСµÄÓ¦ÓÃÖÐÊÇ×îºÏÊʵġ£
ÏÂÃæÍ¨¹ýÒ»¸ö¼òµ¥µÄÀý×ÓÀ´ËµÃ÷RMIµÄÔÀíºÍÓ¦Óã¬ÏÂÃæÕâ¸öÀý×ÓÊÇÒ»¸ö¼òµ¥HelloWorld£¬µ«ÒѺ¸ÇRMIµÄºËÐÄÓ¦ÓÃÓ뿪·¢Ä£Ê½¡£
/** * Created by IntelliJ IDEA. * User: leizhimin * Date: 2008-8-7 21:50:02 * ¶¨ÒåÒ»¸öÔ¶³Ì½Ó¿Ú£¬±ØÐë¼Ì³ÐRemote½Ó¿Ú£¬ÆäÖÐÐèÒªÔ¶³Ìµ÷Óõķ½·¨±ØÐëÅ׳öRemoteExceptionÒì³£ */ public interface IHello extends Remote {
/** * ¼òµ¥µÄ·µ»Ø¡°Hello World£¡"×ÖÑù * @return ·µ»Ø¡°Hello World£¡"×ÖÑù * @throws java.rmi.RemoteException */ public String helloWorld() throws RemoteException;
/** * Ò»¸ö¼òµ¥µÄÒµÎñ·½·¨£¬¸ù¾Ý´«ÈëµÄÈËÃû·µ»ØÏàÓ¦µÄÎʺòÓï * @param someBodyName ÈËÃû * @return ·µ»ØÏàÓ¦µÄÎʺòÓï * @throws java.rmi.RemoteException */ public String sayHelloToSomeBody(String someBodyName) throws RemoteException; }
/** * Created by IntelliJ IDEA. * User: leizhimin * Date: 2008-8-7 21:56:47 * Ô¶³ÌµÄ½Ó¿ÚµÄʵÏÖ */ public class HelloImpl extends UnicastRemoteObject implements IHello { /** * ÒòΪUnicastRemoteObjectµÄ¹¹Ôì·½·¨Å׳öÁËRemoteExceptionÒì³££¬Òò´ËÕâÀïĬÈϵĹ¹Ôì·½·¨±ØÐëд£¬±ØÐëÉùÃ÷Å׳öRemoteExceptionÒì³£ * * @throws RemoteException */ public HelloImpl() throws RemoteException { }
/** * ¼òµ¥µÄ·µ»Ø¡°Hello World£¡"×ÖÑù * * @return ·µ»Ø¡°Hello World£¡"×ÖÑù * @throws java.rmi.RemoteException */ public String helloWorld() throws RemoteException { return "Hello World!"; }
/** * Ò»¸ö¼òµ¥µÄÒµÎñ·½·¨£¬¸ù¾Ý´«ÈëµÄÈËÃû·µ»ØÏàÓ¦µÄÎʺòÓï * * @param someBodyName ÈËÃû * @return ·µ»ØÏàÓ¦µÄÎʺòÓï * @throws java.rmi.RemoteException */ public String sayHelloToSomeBody(String someBodyName) throws RemoteException { return "ÄãºÃ£¬" + someBodyName + "!"; } }
/** * Created by IntelliJ IDEA. * User: leizhimin * Date: 2008-8-7 22:03:35 * ´´½¨RMI×¢²á±í£¬Æô¶¯RMI·þÎñ£¬²¢½«Ô¶³Ì¶ÔÏó×¢²áµ½RMI×¢²á±íÖС£ */ public class HelloServer { public static void main(String args[]) {
try { //´´½¨Ò»¸öÔ¶³Ì¶ÔÏó IHello rhello = new HelloImpl(); //±¾µØÖ÷»úÉϵÄÔ¶³Ì¶ÔÏó×¢²á±íRegistryµÄʵÀý£¬²¢Ö¸¶¨¶Ë¿ÚΪ8888£¬ÕâÒ»²½±Ø²»¿ÉÉÙ£¨JavaĬÈ϶˿ÚÊÇ1099£©£¬±Ø²»¿ÉȱµÄÒ»²½£¬È±ÉÙ×¢²á±í´´½¨£¬ÔòÎÞ·¨°ó¶¨¶ÔÏóµ½Ô¶³Ì×¢²á±íÉÏ LocateRegistry.createRegistry(8888);
//°ÑÔ¶³Ì¶ÔÏó×¢²áµ½RMI×¢²á·þÎñÆ÷ÉÏ£¬²¢ÃüÃûΪRHello //°ó¶¨µÄURL±ê×¼¸ñʽΪ£ºrmi://host:port/name(ÆäÖÐÐÒéÃû¿ÉÒÔÊ¡ÂÔ£¬ÏÂÃæÁ½ÖÖд·¨¶¼ÊÇÕýÈ·µÄ£© Naming.bind("rmi://localhost:8888/RHello",rhello); // Naming.bind("//localhost:8888/RHello",rhello);
System.out.println(">>>>>INFO:Ô¶³ÌIHello¶ÔÏó°ó¶¨³É¹¦£¡"); } catch (RemoteException e) { System.out.println("´´½¨Ô¶³Ì¶ÔÏó·¢ÉúÒì³££¡"); e.printStackTrace(); } catch (AlreadyBoundException e) { System.out.println("·¢ÉúÖØ¸´°ó¶¨¶ÔÏóÒì³££¡"); e.printStackTrace(); } catch (MalformedURLException e) { System.out.println("·¢ÉúURL»ûÐÎÒì³££¡"); e.printStackTrace(); } } }
/** * Created by IntelliJ IDEA. * User: leizhimin * Date: 2008-8-7 22:21:07 * ¿Í»§¶Ë²âÊÔ£¬ÔÚ¿Í»§¶Ëµ÷ÓÃÔ¶³Ì¶ÔÏóÉϵÄÔ¶³Ì·½·¨£¬²¢·µ»Ø½á¹û¡£ */ public class HelloClient { public static void main(String args[]){ try { //ÔÚRMI·þÎñ×¢²á±íÖвéÕÒÃû³ÆÎªRHelloµÄ¶ÔÏ󣬲¢µ÷ÓÃÆäÉϵķ½·¨ IHello rhello =(IHello) Naming.lookup("rmi://localhost:8888/RHello"); System.out.println(rhello.helloWorld()); System.out.println(rhello.sayHelloToSomeBody("ÈÛÑÒ")); } catch (NotBoundException e) { e.printStackTrace(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (RemoteException e) { e.printStackTrace(); } } }
ÔËÐÐRMI·þÎñ¶Ë³ÌÐò£º
ÔËÐÐRMI¿Í»§¶Ë³ÌÐò£º
×ܽ᣺´ÓÉÏÃæµÄ¹ý³ÌÀ´¿´£¬RMI¶Ô·þÎñÆ÷µÄIPµØÖ·ºÍ¶Ë¿ÚÒÀÀµºÜ½ôÃÜ£¬µ«ÊÇÔÚ¿ª·¢µÄʱºò²»ÖªµÀ½«À´µÄ·þÎñÆ÷IPºÍ¶Ë¿ÚÈçºÎ£¬µ«Êǿͻ§¶Ë³ÌÐòÒÀÀµÕâ¸öIPºÍ¶Ë¿Ú¡£
ÕâÒ²ÊÇRMIµÄ¾ÖÏÞÐÔÖ®Ò»¡£Õâ¸öÎÊÌâÓÐÁ½ÖÖ½â¾ö;¾¶£ºÒ»ÊÇͨ¹ýDNSÀ´½â¾ö£¬¶þÊÇͨ¹ý·â×°½«IP±©Â¶µ½³ÌÐò´úÂëÖ®Íâ¡£
RMIµÄ¾ÖÏÞÐÔÖ®¶þÊÇRMIÊÇJavaÓïÑÔµÄÔ¶³Ìµ÷Óã¬Á½¶ËµÄ³ÌÐòÓïÑÔ±ØÐëÊÇJavaʵÏÖ£¬¶ÔÓÚ²»Í¬ÓïÑÔ¼äµÄͨѶ¿ÉÒÔ¿¼ÂÇÓÃWeb Service»òÕß¹«ÓöÔÏóÇëÇó´úÀíÌåϵ£¨CORBA£©À´ÊµÏÖ¡£
|