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