जावा RMI - डेटाबेस अनुप्रयोग
पिछले अध्याय में, हमने एक नमूना आरएमआई एप्लिकेशन बनाया, जहां एक ग्राहक एक विधि को आमंत्रित करता है जो एक जीयूआई विंडो (जावाएफएक्स) प्रदर्शित करता है।
इस अध्याय में, हम एक उदाहरण देखेंगे कि कैसे क्लाइंट प्रोग्राम सर्वर पर रहने वाले MySQL डेटाबेस में एक टेबल के रिकॉर्ड को पुनः प्राप्त कर सकता है।
मान लें कि हमारे पास एक तालिका है जिसका नाम है student_data डेटाबेस में details जैसा की नीचे दिखाया गया।
+----+--------+--------+------------+---------------------+
| ID | NAME | BRANCH | PERCENTAGE | EMAIL |
+----+--------+--------+------------+---------------------+
| 1 | Ram | IT | 85 | [email protected] |
| 2 | Rahim | EEE | 95 | [email protected] |
| 3 | Robert | ECE | 90 | [email protected] |
+----+--------+--------+------------+---------------------+
मान लें कि उपयोगकर्ता का नाम है myuser और इसका पासवर्ड है password।
एक छात्र वर्ग बनाना
बनाओ Student के साथ वर्ग setter तथा getter नीचे दिखाए गए तरीके।
public class Student implements java.io.Serializable {
private int id, percent;
private String name, branch, email;
public int getId() {
return id;
}
public String getName() {
return name;
}
public String getBranch() {
return branch;
}
public int getPercent() {
return percent;
}
public String getEmail() {
return email;
}
public void setID(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setBranch(String branch) {
this.branch = branch;
}
public void setPercent(int percent) {
this.percent = percent;
}
public void setEmail(String email) {
this.email = email;
}
}
रिमोट इंटरफ़ेस को परिभाषित करना
दूरस्थ इंटरफ़ेस परिभाषित करें। यहां, हम नाम के एक दूरस्थ इंटरफ़ेस को परिभाषित कर रहे हैंHello नाम की एक विधि के साथ getStudents ()इस में। यह विधि एक सूची देती है जिसमें कक्षा का उद्देश्य होता हैStudent।
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.util.*;
// Creating Remote interface for our application
public interface Hello extends Remote {
public List<Student> getStudents() throws Exception;
}
कार्यान्वयन वर्ग का विकास करना
एक क्लास बनाएं और ऊपर बनाए गए को लागू करें interface.
यहां हम लागू कर रहे हैं getStudents() की विधि Remote interface। जब आप इस विधि को लागू करते हैं, तो यह नामित तालिका के रिकॉर्ड को पुनः प्राप्त करता हैstudent_data। इन मानों को सेट्टर विधियों के उपयोग से छात्र वर्ग में सेट करता है, इसे सूची ऑब्जेक्ट में जोड़ता है और उस सूची को लौटाता है।
import java.sql.*;
import java.util.*;
// Implementing the remote interface
public class ImplExample implements Hello {
// Implementing the interface method
public List<Student> getStudents() throws Exception {
List<Student> list = new ArrayList<Student>();
// JDBC driver name and database URL
String JDBC_DRIVER = "com.mysql.jdbc.Driver";
String DB_URL = "jdbc:mysql://localhost:3306/details";
// Database credentials
String USER = "myuser";
String PASS = "password";
Connection conn = null;
Statement stmt = null;
//Register JDBC driver
Class.forName("com.mysql.jdbc.Driver");
//Open a connection
System.out.println("Connecting to a selected database...");
conn = DriverManager.getConnection(DB_URL, USER, PASS);
System.out.println("Connected database successfully...");
//Execute a query
System.out.println("Creating statement...");
stmt = conn.createStatement();
String sql = "SELECT * FROM student_data";
ResultSet rs = stmt.executeQuery(sql);
//Extract data from result set
while(rs.next()) {
// Retrieve by column name
int id = rs.getInt("id");
String name = rs.getString("name");
String branch = rs.getString("branch");
int percent = rs.getInt("percentage");
String email = rs.getString("email");
// Setting the values
Student student = new Student();
student.setID(id);
student.setName(name);
student.setBranch(branch);
student.setPercent(percent);
student.setEmail(email);
list.add(student);
}
rs.close();
return list;
}
}
सर्वर प्रोग्राम
एक RMI सर्वर प्रोग्राम को दूरस्थ इंटरफ़ेस को लागू करना चाहिए या कार्यान्वयन वर्ग का विस्तार करना चाहिए। यहां, हमें एक दूरस्थ वस्तु बनानी चाहिए और उसे बांधना चाहिएRMI registry।
इस एप्लिकेशन का सर्वर प्रोग्राम निम्नलिखित है। यहां, हम ऊपर बनाई गई कक्षा का विस्तार करेंगे, एक दूरस्थ ऑब्जेक्ट बनाएंगे और इसे बाँध नाम के साथ आरएमआई रजिस्ट्री में पंजीकृत करेंगेhello।
import java.rmi.registry.Registry;
import java.rmi.registry.LocateRegistry;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class Server extends ImplExample {
public Server() {}
public static void main(String args[]) {
try {
// Instantiating the implementation class
ImplExample obj = new ImplExample();
// Exporting the object of implementation class (
here we are exporting the remote object to the stub)
Hello stub = (Hello) UnicastRemoteObject.exportObject(obj, 0);
// Binding the remote object (stub) in the registry
Registry registry = LocateRegistry.getRegistry();
registry.bind("Hello", stub);
System.err.println("Server ready");
} catch (Exception e) {
System.err.println("Server exception: " + e.toString());
e.printStackTrace();
}
}
}
ग्राहक कार्यक्रम
निम्नलिखित इस एप्लिकेशन का क्लाइंट प्रोग्राम है। यहां, हम दूरस्थ ऑब्जेक्ट ला रहे हैं और नाम की विधि का उपयोग कर रहे हैंgetStudents()। यह सूची ऑब्जेक्ट से तालिका के रिकॉर्ड को पुनः प्राप्त करता है और उन्हें प्रदर्शित करता है।
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.util.*;
public class Client {
private Client() {}
public static void main(String[] args)throws Exception {
try {
// Getting the registry
Registry registry = LocateRegistry.getRegistry(null);
// Looking up the registry for the remote object
Hello stub = (Hello) registry.lookup("Hello");
// Calling the remote method using the obtained object
List<Student> list = (List)stub.getStudents();
for (Student s:list)v {
// System.out.println("bc "+s.getBranch());
System.out.println("ID: " + s.getId());
System.out.println("name: " + s.getName());
System.out.println("branch: " + s.getBranch());
System.out.println("percent: " + s.getPercent());
System.out.println("email: " + s.getEmail());
}
// System.out.println(list);
} catch (Exception e) {
System.err.println("Client exception: " + e.toString());
e.printStackTrace();
}
}
}
उदाहरण चलाने के लिए कदम
हमारे RMI उदाहरण को चलाने के लिए निम्न चरण हैं।
Step 1 - वह फ़ोल्डर खोलें जहां आपने सभी प्रोग्राम संग्रहीत किए हैं और नीचे दिखाए गए अनुसार सभी जावा फ़ाइलों को संकलित करें।
Javac *.java
Step 2 - प्रारंभ करें rmi निम्न कमांड का उपयोग करके रजिस्ट्री।
start rmiregistry
यह एक शुरू हो जाएगा rmi एक अलग विंडो पर रजिस्ट्री जैसा कि नीचे दिखाया गया है।
Step 3 - सर्वर क्लास की फाइल को नीचे दिखाए अनुसार चलाएँ।
Java Server
Step 4 - ग्राहक वर्ग फ़ाइल को नीचे दिखाए अनुसार चलाएँ।
java Client