Java remote method invocation
কম্পিউটিংয়ে, জাভা রিমোট মেথড ইনভোকেশন (জাভা আরএমআই) একটি জাভা এপিআই যা সিরিয়ালাইজড জাভা ক্লাস এবং বিতরণকৃত আবর্জনা-সংগ্রহের সরাসরি স্থানান্তরের সমর্থনের সাথে রিমোট পদ্ধতি আহ্বান, রিমোট প্রসিডিউর কলগুলির (আরপিসি) অবজেক্ট-ওরিয়েন্টেড সমতুল্য সম্পাদন করে। মূল বাস্তবায়ন জাভা ভার্চ্যুয়াল মেশিন (জেভিএম) শ্রেণী-উপস্থাপনা পদ্ধতির উপর নির্ভর করে এবং এইভাবে এটি শুধুমাত্র একটি জেভিএম থেকে অন্যটিতে কল করা সমর্থন করে। এই জাভা-শুধুমাত্র বাস্তবায়নের অন্তর্নিহিত প্রোটোকলটি জাভা রিমোট মেথড প্রোটোকল (জেআরএমপি) নামে পরিচিত। অ-জেভিএম প্রসঙ্গে চলমান কোডকে সমর্থন করার জন্য, প্রোগ্রামাররা পরে একটি কর্বা সংস্করণ তৈরি করেছিলেন। আরএমআই শব্দটির ব্যবহার শুধুমাত্র প্রোগ্রামিং ইন্টারফেসকে বোঝাতে পারে বা এপিআই এবং জেআরএমপি, আইআইওপি, বা অন্য কোনও বাস্তবায়ন উভয়কেই বোঝাতে পারে, যেখানে আরএমআই-আইআইওপি শব্দটি (আরএমআই ওভার আইআইওপি) বিশেষভাবে আরএমআই ইন্টারফেসকে বোঝায় যা বেশিরভাগ কার্যকারিতা সমর্থনকারী কর্বা বাস্তবায়নে অর্পণ করে। জাভা আরএমআই-এর মৌলিক ধারণা, বিতরণকৃত আবর্জনা সংগ্রহ (ডিজিসি) প্রোটোকল এবং মূল সূর্য বাস্তবায়নের অন্তর্নিহিত বেশিরভাগ স্থাপত্য মডুলা-3-এর "নেটওয়ার্ক অবজেক্টস" বৈশিষ্ট্য থেকে এসেছে। সাধারণীকৃত কোড মূল আরএমআই এপিআই-এর প্রোগ্রামাররা এইচটিটিপি পরিবহনের মতো বিভিন্ন প্রয়োগকে সমর্থন করার জন্য কোডটিকে কিছুটা সাধারণীকরণ করেছিলেন। উপরন্তু, আরএমআই ইন্টারফেসের সাথে সামঞ্জস্যপূর্ণ হওয়ার জন্য কর্বায় "মান দ্বারা" আর্গুমেন্ট পাস করার ক্ষমতা যুক্ত করা হয়েছিল। তবুও, আরএমআই-আইআইওপি এবং জেআরএমপি বাস্তবায়নের সম্পূর্ণ অভিন্ন ইন্টারফেস নেই। আরএমআই কার্যকারিতা প্যাকেজে আসে, যেখানে সানের বেশিরভাগ বাস্তবায়ন sun.rmi প্যাকেজে অবস্থিত। লক্ষ্য করুন যে জাভা 5-এর আগে জাভা সংস্করণগুলির সাথে ডেভেলপারদের আরমিক ব্যবহার করে একটি পৃথক সংকলন ধাপে আরএমআই স্টাবগুলি সংকলন করতে হত। জাভা এবং তার পরের সংস্করণ 5 এর জন্য আর এই পদক্ষেপের প্রয়োজন নেই। জিনি সংস্করণ জাভাতে আরএমআই-এর আরও উন্নত সংস্করণ প্রদান করে। এটি একইভাবে কাজ করে তবে বিতরণকৃত বস্তুর প্রয়োগের জন্য আরও উন্নত নিরাপত্তা, বস্তু আবিষ্কার ক্ষমতা এবং অন্যান্য প্রক্রিয়া সরবরাহ করে। উদাহরণ নিম্নলিখিত শ্রেণীগুলি আরএমআই ব্যবহার করে একটি সহজ ক্লায়েন্ট-সার্ভার প্রোগ্রাম প্রয়োগ করে যা একটি বার্তা প্রদর্শন করে। আর. এম. আই. সার্ভারইন্টফ ইন্টারফেস ক্লায়েন্ট দ্বারা ব্যবহৃত এবং সার্ভার দ্বারা বাস্তবায়িত ইন্টারফেসকে সংজ্ঞায়িত করে। ইম্পোর্ট java.rmi.Remote; ইম্পোর্ট java.rmi.RemoteException; পাবলিক ইন্টারফেস RmiServerIntf প্রসারিত করে রিমোট {স্ট্রিং গেটমেসেজ () থ্রো রিমোটএক্সসেপশন;} RmiServer ক্লাস আরএমআই অনুরোধগুলি শোনে এবং ইন্টারফেস প্রয়োগ করে যা ক্লায়েন্ট দ্বারা দূরবর্তী পদ্ধতিগুলি আহ্বান করতে ব্যবহৃত হয়। আমদানি java.rmi.Naming; আমদানি java.rmi.RemoteException; আমদানি java.rmi.server.UnicastRemoteObject; আমদানি java.rmi.registry। *; পাবলিক ক্লাস RmiServer প্রসারিত UnicastRemoteObject RmiServerItf প্রয়োগ করে [পাবলিক স্ট্যাটিক ফাইনাল স্ট্রিং MESSAGE = "হ্যালো ওয়ার্ল্ড"; পাবলিক RmiServer () রিমোটএক্সসেপশন নিক্ষেপ করে [সুপার (0);// 'আরমিক' পদক্ষেপ এড়ানোর জন্য প্রয়োজনীয়, নীচে দেখুন] পাবলিক স্ট্রিং গেটমেসেজ () {রিটার্ন MESSAGE;} পাবলিক স্ট্যাটিক অকার্যকর প্রধান (স্ট্রিং আরজিএস []) ব্যতিক্রম ফেলে [System.out.println ("আরএমআই সার্ভার শুরু হয়েছে"); রেজিস্ট্রি তৈরির জন্য চেষ্টা করুন [// বিশেষ ব্যতিক্রম হ্যান্ডলার LocateRegistry.createRegistry (1099); System.out.println ("জাভা আরএমআই রেগুলেশন") ");} ক্যাচ (রিমোটএক্সসেপশন ই) {// কিছুই করবেন না, ত্রুটির অর্থ রেজিস্ট্রি ইতিমধ্যে বিদ্যমান 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 {পাবলিক স্ট্যাটিক অকার্যকর প্রধান (স্ট্রিং আর্গস []) ব্যতিক্রম {RmiServerIntf সার্ভার = (RmiServerIntf) Naming.lookup ("// স্থানীয় হোস্ট/RmiServer"); System.out.println (server.getMessage ();} এই উদাহরণটি চালানোর আগে, আমাদের ব্যবহৃত ইন্টারফেসের জন্য একটি 'স্টাব' ফাইল তৈরি করতে হবে। এই কাজের জন্য আমাদের কাছে আরএমআই কম্পাইলার রয়েছে-'আরমিক' দ্রষ্টব্যঃ আমরা '*. ক্লাস' ফাইল থেকে রিমোট ইন্টারফেস বাস্তবায়নের সাথে একটি স্টাব ফাইল তৈরি করি, '*. জাভা' ফাইল থেকে নয়। rmic RmiServer লক্ষ্য করুন যে গতিশীলভাবে উত্পন্ন স্টাব ফাইলগুলির জন্য J2SE সমর্থন সংস্করণ 5 যোগ করা হয়েছে, এবং rmic শুধুমাত্র পূর্ববর্তী রানটাইমের সাথে পিছনের সামঞ্জস্যের জন্য বা দূরবর্তী বস্তুগুলি রপ্তানি করার সময় একটি স্পষ্ট পোর্ট নম্বর (বা শূন্য) প্রদান করে না এমন প্রোগ্রামগুলির জন্য সরবরাহ করা হয়, যা তৈরি স্টাবগুলি সম্ভব হওয়ার জন্য প্রয়োজন, যেমন ইউনিকাস্টরেমোট অবজেক্টের জন্য জাভাডক-এ বর্ণনা করা হয়েছে। উপরের কনস্ট্রাক্টরের মন্তব্যটি দেখুন। জাভা আরএমআই টিউটোরিয়াল-আরএমআই শেখার জন্য একটি ভাল সূচনা বিন্দু। এছাড়াও আরএমআই-এ হ্যালো ওয়ার্ল্ড জাভা আরএমআই অনলাইন প্রশিক্ষণ পরীক্ষা করুন-জাভা আরএমআই প্রশিক্ষণের জন্য খুব ভাল এবং রেফারেন্স হিসাবে আরএমআই পৃষ্ঠা জেডিকে ডক্স (আরএমআই প্যাকেজের জন্য সানের জাভা এপিআই রেফারেন্স) প্রোগ্রামিং ওয়েবলজিক আরএমআই-ওরাকল ওয়েবলজিক-এ আরএমআই-এর একটি ভূমিকা। সাধারণ রিমোট পদ্ধতি আহ্বান আরএমআই রিমোট পদ্ধতি উদাহরণস্বরূপ জাভা কোড সহ নিবন্ধগুলিকে কল করে