人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

JavaEE5(EJB3.0)でワーカスレッドのようなものを実現するにはどうすればよいでしょうか。


クライアント(Webブラウザ)から要求
->サーバが要求を受け取ってEJBコンテナのインスタンスを生成、メソッドを実行。
->(1)EJBコンテナのメソッドの中で処理中フラグをDBに永続化。
->(2)ワーカスレッドを起動し、クライアントに受け付けたことをレスポンスする。
->(3)ワーカスレッドの中で重い処理を実行し、完了すると完了フラグをDBに永続化。

みたいなことを行いたいのですが、
A.(2)のようにEJBコンテナの中でスレッドを起動することはできない?
B.(1)(3)のDB永続化はそれぞれ異なるスレッドが行うが、entity managerはスレッドセーフでないので無理?
というようなことがWebや書籍に書いてありました。

上記のような処理を実現するためには、通常どのような実装を行うのか、というのが知りたい内容になります。
(JavaEEの学習始めたてなので、何か大きな勘違いをしているのでしょうか…?)

●質問者: イニD
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:dB EJB EJB3.0 JavaEE Web
○ 状態 :キャンセル
└ 回答数 : 1/2件

▽最新の回答へ

1 ● yamaneroom

ワーカースレッドを作成することは可能だが、それとクライアントへのレスポンスは全く別問題。


また、ワーカースレッドは一般的にバックグラウンドジョブになるので、そこで重たい処理をさせるのは感心しない。

◎質問者からの返答

> ワーカースレッドを作成することは可能だが、それとクライアントへのレスポンスは全く別問題。

(1)(2)(3)を行わずにそのまま重たい処理を実行させるとその間クライアントへ応答が戻らないというイメージを持ってしまっていたのですが、そうではない、ということでしょうか。

> また、ワーカースレッドは一般的にバックグラウンドジョブになるので、そこで重たい処理をさせるのは感心しない。

ここでいうバックグラウンドジョブ、というのがどういったものを指しているのか理解できていないのですが、私が"ワーカスレッド"という単語で意図したものは、SwingでいうところのSwingWorkerみたいなもので、重たい処理をさせるためのスレッドです。

ちょうどいい例がありました。

http://itpro.nikkeibp.co.jp/article/COLUMN/20070413/268205/

こちらはJavaSEの解説ですが、ちょうどこんな感じで、EJBコンテナのメインスレッドで重い処理を行うとクライアントにレスポンスが返らないままになるのではないかなあ…と。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ