2011-07-07 14 views
1

私は悪いコードを継承したと思います。私のコマンドでは、リモートオブジェクトのローカル変数を作成し、そのメソッドを呼び出します。その結果、データがない場合、私はタイマーを開始します。このタイマーは、データが返されるまで継続してこのコマンドを呼び出す2秒ごとにイベントをブロードキャストします。その後、タイマーが停止します。重複したFlexセッションにより、異なるJSESSIONIDを持つ複数のリクエストが発生しました

私たちが見ていることは、このメソッドがデータを1回返し、次に返さない場合です(Flexセッションエラーを取り除きます)。それは基本的に交代する。私たちが本当に速くクリックすると、2人が連続して働くことがあります。

時には、Java開発者は、これらの要求が異なるJSESSIONIDで返されることがあります。私はこれが重複Flexセッションのエラーを引き起こしていると思います。

私が継承したこの悪いコードですか?この問題を解決するためにこれを行う方法や何らかの方法がありますか?

私はCairngormを使用しています。ここには実行コマンドがあります。

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(); 
    } 

ありがとうございました!

+0

コードを表示します。どのようにコマンドを使用していますか?あなたはフレームワークを使用していますか? –

+0

投稿でコードを更新しました。私はCairngormを使用しており、timerHandler()メソッドのイベントブロードキャストは、このコマンドのexecute()メソッドを呼び出すだけです。 – fumeng

+0

あなたのイベントはどのように派遣されていますか?表示リストにはありませんか? –

答えて

1

this答えをお読みください。まだ問題がある場合は教えてください。

+0

古いですが、回答を拡大したい場合や、正確な複製がある場合は、そのように閉じるよう投票してください。ありがとう! –

関連する問題