مثال RMI د. ف ا د ي ت ر ك ا و ي
Example أخز األ خاه عي.. Programming RMI بذأ باى خاه اىش ش Hello World. ش ذ أ نتب مائ ع و ف اىس شفش حت عي داى تشرع Hello ق اىع و باستذعاء ز اىذاى ع بعذ..
نبدأ بالبرمجه في جهه الخادم: Step1 in the Server س ف حتاد أ ال اى Interface حت عي ر ع اىذ اه اىت ش ذ اىع و استذعائ ا ا فقظ س ف تن ىذ ا داى احذ طباع.. زا اى Interface زب أ ق بع و ساح اىنالس Remote حت ق مالس أخش ) خو اىنائ اىبع ذ( بع و تطب ق ى زا األ تشف س.. اضاف اى أ اىذ اه اىت س نتب ا ف زا اى Interface زب أ تق بع و RemoteException Exception ع اه Throwsى ع أل قذ تحذث شامو اح اء استذعاء اىذاى خال قطع األتصاه ع اىخاد أ ا اس باىشبن أ أ شني أخش.. ىزىل ر ع اىذ اه س ف تتعا و ع زا اى. Exception ر ع اىنالسات اىخاص ببش ز RMI ر د ف اىبامذ.. java.rmi ى ش األ يف Interface ى طيق عي : Hello
Step 1 in the Server // Hello Remote Object Interface import java.rmi.remote ; import java.rmi.remoteexception ; public interface Hello extends Remote { public String gethellomessage() throws RemoteException ; }
Step 2 in the Server أ ت ت اىخط األ ى األ ق بنتاب مالس طبق زا اى Interface باالضاف اى اى ساح UnicastRemoteObject اىنالس اىخاص بأ س اى Marshalling اسساه استقباه اىب ا ات.. ر د ف اىبامذ java.rmi.server
Step 2 in the Server // Hello Implementation import java.rmi.remoteexception ; import java.rmi.server.unicastremoteobject ; public class HelloImpl extends UnicastRemoteObject implements Hello { public HelloImpl () throws RemoteException { } } public String gethellomessage() throws RemoteException { return "Hello Distributed Computing" ; }
Step 3 in the Server اىخط اىخاىخ متاب اىس شفش Server ا س ف ق بع و مائ HelloImpl ذخو زا اىنائ ف اى registry عط أ اس ا باىطبع اىنال ت زب أ ن ىذ زا األس ىن حصو عي اى referenceف ا بعذ..
Step 3 in the Server Naming.rebind(objectName,myObject); اىت تق باضاف سزو ف يف registry حت عي اس اىنائ ع ا. Referenceطبعا ز اىخذ Registry س ف ق بتشغ ي ا قبو أ ع و اىس شفش حت تت اضاف زا اىسزو ف.. ن ل ع طش ق ز اىخذ أ تسزو مائ باس ا ق اىنال ت ف ا بعذ باألتصاه ب ز اىخذ باألس اى ع ى حصو عي اىنائ.. طبعا األضاف ف يف Registry فقظ ر اىس شفش.اىنال ت طيب اى Registryتت مائ ع طش ق األس.. يف Server الحظ أ بعذ ع و rebind س ف ق بطباع ر ي تذه أ اىس شفش ع و األ ف حاه اتصاه
Step 4 in the Server // RMI Server import java.rmi.remoteexception ; import java.rmi.naming ; import java.net.malformedurlexception ; public class Server { final static String HOST = "localhost" ; } } public static void main (String args[]) { try { HelloImpl myobject = new HelloImpl(); String objectname = "rmi://" + HOST + "/MyHello" ; Naming.rebind(objectName,myObject); System.out.println("Binding Complete..."); } catch (RemoteException e) { e.printstacktrace(); } catch (MalformedURLException e) { e.printstacktrace(); }
Step 1 in Client مو ا عي ا ف ر اىنال ت اىحص ه عي reference ىينائ ح استذعاء تيل اىذاى فقظ.. ت اىحص ه عي اىنائ خاله اىذاى Naming ف اىنالس.. lookupاى ر د Hello myobject = (Hello) Naming.lookup(objectName);
Step 1 in Client // RMI Client import java.rmi.naming ; import java.rmi.remoteexception ; import java.rmi.notboundexception ; import java.net.malformedurlexception ; public class Client { public final static String HOST = "localhost" ; public static void main (String args[]) { try { String objectname = "rmi://" + HOST + "/MyHello" ; Hello myobject = (Hello) Naming.lookup(objectName); System.out.println(myObject.getHelloMessage()); } catch (RemoteException e) { e.printstacktrace(); } catch (NotBoundException e) { e.printstacktrace(); } catch (MalformedURLException e) { e.printstacktrace(); } } }
Step 1 شرح البرنامج السابق مو ا عي ا ف ر اىنال ت اىحص ه عي reference ىينائ ح استذعاء تيل اىذاى فقظ.. ت اىحص ه عي اىنائ خاله اىذاى Naming ف اىنالس.. lookupاى ر د Hello myobject = (Hello) Naming.lookup(objectName); األ بعذ اىحص ه عي reference ىينائ س ف ن ع Object اى ع.. Hello ح ستذع اىذاى بشنو عاد ىزىل ق بع و cast اى
التنفيذ ف اىبذا ىيتبس ظ قبو أ ش ض ع RMI Deployment مو اى يفات ف زيذ احذ ش ذ أ ختبش اىبش ا ذ ف Local Machine. األ ق أ ال بتشر ر ع اى يفات: javac *.java األ ستخشد ىل 4 يفاتclass. ق بتشر يف HelloImpl.class rmic HelloImpl ) غ ش متاب األ تذاد.. ) ضع باستخذا اى تشر اىخاص ب: rmi
التنفيذ اى اتذ ا س ف ن يف Stub باس. HelloImpl_Stub.class زا اى يف زب أ ت ارذ ع ذ اىنال ت حت ع و اىبش ا ذ بشنو صح ح اى يف ( Hello.classأل ا ف اىنال ت س ف ق بع و Cast ى زا اى ع(.. ىزىل عي ل أ تسخ ز اى يفات اى اىنال ت ف حاه ما زيذ اىنال ت ف نا أخش أ ف ر اص حا.. حاى ا ا س اىنال است ش عي أساس أ ر ع ف فس اى ساس بعذ قي و ت ا ه زا اى ض ع بشنو أ سع. األ )ف ر اىس شفش ىن ا حاى ا ع و ر ع ف ر اص احذ ) ق بتشغ و يف.. rmiregistry رىل خاله سطش األ ا ش أمتب: rmiregistry ى ن اك ؤشش أ ر ي طباع تذه عي أ ع و.. فقظ ستزذ أ title Bar ىسطش األ ا ش أصبح حت عي rmiregistry دى و عي ع و ز اىخذ.. : األ شغو اىخاد ف افز ا ا ش رذ ذ java server
التنفيذ ستزذ أ اىز ي.. Binding Complete ت طباعت ا عي اىشاش.. نزا ن اىس شفش ع و اىخذ registry تع و ا ضا.. ى تستط ع ا قاف ا اال باىضفظ عي. CTRL+C : أخ شا شغو يف اىنال ت java Client ستزذ ر ي Hello Distributed Computing ا ا ل ف اىشاش )ح ج ت استذعاء اىذاى gethellomessage ف اىس شفش اى اتذ ز اىذاى زا اه Stringاىز ت طباعت ف اىنال ت.. ) تأمذ ف ارا حصو ت استذعاء اىذاى gethellomessage اى ر د ف اىس شفش ا تفزت اك اىق اىشارع سرعت ىيع و اىز قا بطباعت ا عي اىشاش.. ز RMI ب ت اىبساط.