Java remote method invocation
کمپیوٹنگ میں، جاوا ریموٹ میتھڈ انوکیشن (جاوا آر ایم آئی) ایک جاوا اے پی آئی ہے جو ریموٹ میتھڈ انوکیشن انجام دیتا ہے، جو ریموٹ پروسیجر کالز (آر پی سی) کے آبجیکٹ پر مبنی مساوی ہے، جس میں سیریلائزڈ جاوا کلاسز کی براہ راست منتقلی اور تقسیم شدہ کچرا جمع کرنے کی حمایت ہوتی ہے۔ اصل نفاذ جاوا ورچوئل مشین (جے وی ایم) کلاس کی نمائندگی کے طریقہ کار پر منحصر ہے اور اس طرح یہ صرف ایک جے وی ایم سے دوسرے جے وی ایم پر کال کرنے کی حمایت کرتا ہے۔ اس جاوا کے صرف نفاذ کے بنیادی پروٹوکول کو جاوا ریموٹ میتھڈ پروٹوکول (جے آر ایم پی) کے نام سے جانا جاتا ہے۔ غیر جے وی ایم سیاق و سباق میں چلنے والے کوڈ کی حمایت کرنے کے لیے، پروگرامرز نے بعد میں کوربا ورژن تیار کیا۔ اصطلاح آر ایم آئی کا استعمال صرف پروگرامنگ انٹرفیس کی نشاندہی کر سکتا ہے یا اے پی آئی اور جے آر ایم پی، آئی آئی او پی، یا کسی اور عمل درآمد دونوں کی نشاندہی کر سکتا ہے، جبکہ اصطلاح آر ایم آئی-آئی آئی او پی (پڑھیں: آئی آئی او پی پر آر ایم آئی) خاص طور پر آر ایم آئی انٹرفیس کی نشاندہی کرتا ہے جو زیادہ تر فعالیت کو معاون کوربا کے نفاذ کے لیے تفویض کرتا ہے۔ جاوا آر ایم آئی کا بنیادی خیال، تقسیم شدہ کچرا اکٹھا کرنے (ڈی جی سی) پروٹوکول، اور سورج کے اصل نفاذ میں بنیادی فن تعمیر، ماڈیولا-3 کی "نیٹ ورک آبجیکٹ" خصوصیت سے آتا ہے۔ عام کوڈ اصل آر ایم آئی اے پی آئی کے پروگرامرز نے کوڈ کو کسی حد تک عام کیا تاکہ مختلف نفاذ کی حمایت کی جا سکے، جیسے کہ ایچ ٹی ٹی پی ٹرانسپورٹ۔ مزید برآں، آر ایم آئی انٹرفیس کے ساتھ مطابقت رکھنے کے لیے کوربا میں "قدر کے لحاظ سے" دلائل منتقل کرنے کی صلاحیت شامل کی گئی تھی۔ پھر بھی، آر ایم آئی-آئی آئی او پی اور جے آر ایم پی کے نفاذ میں مکمل طور پر ایک جیسے انٹرفیس نہیں ہیں۔ آر ایم آئی کی فعالیت پیکیج میں آتی ہے، جبکہ سن کا زیادہ تر نفاذ sun.rmi پیکیج میں واقع ہے۔ نوٹ کریں کہ جاوا 5 سے پہلے جاوا ورژن کے ساتھ ڈویلپرز کو آرمیک کا استعمال کرتے ہوئے ایک علیحدہ تالیف مرحلے میں آر ایم آئی اسٹب مرتب کرنا پڑتا تھا۔ جاوا اور اس سے آگے کے ورژن 5 کو اب اس مرحلے کی ضرورت نہیں ہے۔ جینی ورژن جاوا میں آر ایم آئی کا زیادہ جدید ورژن پیش کرتا ہے۔ یہ اسی طرح کام کرتا ہے لیکن تقسیم شدہ آبجیکٹ ایپلی کیشنز کے لیے زیادہ جدید حفاظتی، آبجیکٹ دریافت کی صلاحیتیں، اور دیگر میکانزم فراہم کرتا ہے۔ مثال مندرجہ ذیل کلاسیں آر ایم آئی کا استعمال کرتے ہوئے ایک سادہ کلائنٹ سرور پروگرام کو نافذ کرتی ہیں جو پیغام دکھاتا ہے۔ RmiServerIntf انٹرفیس اس انٹرفیس کی وضاحت کرتا ہے جو کلائنٹ کے ذریعہ استعمال ہوتا ہے اور سرور کے ذریعہ لاگو ہوتا ہے۔ درآمد کریں java.rmi.Remote ؛ درآمد کریں java.rmi.RemoteException ؛ عوامی انٹرفیس RmiServerIntf ریموٹ کو بڑھاتا ہے {سٹرنگ گیٹ میسج () ریموٹ ایکسپشن پھینکتا ہے ؛} RmiServer کلاس RMI درخواستوں کو سنتا ہے اور انٹرفیس کو لاگو کرتا ہے جو کلائنٹ کے ذریعہ ریموٹ طریقوں کو استعمال کرنے کے لیے استعمال ہوتا ہے۔ درآمد java.rmi.Naming ؛ درآمد java.rmi.RemoteException ؛ درآمد java.rmi.server.UnicastRemoteObject ؛ درآمد java.rmi.registry۔ * ؛ پبلک کلاس RmiServer ایکسٹینڈس یونیکاسٹ ریموٹ آبجیکٹ امپلیمنٹ RmiServerIntf [پبلک جامد فائنل سٹرنگ میسج = "ہیلو ورلڈ" ؛ پبلک RmiServer () ریموٹ ایکسپشن پھینکتا ہے [سپر (0) ؛// 'ریمک' مرحلے سے بچنے کے لیے درکار، نیچے دیکھیں] پبلک سٹرنگ حاصل کریں پیغام () {واپسی میسج ؛} پبلک جامد کالعدم مین (سٹرنگ ارگس []) استثناء پھینکتا ہے [System.out.println ("RMI سرور شروع ہوا") ؛ رجسٹری تخلیق کے لیے خصوصی استثناء ہینڈلر آزمائیں LocateRegistry.createRegistry (1099) ؛ System.out.println ("جاوا RMI ریگ") ") ؛} کیچ (ریموٹ ایکسپشن ای) {// کچھ نہ کریں، غلطی کا مطلب رجسٹری پہلے سے موجود ہے System.out.println (" جاوا آر ایم آئی رجسٹری پہلے سے موجود ہے۔ ") ؛}// Instantiate RmiServer RmiServer سرور = نیا RmiServer () ؛// اس آبجیکٹ کی مثال کو" RmiServer "Naming.rebind ("// مقامی میزبان/RmiServer "، سرور) ؛ System.out.println (" پیئر سرور رجسٹری میں پابند "؛}} RmiClient کلاس یہ کلائنٹ ہے جو سرور پر رہنے والے ریموٹ آبجیکٹ کا حوالہ (ایک پراکسی) حاصل کرتا ہے اور پیغام حاصل کرنے کے لیے اس کے طریقہ کار کو مدعو کرتا ہے۔ اگر سرور آبجیکٹ کو java.rmi.Remote کے بجائے java.io.Serializable لاگو کیا جاتا ہے، تو اسے سیریلائز کیا جائے گا اور کلائنٹ کو ویلیو کے طور پر منتقل کیا جائے گا۔ امپورٹ java.rmi.Naming ؛ پبلک کلاس RmiClient {پبلک جامد وایڈ مین (سٹرنگ args []) اس مثال کو چلانے سے پہلے، ہمیں اپنے استعمال کردہ انٹرفیس کے لیے ایک 'سٹب' فائل بنانے کی ضرورت ہے۔ اس کام کے لیے ہمارے پاس آر ایم آئی مرتب ہے-'آرمیک' نوٹ: ہم ریموٹ انٹرفیس کے نفاذ کے ساتھ '*. کلاس' فائل سے ایک اسٹب فائل بناتے ہیں، '*. جاوا' فائل سے نہیں۔ rmic RmiServer نوٹ کریں کہ چونکہ متحرک طور پر تیار کردہ اسٹب فائلوں کے لیے J2SE سپورٹ کا ورژن 5 شامل کیا گیا ہے، اور rmic صرف پہلے کے رن ٹائمز کے ساتھ بیک ورڈ مطابقت کے لیے فراہم کیا جاتا ہے، یا ان پروگراموں کے لیے جو ریموٹ آبجیکٹ برآمد کرتے وقت ایک واضح پورٹ نمبر (یا صفر) فراہم نہیں کرتے ہیں، جو جنریٹڈ اسٹب کے ممکن ہونے کے لیے ضروری ہے، جیسا کہ یونیکاسٹ ریموٹ آبجیکٹ کے لیے جاواڈوک میں بیان کیا گیا ہے۔ مندرجہ بالا کنسٹرکٹر میں تبصرہ دیکھیں۔ حوالہ جات بیرونی روابط جاوا آر ایم آئی ٹیوٹوریل-آر ایم آئی سیکھنے کے لیے ایک اچھا نقطہ آغاز ہے۔ آر ایم آئی میں ہیلو ورلڈ جاوا آر ایم آئی آن لائن ٹریننگ بھی چیک کریں-جاوا آر ایم آئی کی تربیت کے لیے بہت اچھا اور حوالہ کے طور پر جے ڈی کے ڈاکس میں آر ایم آئی پیج (آر ایم آئی پیکیج کے لیے سن کا جاوا اے پی آئی حوالہ) پروگرامنگ ویب لاجک آر ایم آئی-اوریکل ویب بلاگک میں آر ایم آئی کا تعارف۔ عام ریموٹ طریقہ آر ایم آئی ریموٹ طریقہ کار کال آرٹیکلز مثال کے طور پر جاوا کوڈ کے ساتھ