RMI چيست؟
RMI مخفف عبارت Romote Methode invocation به معني «فراخواني متد از راه دور »است.
همان طور كه از نام اين اصطلاح مشخص مي شود،RMI مكانيسمي در اختيار برنامه نويسان جاوا قرار مي دهد كه مي توانند از طريق آن متد اشياي گوناگون را بر روي يك ماشين مجازي (JVM ) راه دور اجرا كنند. مكانيسم هاي فراخواني راه دور متفاوتي در دنياي نرم افزار ايجاد شده اند،اما RMI برخلاف بسياري از آنها محدود به انواع داده اي اوليه يا ساختار هايي متشكل از داده هاي ساده نيست و به كمك آن مي توان اشياي نرم افزاري را به تمامي همانند يك پارامتر عبور داد يا باز گرداند.
اين ويژگي از RMI يك مكانيسم منحصر به فرد مي سازد. چنين خاصيتي به اين معني است كه يك برنامه نويس جاوا مي تواند به كمك RMI ، كدهاي جديدي را در شبكه انتقال دهد و در ماشين هاي مجازي راه دور به صورت ديناميك آن ها را اجرا نمايد. بدين ترتيب برنامه نويسان جاوا در زمان برنامه نويسي سيستم هاي گسترده،آزادي عمل زيادي به دست خواهند آورد.در يك محيط گسترده، كلاينت هاي RMI مي توانند به نسخه هاي جديد سرويس هاي جاوا دسترسي داشته باشند و نيازي به توزيع كردن برنامه به كلاينت ها نخواهد بود. اين ويژگي همانطور كه در محيط هاي شبكه محلي اجرا مي شود،در محيط وب نيز قابل اجرا است.
در مكانسم RMI ،از ويژگي رجيستري هم پشيتباني مي شود. كلانيت هاي RMI با مراجعه به رجستري هم پشتيباني مي شود. كلاينت هايي كه از سرويس مشخصي استفاده مي كنند،مي توانند با مراجعه به رجيستري RMI ،به آخرين نسخه سرويس دسترسي يابند. در صورت نياز به كلاس جديد،مي توان آن را از طريق وب سرور بارگذاري كرد.
RMI داراي ويژگي هاي ديگري علاوه بر آنچه در بالا به آن اشاره شد،نيز هست . پردازش راه دور و تقسيم بار پردازنده ها نمونه هايي از قابليت هاي ساده RMI تلقي مي شوند. RMI به جهت قابليت انعطاف و سازگاري زياد،از طرف برنامه نويسان به سرعت به عنوان يك ابزار مهم براي توسعه سيستم هاي گسترده،پذيرفته شد. اما زماني كه برنامه هايي به زبان هاي مانند c\c++ يا زبان هاي ديگري(غير جاوا)بخواهند با RMI ارتباط بيابند،مشكلاتي ايجاد خواهد شد.
در واقع RMI تكنولوژي ويژه جاوا با نرم افزارهايي كه به زبان هايي غير جاوا توسعه يافته اند استفاده كرد. به همين دليل ،استفاده از RMI به همان سرعتي رواج يافت،رو به كاهش گذاشت.در واقع چنين استدلال مي شد كه در دنياي امروز روز به روز بر مواردي كه نياز به ارتباط دادن نرم افزارهايي كه با تكنولوژي هايي متفاوت توسعه يافته اند،بيشتر مي شود كه در صورت استفاده از RMI ،امكان توسعه آتي نرم افزار محدود خواهد بود.

CORBA چيست؟
اين اصطلاح سرنام واژه هاي عبارت Common object Reguest Broker Architecture است.
CORBA تكنولوژي ديگر يا رقيبي است كه برا ي تامين همان اهداف RMI توسعه داده شده است.تكنولوژي CORBA هر چند كه مانند RMI وابسته به يك سكوي نرم افزار معين نيست،اما بر خلاف RMI محدود به يك زبان برنامه نويسي مشخص نيست و به كمك آن مي توان سيستم هاي نرم افزاري گوناگون را در محيط هاي گسترده به يكديگر ارتباط داد.
اما از نگاه برنامه نويسان جاوا(يا كساني كه فقط به فكر پروژه هايي هستند كه در آن ها تنها از زبان جاوا استفاده خواهد شد)،تكنولوژي CORBA قابليت انعطاف كمتري از خود به نمايش مي گذارد و دشواريهايي را به برنامه نويس تحميل مي كند. علت اين ماجرا هم در آن نهفته است كه در CORBA امكان پاس كردن كد اجرايي همانند آنچه در RMI امكان پذير بود ،فراهم نيست.
سرويس هاي CORBA از طريق يك رابط يا interface كه به زبان IDL يا interface Definition Language نوشته شده است،توصيف مي شوند. نگاشت هاي IDL براي بسياري از زبان هاي برنامه نويسي تهيه شده اند و در آينده نيز در هر لحظه مي توان نگاشت هايي براي زبان برنامه نويسي ديگري كه قصد پشتيباني از اين تكنولوژي را دارند،فراهم كرد.CORBA به اشياي نرم افزاري اين امكان را مي دهد كه درخواست هايي به مقصد اشياي نرم افزاري راه دور ارسال كنند و بدين ترتيب متدهاي شي نرم افزاري راه دور را فراخواني نمايند.به همين ترتيب هم مي توان به كمك CORBA ،بين سيستم راه دو ربه تبادل داده اقدام كرد.اما اين قابليت در CORBA فقط به رد و بدل كردن انواع داده اي ساده يا حداكثر ساختارهاي داده اي تشكيل شده از انواع داده اي ساده،محدود است. در ساختار ارتباطي بين كلاينت هاي CORBA و سرويس هاي CORBA ،درخواست هاي فراخواني متدها به اشيايي به نام ORB ،رد مي شوند(پاس داده مي شودند).اشياي به نام ORB هم از طريق پروتكل ارتباطي internet inter ORB يا llop با يكديگر ارتباط مي يابند. از طرف ديگر،تراكنش هاي llop قابليت جاري شدن بر بستر پروتكل TCP يا پروتكل هاي ديگري نظير HTTP در مواقعي كه يكي از طرفين ارتباط پشت يك ديواره آتش واقع شده اند،را دارند.

CORBA يا RMI
همان طور كه بيان شد،هر كدام از اين دو تكنولوژي ها داراي ويژگي ها و مزاياي خاص خود هستند و نمي توان هيچ يك را به طور مطلق جايگزين ديگري كرد.خواص هر يك از دو تكنولوژي موجب شده است كه هر يك از آنها در حوزه فعاليت مشخصي به كار روند. خلاصه آن كه اگر از مقايسه اين دو تكنولوژي در اينجا نام برده مي شود،علت آن است كه از اين طريق بهتر
مي توان قابليت ها و نقاط قوت يا ضعف آن ها را شناسايي كرد.
تكنولوژي RMI قابليت ها و برتري هاي قابل توجهي نسبت به CORBA دارد كه در اين نوشته از مهم ترين آن ها ياد كرديم . اين تكنولوژي از زمان معرفي JDK1.20 به اين طرف در دسترس همگان قرار داده شده است.به همين دليل هم بسياري از برنامه نويسان جاوا با اين تكنولوژي آشنايي دارند و از تجربه استفاده از آن برخوردارند و باز به همين دليل نيز در بسياري از شركت ها و سازمان ها از همان زمان ها سيستم هايي به كار گرفته شده اند كه بر اساس RMI عمل مي كنند .اين موارد باعث شده اند كه با وجود آنكه تكنولوژي CORBA در بسياري از موارد كارها را براي برنامه نويسان سهل كرده است اما هنوز بسياري از برنامه نويسان به كار با RMI ادامه مي دهند و صنعت نرم افزار نيز به چنين برنامه نويساني نياز دارد.
از طرف ديگر تكنولوژي CORBA به دليل سهولت كاربرد و قابليت انعطاف پذيري و از همه مهم تر پرتابل بودن آن (امكان استفاده در زبان هاي گوناگون)طرفداران زيادي در بين برنامه نويسان يافته است.اما صرف نظر از اين موضوع استفاده از اين تكنولوژي در سازمان هايي كه سيستم هاي نرم افزاري گسترده اي دارند و امكان جايگزيني تمامي بخش هاي آن ها با اجزاي نرم افزاري جديد ميسر نيست،امري غير قابل اجتناب يا غير قابل جايگزين تلقي مي شود.تكنولوژي CORBA به راحتي مي تواند بين بخش هاي نرم افزاري متفاوت و سكوي هاي گوناگون ارتباط برقرار كرده و همانند پل ارتباطي به كار گرفته شود. در واقع تنها محدوديت CORBA در اين زمينه آن است كه براي آن كه بتوان از اين تكنولوژي در زبان هاي برنامه نويسي متفاوت استفاده كرد،بايد قبلا”پشتيباني از CORBA در آن زبان فراهم شده باشد.
نكته مهم ديگر ،وضعيت سرعت و كارايي اين دو تكنولوژي در مقايسه با يكديگر است. مشخص شده است كه CORBA از نظر سرعت اجرا تا حدودي بر RMI برتري دارد و به همين دليل جذابيت بيشتري در بين برنامه نويساني كه در حوزه برنامه نويسي real-time كار مي كنند،يافته است.