Я хочу закрыть все соединения между клиентом и сервером по протоколу RMI.
Remote r= Naming.lookup("rmi://192.168.105.38:9121/AccountRMIService");
if(r instanceof RmiInvocationWrapper_Stub) {
RmiInvocationWrapper_Stub stub = (RmiInvocationWrapper_Stub)r;
System.out.println("hashCode="+stub.getRef().hashCode());
}
System.out.println(r);
//How to close the connection with 'Remote' ?
Некоторый код для проверки состояния rmi сервера:
final ThreadLocal<List<Socket>> currentSocket = new ThreadLocal<List<Socket>>() {
protected List<Socket> initialValue() {
return new ArrayList<Socket>();
}
};
RMISocketFactory.setSocketFactory(new RMISocketFactory() {
public Socket createSocket(String host, int port) throws IOException {
Socket socket = new Socket(host, port);
socket.setKeepAlive(true);
socket.setSoTimeout(300);
currentSocket.get().add(socket);
return socket;
}
public ServerSocket createServerSocket(int port) throws IOException {
return new ServerSocket(port);
}
});
Remote r = Naming.lookup("rmi://192.168.105.38:9121/AccountRMIService");
if (r instanceof RmiInvocationWrapper_Stub) {
RmiInvocationWrapper_Stub stub = (RmiInvocationWrapper_Stub) r;
System.out.println("hashCode=" + stub.getRef().hashCode());
}
Iterator<Socket> s = currentSocket.get().iterator();
while(s.hasNext()) {
s.next().close();
s.remove();
}
Это не клиент дляRMI общение.Я просто хочу проверить состояние сервера, используя протокол RMI, а не с простым сокетом.Иногда сервер все еще работает, но все запросы блокируются.