質問
FTP[更新]処理で初回「入出力エラー」が発生しリトライさせると、FTPアダプタが出力するwarnエラーのメッセージが初回と2回目以降で異なります。原因と対策を教えてください。
回答
1回目と2回目以降でエラー発生状況が異なるため、出力メッセージが異なっている可能性があります。
考えられる各エラーの内容は以下のとおりです。
- 1回目のエラー:`java.net.ConnectException: Connection refused (Connection refused)`(ソケット通信が拒否された)
- 2回目以降のエラー:`com.enterprisedt.net.ftp.FTPException: Malformed PASV reply: "/xxxxx/xxxxx/xxxxx" is current directory.`(PASVコマンドに対するサーバーからの返答が想定外の不正な値)
1回目のエラー時のソケット通信拒否をサーバー側が検知できておらず、HULFT Square側のFTPコネクターからの2回目以降のアクセスが1回目のコネクションプールの継続として受領されてしまい、コネクター内部処理で想定外の動作が発生していたと推察されます。
HULFT Squareのコネクションプールは同一トランザクション内で再利用される仕様です。そのため、同一トランザクション内で同一コネクションを利用してリトライ処理を行った場合、前回の処理のコネクションプールを再利用して接続が行われます。
対策として、リトライ処理判定を行っている繰り返し処理内のプロセスフローをトランザクションコンポーネントで囲むことで、事象の解消が期待できます。トランザクションコンポーネントを利用することで、リトライごとにトランザクションが再開始されコネクションプールが新規作成されます。これによりサーバー側へ都度新規コネクションとしてアクセスされ、セッションの競合動作を回避できます。
補足
- トランザクションコンポーネントの詳細については以下のマニュアルサイトをご参照ください。
コメント
0件のコメント
記事コメントは受け付けていません。