Повторяющиеся сеансы Flex вызывали мои множественные запросы с разными JSESSIONID - PullRequest
1 голос
/ 07 июля 2011

Я думаю, что унаследовал плохой код, вот в чем дело: в моей команде я создаю локальную переменную для удаленного объекта, а затем вызываю метод для него. В результате, если нет данных, я запускаю таймер. Этот таймер передает событие каждые 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();
    }

Спасибо за любые полезные советы!

1 Ответ

1 голос
/ 08 июля 2011

Пожалуйста, прочитайте этот ответ.Дайте мне знать, если у вас все еще есть проблемы.

...