2017-11-14 12 views
0

Apache Camel FileコンポーネントがWindows7で正常に動作しません。Linuxでは問題なく動作します。ファイルコンポーネント(Apache camel)delete = trueパラメータがウィンドウで機能しない

私の要件:ファイル処理後

、ファイルがディレクトリから削除する必要があります。 Windowsでは、.camelLockのため、ファイルが正しく削除されません。

複数の試行のあと、Apache Camelだけがディレクトリからファイルを削除できます。 attemtがディレクトリからファイルを削除できなかった場合は、その例外がスローされます。

ディレクトリにファイルしかない場合は問題なく動作しますが、複数のファイルがある場合は例外がスローされます。

アプリケーション環境:

私は、TomcatサーバーでApacheのラクダのアプリケーションを導入しました。

Apacheのキャメルバージョン:2.17.1

Apacheのキャメルルート:私は受け付けておりますのWindowsでは

<from uri="file:///var/opt/irs/message?delete=true" /> 
<to uri="direct:file.storage.original" /> 

次のエラー:

enter image description here

1|2017-11-14 17:56:34,828|11-01-41|default|WARN
|yes||o.a.c.c.f.GenericFileOnCompletion|file.analysis.input|Error during commit. Exchange[ID-51741-1510678404569-9-22]. Caused by: [org.apache.camel.component.file.GenericFileOperationFailedException - Cannot delete file: GenericFile[C:\var\opt\irs\message\661.zip]] org.apache.camel.component.file.GenericFileOperationFailedException: Cannot delete file: GenericFile[C:\var\opt\irs\message\661.zip] at org.apache.camel.component.file.strategy.GenericFileDeleteProcessStrategy.commit(GenericFileDeleteProcessStrategy.java:89) at org.apache.camel.component.file.GenericFileOnCompletion.processStrategyCommit(GenericFileOnCompletion.java:127)

の同様の問題: Camel 2.15 file locksCamel 2.14.2 not deleting files on Windows、この場合、deleting moving files

+2

Camel(Java JVMなど)がファイルを削除できないように、そのファイルをWindowsでロックするプロセスがあります。だから、ファイルをロックしている可能性のあるWindowsのボックスを見てください。あるいは、あなたが何かファイル入力を閉じるのを忘れたところで、ファイルがロックされているような直接ルート(何も見えません)で何かをします。だからあなたのコードをダブルチェックしてください。 –

+0

私は、この問題はファイルコンポーネントでのみ直面しています。私はWindowsでFTPを使ってうまく動作しようとしました。 –

+0

ファイルを解凍していますか?とにかくZipを開くと、zipファイルがロックされます。 – Namphibian

答えて

0

は、私は、ファイル入力ストリームを閉じるのを忘れていました。だからこそ私はWindowsで問題を抱えていました。

FileComponentにInputStreamを不必要に使用しています。私はそれを削除し、すべての作業ファイル。

InputStream input = CamelContextHelper.convertTo(context, InputStream.class, body); 

誰もが同じ問題を抱えている場合は、単に適切にファイルのInputStreamを閉じたり、あなたのコードをクロスチェックして、他の適切な代替ソリューションと交換してみてください。

代替ソリューション:場合

、あなたのコードで開いたストリームが見つからない場合は、Apacheのラクダのルートへのパラメータの下に適用されます。パフォーマンスは良いでしょう。

readLockCheckInterval=1&amp;readLockTimeout=3 

私のケースでは、パフォーマンスはWindowsの方がはるかに優れています。

関連する問題