0
方法getReservationSession
屬於CarRentalAgency
這個類實現了接口Remote
。 CarRentalAgency
的一個實例通過RMI註冊表進行註冊,並由不同虛擬機中的某個類查找。這工作正常。但是(總是有一個但是)方法getReservationSession
返回一個IReservationSession
實例,它也實現了接口Remote
(因爲我想在服務器上主持會話)。我收到了很多例外。然後,我導出了IReservationSession
並返回了存根,而不是「原始」newSession(請參閱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