RMI Registry হল একটি সার্ভার-সাইড রেজিস্ট্রি যেখানে রিমোট অবজেক্টগুলি bind করা হয়, যাতে ক্লায়েন্ট অ্যাপ্লিকেশনগুলো সহজেই তাদের রেফারেন্স পেতে পারে। এটি RMI কমিউনিকেশনের একটি গুরুত্বপূর্ণ অংশ। RMI Registry সাধারণত port 1099-এ কাজ করে, তবে এটি কাস্টম পোর্টেও চালানো যেতে পারে।
RMI Registry ম্যানেজমেন্ট
RMI Registry শুরু করা
Java 5 এবং তারপরে: RMI Registry শুরু করার জন্য LocateRegistry.createRegistry(port) ব্যবহার করা হয়।
উদাহরণ:import java.rmi.registry.LocateRegistry; public class RMIRegistryExample { public static void main(String[] args) { try { LocateRegistry.createRegistry(1099); // Default port 1099 System.out.println("RMI Registry is running..."); } catch (Exception e) { e.printStackTrace(); } } }External Command Line Tool: RMI Registry শুরু করতে rmiregistry কমান্ড ব্যবহার করা যেতে পারে।
rmiregistry 1099- উপরের কমান্ডটি 1099 পোর্টে একটি RMI Registry শুরু করবে।
RMI Registry এ অবজেক্ট Bind করা
Naming.rebind বা Naming.bind ব্যবহার করে রিমোট অবজেক্ট রেজিস্ট্রি-তে নিবন্ধিত করা হয়।
import java.rmi.Naming;
public class Server {
public static void main(String[] args) {
try {
LocateRegistry.createRegistry(1099); // RMI Registry তৈরি করা
HelloImpl hello = new HelloImpl();
Naming.rebind("rmi://localhost:1099/HelloService", hello);
System.out.println("HelloService is bound to the RMI Registry.");
} catch (Exception e) {
e.printStackTrace();
}
}
}
RMI Registry থেকে অবজেক্ট Unbind করা
RMI Registry থেকে রিমোট অবজেক্ট সরানোর জন্য Naming.unbind() ব্যবহার করা হয়।
import java.rmi.Naming;
public class UnbindExample {
public static void main(String[] args) {
try {
Naming.unbind("rmi://localhost:1099/HelloService");
System.out.println("HelloService is unbound from the RMI Registry.");
} catch (Exception e) {
e.printStackTrace();
}
}
}
Naming Convention
RMI Registry-তে রেজিস্টার করা রিমোট অবজেক্টগুলোর জন্য নির্দিষ্ট Naming Convention অনুসরণ করা হয়। এর মাধ্যমে ক্লায়েন্ট সহজে রেজিস্ট্রি থেকে সঠিক রিমোট অবজেক্ট খুঁজে পায়।
Naming Structure
rmi://<host>:<port>/<service_name>
- rmi://:
- এটি RMI প্রটোকল নির্দেশ করে।
- :
- সার্ভারের হোস্ট নাম বা IP অ্যাড্রেস।
- উদাহরণ:
localhost,192.168.1.100।
- :
- RMI Registry এর পোর্ট নম্বর। ডিফল্ট পোর্ট 1099।
- <service_name>:
- রিমোট অবজেক্টের একটি ইউনিক নাম।
- উদাহরণ:
HelloService,CalculatorService।
উদাহরণ
Default Port ব্যবহার করে:
rmi://localhost/HelloServiceCustom Port ব্যবহার করে:
rmi://192.168.1.100:5000/CalculatorService
RMI Registry ব্যবহারের সময় সাধারণ ত্রুটি ও সমাধান
1. RMI Registry চলছে না
ত্রুটি:
java.rmi.NotBoundException- সমাধান:
নিশ্চিত করুন যে RMI Registry চলছে এবং সঠিক পোর্টে কানেক্ট করা হয়েছে।
2. Stub ক্লাস মিসিং
ত্রুটি:
java.rmi.UnmarshalException: error unmarshalling arguments- সমাধান:
- জাভার নতুন সংস্করণে ম্যানুয়ালি Stub জেনারেট করার প্রয়োজন নেই।
- Ensure correct implementation and deployment of remote object.
3. Network Connectivity সমস্যা
ত্রুটি:
java.rmi.ConnectException: Connection refused to host- সমাধান:
- নিশ্চিত করুন যে সার্ভার এবং ক্লায়েন্ট সঠিক নেটওয়ার্কে আছে।
- ফায়ারওয়াল বা নিরাপত্তা ব্যবস্থা চেক করুন।
RMI Registry এর গুরুত্বপূর্ণ টিপস
- Custom Ports ব্যবহার করুন:
- একাধিক RMI Registry চালাতে চাইলে আলাদা পোর্ট নম্বর ব্যবহার করুন।
Security Manager ব্যবহার করুন:
- RMI কমিউনিকেশন সুরক্ষিত করার জন্য SecurityManager যোগ করুন।
System.setSecurityManager(new SecurityManager());- Service Name যথাযথভাবে নামকরণ করুন:
- রিমোট অবজেক্টের জন্য ইউনিক এবং অর্থবহ নাম ব্যবহার করুন।
- Proper Cleanup:
- প্রোগ্রাম বন্ধ করার আগে unbind বা rebind নিশ্চিত করুন।
RMI Registry হল RMI ভিত্তিক ডিস্ট্রিবিউটেড অ্যাপ্লিকেশন তৈরি করার একটি গুরুত্বপূর্ণ উপাদান। Naming Convention এর মাধ্যমে রিমোট অবজেক্টগুলোর রেজিস্ট্রেশন ও অ্যাক্সেস সহজ হয়। উপরের ধাপগুলো অনুসরণ করে আপনি RMI Registry এবং এর Naming Convention এর কার্যকর ব্যবহার শিখতে পারবেন।
Read more