プログラミング言語や環境設定を中心としたパソコン関連の技術メモです。
主にシステム開発中に調べたことをメモしています。TIPS的な位置付けで、気が向いたときにちまちま更新していきます。
Java、SAStruts、HotDeploy時の注意点(処理中画面の表示でハマったこと)
1スレッドしか使用できないらしいから気をつけろ(--)b

いやまぁ、何でハマったかと言いますとね。
処理中画面の作成でハマったのです。

所謂メイン処理のActionがあってφ(--)

      @Execute(validator = false)
      public String doHoge() {
        try{  
              for(Integer i = 0; i < 60; i++){
                  //セッションから処理件数取得
                Integer num = (Integer)  sessionScope.get("hoge");
  
                //重い処理やってますよーのスリープ  
                  Thread.sleep(1000);
  
                //セッションの処理件数更新  
                  sessionScope.put("hoge", num + 1);
            }  
        }catch(InterruptedException e){}  
  
        return "index.jsp";  
      }



ほんで、別メソッドでその件数を取得&表示φ(--)

      @Execute(validator = false)
      public String dispProgress() {
        //セッションから処理件数取得
        Integer num = (Int  eger)sessionScope.get("hoge");
        msg1 = num.toString();  
  
        return "progress.jsp";  
      }



ついでにJSPの方はこんな感じφ(--)

    <s:form target="ifrm">  
          <input type="submit" name="doHoge"
                  value="進捗表示テスト" onclick="return hoge()" />
    </s:form>  
    <iframe name="ifrm" id="ifrm" />  



JavaScriptはいっぱい書いたので省略。
非同期通信でdispProgress()を呼び出したりしています。

よーするにメイン処理のsubumit先を非表示のiframeにしといて
submitと同時にJavaScriptのタイマー開始、
非同期通信で随時件数を取得&表示しつつ、
処理完了画面(iframeの中)のonload処理で親画面のメッセージ変更とタイマー止める。
ってなアクロバティックなことにチャレンジしてみたのです。
Servletで別スレッドおこしてうんちゃらとかよく分からんし
そもそも自前でスレッドおこすってなんかイヤだし。

でも頭で考える限りはこれでいけるんだよなーと思って試したらいけませんでした。
なんでだよ、ふぁっきゅー。
なんか件数取得の応答がメイン処理終わるまで返ってこないんですよ。
よく分からんけど順番待ちしてる感じ。

むっきー!


色々調べた結果、CoolDeployにしたらあっさり動きました(*´ェ`*)
そか、HotDeployだと1スレッドしか使えないのか。
スポンサーリンク
 
このエントリーをはてなブックマークに追加 

category:● Java  thema:システム開発 - genre:コンピュータ  Posted by ササキマコト 

  関連記事