• 0
daziplqa

شرح مختصر لل rmi

سؤال

الشرح بالرد ، لم أستطع إدراجه هنا فأدرجته ف أول رد

how_rmi_works.zip

تم تعديل بواسطه مبتدئ جافا
2

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

1 إجابات على هذا السؤال .

  • 0

السلام عليكم،

هذا شرح بسيط لل RMI أرجو الاستفاده

المصدر : Head first Design patterns ( بتصريف )

تم كتابة الأمثله باستخدام : gvim ( http://gvim.org )

تم كتاية المفاله باستخدام : OpenOffice.Org

المقاله مع الكود ستجدونه ف المرفقات

بسم الله، نبدأ؛

إعلم – رحمك الله - أن موضوع ال rmi من أسهل المواضيع في الجافا، رغم أنه يبدو ملعبك بعض الشئ، المهم

تمهـــــــــــــــــــــــــــــــيد :

طبعا ال rmi هو علاقه بين إتنين objects ، و عاوز تستدعي داله ( method ) من واحد من خلال التاني ( عادي خالص ) مثال :

عندي ال class ده :

public class Hello {

public String sayHala(String name){

return " Hala brother " + name;

}

}

وكمان ال class ده :

public class TheClient {

public static void main (String[] args ){

Hello h = new Hello();

String s = h.sayHala ("mohammed");

System.out.println (s);

}

}

كما هو واضح، الكائن ( object ) الثاني يرسل رساله ( يستدعي داله) من الكائن الأول.

هو ده ياعم ال RMI بس في حاجه صغيره جدا الزياده، إن كل واحد منهم علي جهاز، بس كده .

طبعا كما نعلم أنه لكي نستطيع تنفيذ الكود السابق مع الأخذ ف الاعتبار أن كلا من الكائنيين علي جهاز وجب علينا كتابة كود networking و وجع راس و sockets ، كل ده مبتشفهوش مع ال RMI ، شوفت ال RMI حلو إزاي.

فكره عامه :

٥ خطوات، هما ٥ خطوات و كله يبقي ف السليم، ٥ خطوات لعمل تطبيق ب RMI:

١- عمل remote interface :

و هو interface عادي خالص هتحط فيه الدوال ( methods ) اللي إنت عاوز تنفذها ع ال client

٢- عمل implementation لل interface ده :

ده برضه implementation عادي خالص لل interface ؛ إنت عملك implementation لinterface قبل كده !

٣- تنفيذ أمر صغير rmic عشان ننتج stub و skeleton :

و ال stub ده زي متقول كده ( علي منا فاكر) نسخه من ال remote service ( اللي نتج من الخطوه التانيه ) بس موجوده ع الclient

٤- تشغيل الريجيستري ( ده موش الريجستري بتاع ميكروسف ، دا حاجه تانيه platform independent ، هههه ).

٥- تشغيل ال remote servie ( البرنامج الل نتج من الخطوه تنيين – علي رأي إخوانا الصعايده ).

لنبدأ نأخذ كل خطوه بشئ من التفصيل مع شرح مثال ؛؛؛؛؛؛؛؛؛؛؛؛؛؛

****الخطوه الأولي :

****************

عمل remote interface

ال interface ده طبعا هيكون فيه الداله بتاعة ال sayHala ، طبعا من غير متحط فيها كود، عشان ده interface

import java.rmi.*;


public interface MyRemote extends Remote {

public String SayHala (String name ) throws RemoteException;

}

لازم تتأكد في الخطوه دي من تلات حاجات :

١- إن الinterface ده بيرث ( extend ) ال interface المسمي java.rmi.Remote

لحسن الحظ إن الانترفيس Remote مفهوش أي داله

٢- كل ال parameters و ال return typs للدوال إما أن تكون premitive أو Serializable ( طبعا ال permitive هما int ,float, double ,.... ) و ال Serializabl هو أي فئه بت implement ال interface المدعاه java.io.Serializale طبعا ال String بطبعته Serializable فموش هنعمله حاجه لكن لو كائن إنت عامله لازم تخليه serializable

٣- كل الدوال لازم ترمي ال exception المسمي java.rmi.RemoteException

****الخطوه الثانيه :

****************

عمل implementation لل remote interface

ده ال implementation و سميت الفئه RemoteHello

import java.rmi.*;

import java.rmi.server.*;


public class RemoteHello extends UnicastRemoteObject implements MyRemote {


public RemoteHello(){} throws RemoteException;


public String sayHala(String name ){

return " Hala brother " + name;

}


public static void main (String [] args ){

try{

MyRemote servie = new RemoteHello();

Naming.rebind ( "remoteHello", servie );

}catch (Exception e ){

// ....

}

}

}

*

طبعا الفئه دي بت implement ال interface اللي عملناه في الخطوه الأولي MyRemote

*

برضه لازم يرث الفئه اللي اسمها java.rmi.server.UnicastRemoteObject

*

و بما إن ال constructor بتاع ال super class اللي اسمه UnicastRemoteObject بيرمي RemoteException فلازم الفئه بتاعتنا ترمي نفس ال exception و ده باين ف السطر ده :

public RemoteHello(){} throws RemoteException ;

*

طبعا كتبنا الكود بتاع الداله sayHala

*

فاضل بقي ال main !!

تعالو نفهمها واحده واحده:

أول سطر بنستنسخ الفئه و بينتج كائن اسمه service، أما السطر التاني فبيسجل نسخه من الكائن ده في الريجستري ( هنعرف بعدين) و بيديله اسم : remoteHello عشان بالاسم ده هندور عليه ف الريجستر ي ( اللي هنشغله ف الخطوه٤ )

فكر ف الريجستري على إنه array أو list أو حتي hashtable حطينا فيه الكائن بتاعنا عشان لما نحتاجه نلاقيه تحت رجلينا.

ملــــــــــحــــــــــوظه : إحنا كده لسه علي أول جهاز، الجهاز اللي عليه الكائن الأول ( لو تتذكر في المثال الأولاني خالص الكائن كان اسمه Hello و غيرناه ل RemoteHello )

****الخطوه التالته :

***************

طبعا قم بترجمة ( compile ) للملفين السابقين بالأمر

javac MyRemote.java

javac RemoteHello.java

طبعا هينزلك ملفين اسمهم MyRemote.class و RemoteHello.class

ملحوظه : لو مبتعرفش تعمل الخطوتين السابقتين، روووح نام أحسن

المهم بعد كده ( في نفس المجلد الل انت قيه ) إكتب :

 rmic RemoteHello

بس كده ياسطي، هتلاقي ملفين جداد نزلولك، واحد اسمه RemoteHello_Stub.class و التاني اسمه RemoteHello_Skel.class

روح لصاحبك اللي عنده ال client ( اللي هوه عنده الفئه اللي اسمها TheClient بتاعت أول المقاله )

و اديله الملف اللي اسمه RemoteHello_Stub.class و خليه يحطه جنب ال TheClient .

****الخطوه الرابعه :

***************

تشغيل الريجيستري

روح لجهازك تاني ، و في نفس المجلد اللي فيه الشغل بتاعك ، إكتب :

rmiregistry

****الخطوه الخامسه :

*****************

روح شغل بقه السرفر ( ال remote service ) عن طريق تشغيل البرنامج HelloRemote كالتالي :

java HelloRemote

طبعا ده بيحصل و انت واقف ف المجلد اللي بيحتوي على الملفات بتاعتك ( MyRemote.java و MyRemote.class و HelloRemote.java إلخ ).

**** الخطوه السادسه ( أه هما ٦ موش خمسه ، هههه )

*******************************************

زي ما عدلنا في ال Hello خليناه RemoteHello لازم نعدل ف ال TheClient اللي موجود عند صاحبك،

إتصل بصاحبك و قولو أنا جايك دلوقتي، خبط ع الباب و لما يفتحلك سلم عليه و روح إفتح جهازه و روح عدل على الفئه TheClient ، خلي بالك الملف اللي اسمه TheClient.java معاه ملف تاني اسمه RemoteHello_Stub.class ف نفس المجلد .

ال TheClient.java لازم يكون كده :

import java.rmi.*;


public class TheClient {

public static void main (String[] args ){

try{

MyRemote h = (MyRemote) Naming.lookup ("rmi://compu10/remoteHello");

String s = h.sayHala ("mohammed");

System.out.println (s);

}catch (Exception e){

// ...

}

}

}

ايه اللي احنا بنعمله ؟؟

أول سطر بعد try :

بقوله روح دور ف الجهاز اللي ع الشبكه ( طبعا إنت و صاحبك وخدين وصلات من موزع نت واحد عشان تكونوا في شبكه واحده ) اللي اسمه compu10 ( ده إسم جهازي) علي remote service اسمها remoteHello ( دي اللي سميناها كده في الخطوه ٢ )

و خلقلي كائن منها و حطه ( ضعه) في المتغير h

بس وباقي الكود معروف................................

بس با عم أدي كل ال RMI .

دلوقتي لما صاحبك يروح يشغل الفئه TheClient هو كده بيستدعي الداله sayHala للفئه الموجوده عندك ع الجهاز بتاعك اللي اسمها RemoteHello

ملحوظه : بإمكانك تطبيق هذا كله علي جهاز واحد. ( ده مفهوم طبعا موش هقولك بقي )

الحمد لله الذي بنعمته تتم الصالحات

وصلى الله على سيدنا محمد و على آله و صحبه الكرام.

6

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
زوار
This topic is now closed to further replies.

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .