2012-02-13 5 views
2

WebアプリケーションがTomcat 7にデプロイされていて、トランザクションの1つがアプリケーションにテキストファイルをロードしているときに、アプリケーションは1行ずつ読み込み、すべてのレコードをデータベースに挿入します。Tomcatで要求を取り消す

私は、特に大きなファイルをアップロードしている場合にトランザクションをキャンセルするかどうかをユーザーに決定させるために、キャンセルボタンをページに配置したいと考えています。私はキャンセルボタンとして機能する別のページに行くリンクを置くことを考えている。これは使えますか?

クライアントが15MBのファイルをアップロードした場合、処理が約10分かかるとスレッドは続行されますか?キャンセルボタンとして提供したリンクをクリックしてキャンセルすることを決定しましたか?

答えて

1

ファイルがサーバーにアップロードされたら、スレッドを開始して処理を行い、ハッシュテーブルなどのどこかに参照を保存して一意のIDを付けます。その後、キャンセルボタンを使用してページをユーザーに戻し、ページ内のスレッドへの参照を保持するために以前に使用したIDを保管します。

ユーザーがキャンセルをクリックすると、ハッシュテーブルに戻り、IDを持つスレッドを取得し、メッセージを送信してインポートを停止します。

もちろん、データのインポートを停止するメソッドでは、現在のデータベーストランザクションを考慮して、データベースを無効な状態にしないでください。

+0

私は提供するリンクをクリックするだけでスレッドはキャンセルされません。 – JZares

+0

@Jf Beaulacが暗示していたことは、サーブレット/エンドポイントにパラメータとしてIDを取る追加のメソッド(キャンセルメソッド)を書くことだったと思います。ユーザーがIDを使用してそのメソッドを呼び出すと、トランザクションが取り消されます。 – blong

0

サーバーに送信されているリクエストを停止することはできないと思います。アップロードをクリックすると、HTTPリクエストが作成され、プロセスが開始され、後で「キャンセル/リンクする」が選択された場合は、HTTP要求が異なり、HTTPはステートレスであるため、止まる。予想どおり、暗黙的には可能ではありません。しかし、これを行うためにできることがあるかもしれませんが、私は今は気づいていません。しかし、 "esc"キーを押すと、サーバーに送信された要求が終了します。これが唯一の解決策は、UI上で、その後今まであるので、そして、あなたはこのJavaScriptコードを書くことができます:IE上では動作しません

$('.your_link').click(function(){ 
     window.stop(); 
    }); 

window.stopを()。 IEの場合:

document.execCommand("Stop"); 
関連する問題