본문 바로가기

Java SE/RMI ex 04

RMI ex 04

EmpDTO 클래스를 이용하여 서버에서 검색된 사원정보가 이 클래스의 인스턴스에 저장되어 클라이언트까지 전달될 수 있도록 하였다.

인터페이스

import java.rmi.*;

public interface EmpServer extends Remote {

 public EmpDTO getEmp(String empName) throws RemoteException;

}


서버 클래스

import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.RMISecurityManager;
import java.rmi.server.UnicastRemoteObject;
import java.io.*;

public class EmpServerImpl extends UnicastRemoteObject implements EmpServer {
 
 public EmpServerImpl() throws RemoteException {
    super();
 }
 
 public EmpDTO getEmp(String empName) {
 EmpDAO dao = new EmpDAO();
    return dao.search(empName);
 }
 
 public static void main(String args[]) {
 
  try {

      EmpServerImpl obj = new EmpServerImpl();
 
      Naming.rebind("EmpServer", obj);
 
      System.out.println("EmpServer bound in registry");

  } catch (Exception e) {

      System.out.println("EmpImpl err: " + e.getMessage());

      e.printStackTrace();

  }
 }
}



EmpDAO.java

import java.io.*;
import java.util.*;

public class EmpDAO
{
 public EmpDTO search(String empName) {
  BufferedReader br = null;
  try{
   br = new BufferedReader(new FileReader("emp.dat"));
   String line = null;
   while((line=br.readLine())!=null) {
    if(line.indexOf(empName)!= -1) {
     StringTokenizer token = new StringTokenizer(line, "|");
     br.close();
     return new EmpDTO(token.nextToken(), token.nextToken(), token.nextToken(), token.nextToken());
    }
   }
   br.close();
  }catch(Exception e){
   e.printStackTrace();
  }finally{
   if(br!=null){
    try{
     br.close();
    }catch(Exception ex){}
   }
  }
  return null;
 }

 public static void main(String[] args)  {
  EmpDAO dao = new EmpDAO();
  EmpDTO emp = dao.search("홍길동");
  System.out.println(emp.getName());
 }
}


EmpDTO.java

public class EmpDTO implements java.io.Serializable
{
 String name;
 String address;
 String phone;
 String email;

 public EmpDTO(String name, String address, String phone, String email) {
  this.name = name;
  this.address = address;
  this.phone = phone;
  this.email = email;
 }

 public String getName(){
  return name;
 }
 public String getAddress(){
  return name;
 }
 public String getPhone(){
  return phone;
 }
 public String getEmail(){
  return email;
 }
 public static void main(String[] args)  {
  EmpDTO emp = new EmpDTO("홍길동", "강원도 정선군", "543-67-765", "hong@yaho.co.kr");
  String name = emp.getName();
  System.out.println(name);
 }
}


emp.dat


클라이언트

import java.rmi.*;
import java.io.*;

public class EmpClient {

    public static void main(String[] args) {

        try {
   BufferedReader  br = new  BufferedReader(new InputStreamReader(System.in));
   System.out.print("검색하실 사원의 이름을 입력해 주세요 ");
   String empName = br.readLine();

            EmpServer obj = (EmpServer)Naming.lookup("rmi://localhost/EmpServer");

            EmpDTO emp = obj.getEmp(empName);

            System.out.println("서버에서 온 메시지");
   System.out.println("이름:"+emp.getName());
   System.out.println("주소:"+emp.getAddress());

 } catch (Exception e) {

            System.out.println(e.getMessage());

            e.printStackTrace();

        }
    }
}