6

Wicket + Hibernate + Spring Web アプリケーションをセットアップしました。これには、いくつかのデータを収集し (いくつかのファイルを生成して返す)、これをデータベースに保存し、いくつかの画像を作成し、これらすべてを Web ページに表示します。

これは短時間の実行ではすべて正常に機能しますが、データの収集 (リモートでの数の計算を含む) に時間がかかりすぎて (20 分以上)、タイムアウトになることがあります。2 つのアプローチを使用してこれを解決しようとしましたが、どちらもいくつかの問題を示しています。

最初のアプローチは、AjaxLazyLoadPanelを使用し、getLazyLoadComponent 内ですべてを行うことでした。これは短時間の実行では問題なく機能しましたが、20 分以上の実行では、タイムアウトのために LazyLoadComponents がロードされませんでした (矛盾した表現です)。

2 番目のアプローチでは、期間が 10 秒に設定されたAjaxSelfUpdatingTimerBehaviorが追加された中間 Fragment を作成し、 数値計算で作成されたファイルをポーリングしました。これにより、タスクがバックグラウンドで問題なく実行されるように見えますが、返されたデータをデータベースに保存する必要がある場合は失敗します。Open Session in View パターンを使用していますが、20 分後にデータを保存しようとすると失敗するのではないでしょうか?? (解決策はこれを解決することにあります..)。

上記の問題により、これらの長時間実行されるタスクを処理するための代替アプローチを調べているところ、次のようになりました。

これらのいずれかが、タスクの実行とその後のデータベースへのデータの保存の両方で発生しているタイムアウトの問題を解決するのに適しているかどうか、または誰かがこれに役立つ他のソリューションを持っているかどうか疑問に思っています状況。

結局うまくいかないかもしれない何かを実装するために別の日を費やす前に、新しいアプローチが実行可能かどうかを知りたいです。

敬具、
ティム

4

1 に答える 1

3

AjaxSelfUpdatingTimerBehavior が添付された Panel を使用することに成功したことはわかっています。タスクと結果の部分はビュー ロジックから分離されていますが、作成したサービスを介してビューからアクセスできるようになっています。使用したサービス実装は、個々のタスクを実行するために TheadPool または ExecutorService を開始する責任があります。このサービスは、実行中の特定のジョブ/通話の進行状況/ステータスを監視する方法を提供できます。完了すると、ビューでデータを使用できるようになります。WebSession の外部で HibernateSession を作成するには、SessionFactory をサービス実装 (または挿入された DAO) に挿入するだけで十分です。

于 2010-02-22T17:48:39.087 に答える