質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
JSF

JSF (JavaServer Faces)とは、JavaベースのWebアプリケーションフレームワークの一つです。

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

Q&A

解決済

1回答

2569閲覧

処理をバックで動かす方法

takashiro7300

総合スコア12

JSF

JSF (JavaServer Faces)とは、JavaベースのWebアプリケーションフレームワークの一つです。

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

0グッド

0クリップ

投稿2017/05/01 00:56

【前提】
JSF2.2(+PrimeFaces)で画面を作っています。

【やりたいこと】
csvファイルを選択し、実行ボタンを押すと、そのcsv内容をDBに登録します。
次々と選択しては実行、をされる事を想定し、
画面とバックで処理を切り離したいです。(非同期処理というのでしょうか)

このDB登録処理に、そこそこの時間がかかってしまう為、
実行押下後、画面ではすぐに処理が終わったようにする。
(裏ではDB登録処理が動いている状態)
画面では、次のcsvファイルを選択して、実行押下することで、
そのcsvファイルのDB登録処理も動きだす。
(上記のDB登録処理と並列して動いて欲しい)

【質問】
こういった処理を実現する場合、どのような手法を取るのが良いでしょうか?
処理方法や、それぞれのメリット等も併せて頂けると助かります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

実行押下されると、新しいスレッドを作成して処理(CSV読み込みとDB登録)をそのスレッドに投げる。
元のスレッドではレスポンスを返して、画面で受付完了を表示する。
ということになると思います。

こうするとユーザーは画面で待たされずにすみますが、
その代わりに、完了したのかどうかを知ることができません。
確実に全件正常終了するのであれば特に問題ないかもしれませんが、
エラーになったレコードがある場合は、再実行などの処置が必要だと思いますので、
非同期で実行する場合は、その辺りをユーザーにどうやって知らせるか?
ということを考える必要があります。

処理が完了すると完了通知のメールを投げたり、
処理状況が分かる画面を作成したりなどが考えられます。

無尽蔵にスレッドを作成し続けると、メモリの枯渇につながりますので、
並列実行する数も決める必要があります。
java.util.concurrent.ExecutorService を使えば、スレッド数の管理なども簡単にできます。

ちなみに、一括DB登録ではあまり問題にならないかもしれませんが、
一括更新も提供する場合はデッドロックがけっこうすぐに起きそうですので、
ロックするなどの工夫がいると思います。

投稿2017/05/01 01:35

root_jp

総合スコア4666

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takashiro7300

2017/05/01 03:30

ありがとうございます。 自分の方でも調べてところ、 EJBならば、@Asynchronousというアノテーションを付けることで、 そのjavaソース部分は非同期になってくれるっぽい事を見つけましたが、 JSFでは使えないそうで、他の方法を模索していました。 実行後の完了通知(正常終了or異常終了)だったり、 同時実行時の排他制御については、別途仕組みを設けますが、 今回は、非同期の実行について焦点を絞って質問させて頂きました。 java.util.concurrent.ExecutorServiceのやり方で進めてみます。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問