プロジェクトで実行時間の長いダウンロード プロセスがあり、20 分近くかかります。このファイルを FtpClient.retrieveFile() 関数でダウンロードします。このダウンロード プロセスは、DownloadVeDeploy.jar という名前の別の jar ファイルを介して行われます。
私の場合、ダウンロード プロセスが開始され、10 分近く後に 2 回目のダウンロードが開始されます。このような私のダウンロードの実装;
for (FTPFile file : ftpFiles) {
if (file.isFile()) {
output = new BufferedOutputStream(
new FileOutputStream(downloadfolder + "/"
+ file.getName()));
conn.retrieveFile(
ftpversion + "/" + file.getName(), output);
// Writing into target folder for build.xml
output.close();
System.out.println(file.getName()
+ " isimli dosya indirildi.");
}
}
また、最初のリクエストがすでに実行されている間に2番目のリクエストを通過させないためのフィルターを作成しました。コードは次のとおりです。
private IslemBaslangici() {
}
public static void yeniIslem(String versiyonNo) {
IslemBaslangici islemBaslangic = new IslemBaslangici();
islemBaslangic.versiyonNo = versiyonNo;
islemler.add(islemBaslangic);
sonrakiIslem();
}
private static void sonrakiIslem() {
IslemBaslangici islemBaslangici = null;
if (islemler.size() > 0) {
islemBaslangici = islemler.get(0);
if (!islemBaslangici.calisiyor) {
islemBaslangici.baslat(islemler.get(0));
islemler.remove(islemBaslangici);
sonrakiIslem();
}
}
}
このコード スニペットは、一度に 1 つのプロセスのみを実行させ、他のリクエストをキューに追加します。ここに私の質問があります。ダウンロード プロセスが繰り返されるのはなぜですか? クライアント側からの複数のリクエストに対するフィルターがあるため、クライアント側からではなく、ダウンロードプロセスを1回だけ呼び出します。
追加情報として、私のプロジェクトは Glassfish 3.1.2 で実行されます。