- PR -

Struts Action内でのスレッド生成について

1
投稿者投稿内容
カイ
会議室デビュー日: 2005/08/15
投稿数: 6
投稿日時: 2005-10-25 16:06
Struts Actionでスレッドを起動した後、すぐに別のアクションにforwardした
場合に、スレッド内のsessionオブジェクトの取得時に、Nullエラーとなってしまいます。

処理条件は、A画面からB画面へ遷移する処理で、A画面のsubmitで発生したアクション内でスレッドを動かして、
B画面へ遷移した時にB画面の裏でスレッドが動いてるという処理を行いたいのですが、
根本的にこういうやり方でいいのかが分かりません。

すみませんが、ご教授お願い致します。

-----------------------------
// A画面からのActionクラス
public class ThreadTestAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
ThreadTestForm testForm = (ThreadTestForm) form;

// スレッドクラス
ThreadTest = new ThreadTest(request);

// スレッド生成、開始
Thread blThread = new Thread(bl2);
blThread.start();

// スレッドを裏で動かしておき、自身は画面に戻る
return mapping.findForward("success");
}
}

// スレッド
public class ThreadTest implements Runnable {

private HttpServletRequest request;

public ThreadTest(HttpServletRequest request) {
this.request = request;
}

public void run() {
try {
this.request.getSession().getAttribute("objThread");
} catch (Exception e) {
system.out.println(e.getMessage() + ", " + e.getStackTrace());
}
}
}

struts-config.xml
<!-- A画面からのAction -->
<action
path="/ThreadTest"
type="test.ThreadTestAction"
name="ThreadTestForm"
scope="request"
validate="false">
<forward name="success" path="/TestGui.do" />
</action>

<!-- B画面へのAction -->
<action
path="/TestGui"
type="test.TestGuiAction"
name="GuiForm"
scope="request"
validate="false" >
<forward name="success" path="/TestGui.jsp" />
</action>
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-10-25 16:20
HttpServletRequest オブジェクトはservice メソッドのスコープでしか有効でありません。
別のスレッドに渡して非同期的に利用できるかどうかは保証されません。
1

スキルアップ/キャリアアップ(JOB@IT)