У меня есть распределенное приложение, использующее Java RMI и основной объект (CoreApplication), который реализует java.io.Serializable.Каждую минуту этот главный объект отправляется на удаленный компьютер и обрабатывается в пуле потоков этой JVM.Поскольку он асинхронный, объект обрабатывается без блокировки основного потока на главном компьютере.
Когда объект CoreApplication завершает обработку в удаленном потоке, он вызывает метод обратного вызова и отправляется обратно на главный компьютер..
Вот некоторый код удаленного компьютера, обрабатывающего задание, вызванное с главного компьютера через RMI, и метод sendJob
public void sendJob(final CoreApplication aJob) throws RemoteException{
Runnable r = new Runnable(){
public void run(){
try {
WorkResponse wr = aJob.process();
client.coreApplicationHandler(aJob,wr);
}catch(RemoteException e){}
}
};
workQueue.execute(r);
}
Вы можете увидеть client.coreApplicationHandler - это метод обратного вызова дляглавный сервер и отправляет вместе с ним объект CoreApplication вместе с объектом ответа.
Вот код метода coreApplicationHandler на главном компьютере
public void coreApplicationHandler(CoreApplication j,WorkResponse wr){
String ticker = j.getTickerSymbol();
coreApplicationObjects.put(ticker, j);
if(GlobalParameters.DEBUG_MODE){
System.out.println("WORK RESPONSE IS "+wr.getMessage());
}
}
Мой вопрос заключается в замене CoreApplication.объект каждый раз в методе обратного вызова - лучший способ убедиться, что он актуален в течение следующей минуты, когда он был отправлен?CoreApplication плавный и меняется, и состояние должно быть сохранено.Я отправляю его обратно на главный компьютер, поэтому его состояние можно контролировать из центрального расположения.Если бы у меня было 100 вычислительных узлов, и они не возвращали свои объекты, было бы очень грязно, я думаю, что отследить их все.
До сих пор это работает довольно хорошо, если работа не обрабатываетсявремя он пытается отправить другой и приводит к отправке устаревшего объекта со старым состоянием (то есть, тот же объект, что и в последнюю минуту).Пожалуйста, прокомментируйте, если это не имеет смысла, и я сделаю все возможное, чтобы объяснить это.