Я думаю, что унаследовал плохой код, вот в чем дело: в моей команде я создаю локальную переменную для удаленного объекта, а затем вызываю метод для него. В результате, если нет данных, я запускаю таймер. Этот таймер передает событие каждые 2 секунды, которое непрерывно вызывает эту команду, пока данные не будут возвращены. Затем таймер останавливается.
То, что мы видим, это то, что метод возвращает данные один раз, а затем в следующий раз - нет (ошибка дублирования сеансов Flex). Это в основном чередуется. Если мы нажмем очень быстро, иногда мы получим по два подряд.
Иногда Java-разработчик видит эти запросы, возвращенные с разными JSESSIONID. Я считаю, что это вызывает ошибку дублирующихся сеансов Flex.
Это плохой код, который я унаследовал? Есть ли другой способ сделать это или каким-то образом решить эту проблему?
Я использую Cairngorm; вот команда execute.
public function execute(event:CairngormEvent):void
{
ruleName = (event as FetchReportEvent).ruleName;
var ro:RemoteObject = ServiceLocator.getInstance().getRemoteObject("quantRemoteObject");
if (model.guid != null)
{
var call:AsyncToken = ro.generateReportResultSetGet(model.guid);
call.addResponder(this);
}
ro.requestTimeout
}
public function result(data:Object):void
{
var resultEvent:ResultEvent = data as ResultEvent;
var ac:ArrayCollection = resultEvent.result as ArrayCollection;
timer.stop();
if (ac == null || ac.length == 0)
{
Alert.show("Received unknown data format from the server. Unable to generate report");
model.currentMode = RulesModelLocator.VIEW_MODE;
model.guid = null;
}
else if (ac.getItemAt(0) == false)
{
// no data yet, start the timer for next try
// make sure not cancelled
if (model.guid != null)
{
timer.addEventListener(TimerEvent.TIMER, timerHandler, false, 0, false);
timer.start();
}
else
{
timer.stop();
}
}
}
private function timerHandler(event:TimerEvent):void
{
var fetchReportEvent:FetchReportEvent = new FetchReportEvent();
fetchReportEvent.ruleName = ruleName;
fetchReportEvent.dispatch();
}
Спасибо за любые полезные советы!