getReservationSession
은 CarRentalAgency
에 속하며 Remote
인터페이스를 구현하는 클래스에 속합니다. CarRentalAgency
의 인스턴스는 RMI 레지스트리를 통해 등록되고 다른 가상 시스템의 일부 클래스를 조회합니다. 이것은 잘 작동합니다. 그러나 (언제나 그렇지만) 메소드 getReservationSession
은 IReservationSession
인스턴스를 반환하며, 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);
}
}
이렇게하면 더 이상 로컬로 (그리고 오직 원격으로) 메서드를 호출 할 수 있다는 의미입니까? – Matthias
개체를 내 보내지 않은 경우 원격 개체가 아니므로 원격으로 호출 할 수 없습니다. – EJP