2011-11-15 1 views
0

나는 학교 프로젝트 용으로 개발중인 Java 웹 애플리케이션을 가지고있다. 하나의 서버에 프리젠 테이션 계층 (servlets/jsp)을 배치하고 비즈니스 로직을 다른 서버에 배치해야한다는 요구 사항이 있습니다.Tomcat 서버 2 대를 서로 공유하기

2 개의 서버를 연결하는 솔루션이 필요합니다.

현재 RMI와 Axis2를 연구 중입니다.

RMI를 성공적으로 작동시킬 수 없습니다. 나는 official tutorial을 따르고 있으며 보안 예외를 로컬에서 계속 받고 있으며 Tomcat이 관련되어있을 때 더 악화 될 것이라고 상상해보십시오.

Axis2는 좋은 해결책 인 것처럼 보이지만 시간이 필요합니다.

내 질문은 : 비즈니스 계층을 호출 할 수 있도록 2 대의 서버를 연결하는 간단한 방법이 있습니까? 어쩌면 Tomcat에 내장 된 것이 있습니다.

RMI가 사실상의 프로토콜이고 사용해야하는 API 인 경우 Tomcat과 함께 RMI를 사용하는 데 대한 유용한 자습서가 있습니까?

내가 사용하는 서버는 모두 Tomcat을 실행합니다.

답변

0

나는 RMI를 사용하여 끝냈다. 이 튜토리얼을 사용하여 나는 그것을 작동 시켰습니다 : http://sacrosanctblood.blogspot.com/2008/11/rmi-tutorial-rmi-and-tomcat.html. 핵심은 다음과 같습니다. 시작 서블릿에서 스텁 아웃하는 객체가 클래스 범위이고 메소드 스코프가 아닌지 확인해야합니다. 또한 보안 관리자 코드는 필요하지 않습니다. 여기

은 내가 사용하고있어 startserver는 서블릿에 대한 코드입니다 :

public class startServer extends HttpServlet 
{ 
    public static boolean isRegistered = false;  
    public IRemote service = new RemoteImpl(); 

    @Override 
    public void init(ServletConfig config) throws ServletException 
    { 
     super.init(config);   
     if (!isRegistered) 
     { 
      try 
      {     
       IRemote stub = (IRemote) UnicastRemoteObject.exportObject(service, 0); 
       Registry registry = LocateRegistry.createRegistry(9345); 
       registry.rebind(IRemote.serviceName, stub); 
       System.out.println("Remote service bound"); 
       isRegistered = true; 
      } 
      catch (Exception e) 
      { 
       System.err.println("Remote service exception:"); 
       e.printStackTrace(); 
      } 
     } 
    } 
} 

을 그리고 여기에 클라이언트 코드입니다 :

public String getRemoteString() 
{ 
    String result = ""; 
    try 
    { 
     Registry registry = LocateRegistry.getRegistry(9345);    
     IRemote serv = (IRemote) registry.lookup(IRemote.serviceName); 

     result = serv.executeRemote("Test"); 
    } 
    catch (Exception e) 
    { 
     System.err.println("Remoteservice exception:"); 
     e.printStackTrace(); 
    } 

    return result; 
} 

은 현재이 같은 서버에있는 모든 실행,하지만 난 나중에 2가 작동 할 수 있는지 확인하십시오.

2

데이터 계층이 얼마나 복잡한 지 잘 모르겠지만 비즈니스 로직 서버에 Apache CXF을 사용하여 REST 인터페이스를 구현할 수 있습니다. 그것은 Axis2를 사용하는 것보다 쉬워야합니다.

+0

그는 또한 스프링 mvc를 둘 다 사용할 수 있으며 비즈니스 계층에서 json 또는 xml을 반환하도록 할 수 있습니다. – Kevin

1

는 많은 많은 옵션이 있습니다 :

  • 는 한쪽에서 파일을 작성 다른에서 그것을 읽었다. "다른 쪽"은 "한 쪽"이 요청 파일을 쓰는 폴더를 모니터링하는 무한 루프가 있어야합니다.
  • 사용 sockets
  • 사용 REST
  • RMI

리눅스에있는 경우 :

환경을 감안할 때 REST와 함께 갈 것입니다.