Kadang kita memerlukan mekanisme untuk memisahkan atau mendistribusikan aplikasi kita, agar bisa di akses di jaringan. Ada beberapa cara untuk melakukannya, bisa dengan Web Service, atau bisa juga dengan menggunakan teknologi yang disebut dengan RMI (Remote Methode Invocation).
Java RMI memungkinkan untuk membuat aplikasi terdistribusi, dimana aplikasi Java yang di buat bisa di pisahkan dalam mesin atau host yang berbeda. Sesuai dengan namanya Invoc, maka modul yang di panggil hanya akan aktif ketika di panggil. Atau mirip dengan pengiriman SMS, jika operator menerima SMS dari pengirim, maka akan langsung mengirimkan ke si penerima.
Implementasi RMI ini sangat luas, misalkan salah satu contoh, sebuah perusahaan atau organisasi memiliki beberapa cabang yang tidak bisa selalu online, namun ingin aplikasi yang di buat di cabang bisa selalu ter update, dan tanpa perlu memberikan informasi kepada pengguna di cabang.
Skenario dengan RMI adalah dengan membuat di sisi server yang selalu standby, dan di sisi client di atur dengan periode waktu tertentu melakukan update ke server.
Contoh RMI Server (dibuat dengan Netbeans 6.5)
Struktur aplikasi/ paket
RMISederhanaServer
-business
-RMIBusiness.java
-interfc
-RMIInterface.java
-server
-AppServer.java
RMIBusiness.java
package business;
import interfc.RMIInterface;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
/**
*
* @author harta
*/
public class RMIBusiness extends UnicastRemoteObject implements RMIInterface {
public RMIBusiness() throws RemoteException {
super();
}
public String PesanServer(String nama) throws RemoteException {
String pesanBalik="Apa kabar "+nama;
return pesanBalik;
}
}
RMIInterface.java
package interfc;
import java.rmi.Remote;
import java.rmi.RemoteException;
/**
*
* @author harta
*/
public interface RMIInterface extends Remote{
public String PesanServer(String nama) throws RemoteException;
}
AppServer.java
package server;
import business.RMIBusiness;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author harta
*/
public class AppServer {
public static void main(String[] a){
try {
System.out.println("Server Berjalan ");
Registry registry = LocateRegistry.createRegistry(1099);
registry.rebind("rmitrans", new RMIBusiness());
} catch (RemoteException ex) {
Logger.getLogger(AppServer.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
RMISederhanaClient
-client
-AppClient.java
-interfc
-RMIInterface.java
AppClient.java
package client;
import interfc.RMIInterface;
import java.rmi.AccessException;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author harta
*/
public class AppClient {
public static void main(String[] a){
try {
Registry registry = LocateRegistry.getRegistry("localhost", 1099);
RMIInterface rmiUpload = (RMIInterface) registry.lookup("rmitrans");
System.out.println(rmiUpload.PesanServer("Raihan"));
} catch (NotBoundException ex) {
Logger.getLogger(AppClient.class.getName()).log(Level.SEVERE, null, ex);
} catch (AccessException ex) {
Logger.getLogger(AppClient.class.getName()).log(Level.SEVERE, null, ex);
} catch (RemoteException ex) {
Logger.getLogger(AppClient.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
RMIInterface di client harus sama dengan yang ada di server, berikut nama paketnya. Misalkan kita membuat object sendiri, dimana object tersebut di hubungkan melalui RMI maka deklarasi object harus mengimplementasikan Serializable.
Misalnya, jika kita ingin mendapatkan object barang dari server berdasarkan kode barang. Yang pasti RMI Interface di atas harus di ubah dan disesuaikan,
Ingat :Jika Interface di server di ubah, maka Interface di client harus di samakan.
Misalkan objek barang itu kita namakan BarangTO, maka BarangTO harus mengimplementasikan Serializable dan harus ada di sisi Server dan sisi Client.
RMIInterface.java
package interfc;
import java.rmi.Remote;
import java.rmi.RemoteException;
/**
*
* @author harta
*/
public interface RMIInterface extends Remote{
public String PesanServer(String nama) throws RemoteException;
public BarangTO getBarangByID(String kdBarang) throws RemoteException;
}
BarangTO.java
import java.io.Serializable;
/**
*
* @author harta
*/
public class BarangTO implements Serializable {
private String kdBarang;
private String nmBarang;
private float hrgBarang;
private int jmlBarang;
public int getJmlBarang() {
return jmlBarang;
}
public void setJmlBarang(int jmlBarang) {
this.jmlBarang = jmlBarang;
}
public float getHrgBarang() {
return hrgBarang;
}
public void setHrgBarang(float hrgBarang) {
this.hrgBarang = hrgBarang;
}
public String getKdBarang() {
return kdBarang;
}
public void setKdBarang(String kdBarang) {
this.kdBarang = kdBarang;
}
public String getNmBarang() {
return nmBarang;
}
public void setNmBarang(String nmBarang) {
this.nmBarang = nmBarang;
}
}
0 komentar:
Post a Comment