2013-10-29 9 views
0

getReservationSessionCarRentalAgency에 속하며 Remote 인터페이스를 구현하는 클래스에 속합니다. CarRentalAgency의 인스턴스는 RMI 레지스트리를 통해 등록되고 다른 가상 시스템의 일부 클래스를 조회합니다. 이것은 잘 작동합니다. 그러나 (언제나 그렇지만) 메소드 getReservationSessionIReservationSession 인스턴스를 반환하며, Remote 인터페이스도 구현합니다 (서버에서 세션을 호스팅하기 때문에). 나는 많은 예외를 받았다. 그런 다음 IReservationSession을 내 보낸 다음 'origional'newSession 대신 return을 반환했습니다 (return 문 참조). 그러나 이것이 올바른 전략입니까? Java RMI가 다소 투명하다고 생각했지만,이 내보내기는 참조를 반환하기에는보기 흉한 것처럼 보입니까?원격 참조로 돌아 가기

@Override 
public IReservationSession getReservationSession(String sessionId, String clientName) 
     throws RemoteException, IllegalArgumentException { 

    if (sessionId == null) { 
     throw new IllegalArgumentException(); 
    } 
    IReservationSession session = this.activeReservationSessions.get(sessionId); 

    if (session != null) { 
     return session; 
    } else { 
     ReservationSession newSession = new ReservationSession(this.namingService, sessionId, clientName); 
     this.activeReservationSessions.put(sessionId, newSession); 
     return (IReservationSession) UnicastRemoteObject.exportObject(newSession, 0); 
    } 
} 

답변

1

ReservationSession 객체가 UnicastRemoteObject를 확장하면 자동으로 자체 제작됩니다. 그렇지 않은 경우 직접 처리해야합니다.

+0

이렇게하면 더 이상 로컬로 (그리고 오직 원격으로) 메서드를 호출 할 수 있다는 의미입니까? – Matthias

+0

개체를 내 보내지 않은 경우 원격 개체가 아니므로 원격으로 호출 할 수 없습니다. – EJP