เกริ่นนำ
RMI เป็นเทคโนโลยีที่ช่วยนักพัฒนาในการเขียน Distributed Object Computing.
ถ้าให้พูดกันง่ายๆ RMI ช่วยให้เราสามารถเรียกใช้ Remote Object จากหลายๆ JVM
โดยผ่าน LAN, WAN, หรือ WWW. RMI ถือว่าค่อนข้างง่ายเมื่อเทียบกันเทคโนโลยีอื่นๆ
ที่ใช้เกียวกับ Distrubted Computing. ตัวย่างที่เห็นใช้ RMI ก็คือ
Banking Online หรือ RealTime Stock Quote.
เริ่มกันเลย
RMI ประกอบด้วย 5 ขั้นตอน
1. Interface ของ Remote Object.
2. Implementation ของ Remote Object.
3. Host Server
4. Client Application
5. สร้าง stub และ skeleton
เราจะมาเริ่มเขียน RMI ให้ส่งข้อความสั้น "Hello" ทุกครั้งที่มีการ
Request จาก Client.
1. ขั้นตอนแรก เขียน Interface ของ Remote Object. (Hello.java)
public interface Hello extends java.rmi.Remote {
public String Hello() throws java.rmi.RemoteException;
}
2. เมื่อเราได้ Interface ของ Object แล้ว เราก็มาเขียน implementation
ของ object. (HelloImpl.java)
public class HelloImpl extends java.rmi.server.UnicastRemoteObject
implements Hello {
public HelloImpl() throws java.rmi.RemoteException {
super();
}
public String Hello() throws java.rmi.RemoteException {
System.out.println("returned \"Hello\" to the
client.");
return "Hello";
}
}
3. เขียน service สำหรับ run บน host. (HelloServer.java)
import java.rmi.Naming;
public class HelloServer {
public HelloServer() {
try {
Hello h = new HelloImpl();
Naming.rebind("rmi://localhost:1099/HelloServer",
h);
System.out.println("Waiting for
clients...");
}
catch (Exception e) {
System.out.println("Trouble: " +
e);
}
}
public static void main(String args[]) {
new HelloServer();
}
}
4. เขียนโปรแกรมที่เรียกใช้ Service ในขั้นที่ 3 (HelloClient.java)
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.net.MalformedURLException;
import java.rmi.NotBoundException;
public class HelloClient {
public static void main(String[] args) {
try {
Hello h = (Hello) Naming.lookup("rmi://localhost/HelloServer");
System.out.println( h.Hello()
);
}
catch (MalformedURLException murle) {
System.out.println();
System.out.println("MalformedURLException");
System.out.println(murle);
}
catch (RemoteException re) {
System.out.println();
System.out.println("RemoteException");
System.out.println(re);
}
catch (NotBoundException nbe) {
System.out.println();
System.out.println("NotBoundException");
System.out.println(nbe);
}
catch (java.lang.ArithmeticException ae)
{
System.out.println();
System.out.println("java.lang.ArithmeticException");
System.out.println(ae);
}
}
}
5. ไปที่ commandline บน dos เพี่อที่จะสร้าง stub และ
skeleton
(จะพูดถึงรายละเอียดของ protocal และ architecture ของ rmi ในตอนที่ 2)
c:\rmic HelloImpl
* rmic.exe จะอยู่ที่ bin ไดเรคทรอรี่ของ JDK, ให้ทำการเซ็ต path
ไปที่ไดเรคทรอรี่นี้
เมื่อเราสร้าง stub กับ skeleton ของ HelloImpl
เราจะได้ไฟล์ใน directory เดียวกันเพิ่มมาสองไฟล์คือ HelloImpl_Stub.class
และ HelloImpl_Skel.class
ถึงตรงนี้แล้วเราก็ได้ service ที่จะรันบน host และโปรแกรมที่เรียกใช้
service ดังกล่าว เราก็มารัน rmi กันเลย
1. ก่อนอื่นเราต้องเรียก RMI registry โดยการพิมพ์ c:\rmiregistry
บน commandline
2. เปิดหน้าต่างใหม่ของ dos แล้วก็รัน c:\java
HelloServer เพื่อรัน service
3. เปิดหน้าต่างของ dos ขึ้นมาอีกหนึ่งหน้าต่าง แล้วพิมพ์ c:\java
HelloClient
4. เราก็จะได้ คำกล่าวสวัสดีว่า "Hello"
Note: อย่าลืมทำการ complie โปรแกรม HelloServer.java และ HelloClient.java
ก่อนที่จะรัน
จากตัวอย่างข้างต้น ก็คิดว่าผู้อ่านก็จะได้เห็นภาพว่า rmi ทำงานอย่างไร
มีขั้นตอนการสร้างอย่างไร เราจะมาพูดกันถึง structure ของ rmi และการใช้ rmi
ร่วมกับ JDBC, หรือ servlet ในบทความหน้า
|