2011-08-10 17 views
1

クライアント/ユーザーがファイルをJVMメモリにアップロードできるWebベースのアプリケーションを開発しました。サーバーサイドのコードは、ファイルを別のサーバーにFTPします。これはすべてローカルのマシン上でうまく動作しますが、テスト環境サーバーでこれを動作させるには問題が発生しています。ApacheのFTPクライアントを使用してFTP転送でサーバーソケットの問題を診断するためのヘルプを探しています

テスト環境サーバーで、コードは正常に接続してリモートWindowsサーバーにログインしますが、ファイル転送中にハングします。空のファイルが宛先サーバー上に作成されますが、バイトは転送されません。最終的にはスレッドを殺したJVMからスタックトレース:

[10/08/11 14:45:24:234 BST] 00000003 ThreadMonitor W WSVR0605W: Thread "WebContainer : 2" (00000033) has been active for 666083 milliseconds and may be hung. There is/are 1 thread(s) in total in the server that may be hung. 
at java.net.PlainSocketImpl.socketAccept(Native Method) 
at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:431) 
at java.net.ServerSocket.implAccept(ServerSocket.java:464) 
at java.net.ServerSocket.accept(ServerSocket.java:432) 
at org.apache.commons.net.ftp.FTPClient._openDataConnection_(FTPClient.java:693) 
at org.apache.commons.net.ftp.FTPClient.__storeFile(FTPClient.java:551) 
at org.apache.commons.net.ftp.FTPClient.storeFile(FTPClient.java:1704) 
... (my own app code stack trace from here on down) 

は、ソケットの問題のように見えますが、誰も私には問題がオンになっているマシン上で把握することができますか?それはテスト環境のJVMですか、それとも宛先のWindowsサーバーですか?テスト環境サーバーを推測しています。そうしないと、ローカルマシンでこの問題が発生していましたか?それがテスト環境サーバー上にある場合は、ポートを開くことの問題ですか(もしあれば、私は何を求めますか)。どんな助力でも大歓迎です。

答えて

2

私はファイアウォールの問題のように聞こえますが、これはFTPクライアントにパッシブモードを使用することで解決できます。アクティブモードでは、FTPサーバーはファイル転送時にFTPクライアントとの接続を開始しようとしますが、ファイアウォール/ WASはそれを好まないかもしれません。

はコモンズftpclientため​​によると、デフォルトのモードはACTIVEであるので、あなたのコードでは、接続した後

ftpclient.enterLocalPassiveMode(); 

を呼び出してみますが、ファイル転送の前に。

+0

私のヒーロー! :)ありがとう、百万、これは本当にトリックをし、おそらく私の日の面倒を保存しました。 –

+0

こんにちは、私はあなたの方法を試みたが、まだ他のエラーが発生します。助けてもらえますか? [link] http://stackoverflow.com/questions/24901224/java-lang-nullpointerexception-at-org-apache-commons-net-ftp-ftpclient-storefile –