JAVA RMI Örnek
RMI projelerinden kullanılacak methodlar için bir interface yazmak gerekir. Önce server ve client projelerinde ortak olan interfacemizi yazalım.
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface IMultiplyService extends Remote{
public int [] matrixMultiply(int []matrixaRow, int [][]matrixb) throws RemoteException;
}
Örneğimizde remote matris çarpımı yapacağız, interfacemiz aslında aslında remote methodumuzun parametre olarak neler alıyor geriye ne döndürüyor anlatıyor. Proje aslında paralel matris çarpımı yaptığı için parametre olarak 1. matrisin satırını ve çarpılacak 2. matrisin tamamını almaktadır. Geriye çarpımın sonucu olan bir satır vektörü dündürmektedir.
Kafamızı karıştırmaya gerek yok basitce bu method string bir deger alıp string bir degerde döndürebilirdi.
Şimdi de server kodumuzu yazalım, Server methodu çağrılan uygulamadır.
// RmiServer.java
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
public class RmiServer extends java.rmi.server.UnicastRemoteObject implements
IMultiplyService {
private int thisPort;
private Registry registry;
public int [] matrixMultiply(int []matrixaRow, int [][]matrixb) throws RemoteException{
// System.out.println("Client1 start multiply!");
int bCol = matrixb[0].length;
int bRow = matrixb.length;
int []mutipliedRow = new int[bCol];
for(int i = 0; i < bRow; i++){
for(int j = 0 ; j < bCol; j++ ){
mutipliedRow[j] += matrixaRow[i] * matrixb[i][j];
}
}
return mutipliedRow;
}
public RmiServer() throws RemoteException {
try {
thisPort = 1983;
registry = LocateRegistry.createRegistry(thisPort);
registry.rebind("rmiServer", this);
System.out.println("Server1 started!");
} catch (RemoteException e) {
throw e;
} catch (Exception e) {
throw new RemoteException("Unable to get inet address.");
}
}
public static void main(String args[]) {
try {
RmiServer server = new RmiServer();
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}
}
Gördümüz gibi gayet sade bir kod 1983 portundan gelen veriileri çarpıp geri döndürmektedir.
Simdi gelelim Client projemizin koduna, Client kodumuzda Server da bulunan çarpım methodunu çağıran basit bir proje olacaktır. Client projemizdede yukarıda yazdığımız
IMultiplyServiceinterfaceini eklemeyi unutmayalım.
Client kodumuzuda ekleyelim
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
/**
* @author ozkan.yalcin
*
*/
public class RmiClient {
static int result[][];
static int matrixa[][] ;
static int matrixb[][] ;
public static void main(String args[]) throws InterruptedException {
matrixa = Util.matrixCreate(30, 20);
matrixb = Util.matrixCreate(20, 30);
result = new int[matrixa.length][matrixb[0].length];
for(int i = 0; i < matrixa.length; i++){
result[i] = connectClient(matrixa[i], matrixb);
}
}
public static int[] connectClient(int []matrixaRow, int [][]matrixb ) throws Exception{
Registry registry = LocateRegistry.getRegistry("localhost", 1983);
IMultiplyService rmiserver = (IMultiplyService) (registry.lookup("rmiServer"));
return rmiserver.matrixMultiply(matrixaRow, matrixb);
}
}
Client kodumuzda bu kadar, ikinci kodda biraz sadeleştirme yaptım kod aslında bir multithread uygulaması olduğu için çok karmaşık olacaktı bu konu için eksik bişeler kaldıysa affola eğer çalıştıramayan arkadaş olursa bana dönmeleri durumunda sorunlarına çare bulmaya çalışırız.
Teşekkürler.
İyi Çalışmalar.
Etiketler :


