SSHJ と複数のスレッドについて質問があります。SSHJ SSHExec クラスを使用してリモート サーバー上でコマンドを実行するために SSHJ を使用するクラスがあり、それは Threads の拡張です。リモート コマンドの中には実行に時間がかかるものがあるため、これを行っています。また、相互に影響しないため、それらを並行して実行したいと考えています。
私のセットアップでは、SSHコマンドを実行するプログラムであるclass_Bの複数のバージョンを起動できるclass_Aがあります。class_B の 1 つのインスタンスのみを開始するように class_A を構成すると、すべて正常に動作します。しかし、class_B の複数のインスタンスを開始するように class_A を構成すると、次のエラーで失敗します。
Aug 2, 2012 12:08:44 PM backup.SSHExec run
SEVERE: null
net.schmizz.sshj.transport.TransportException: Unexpected: SSH_MSG_UNIMPLEMENTED
at net.schmizz.sshj.transport.TransportException$1.chain(TransportException.java:33)
at net.schmizz.sshj.transport.TransportException$1.chain(TransportException.java:27)
at net.schmizz.concurrent.Promise.deliverError(Promise.java:95)
at net.schmizz.concurrent.Event.deliverError(Event.java:72)
at net.schmizz.concurrent.ErrorDeliveryUtil.alertEvents(ErrorDeliveryUtil.java:34)
at net.schmizz.sshj.transport.TransportImpl.die(TransportImpl.java:576)
at net.schmizz.sshj.transport.Reader.run(Reader.java:79)
Caused by: net.schmizz.sshj.common.SSHException: [PROTOCOL_ERROR] Unexpected: SSH_MSG_UNIMPLEMENTED
at net.schmizz.sshj.AbstractService.notifyUnimplemented(AbstractService.java:66)
at net.schmizz.sshj.transport.TransportImpl.gotUnimplemented(TransportImpl.java:555)
at net.schmizz.sshj.transport.TransportImpl.handle(TransportImpl.java:490)
at net.schmizz.sshj.transport.Decoder.decode(Decoder.java:127)
at net.schmizz.sshj.transport.Decoder.received(Decoder.java:195)
at net.schmizz.sshj.transport.Reader.run(Reader.java:72)
Exception in thread "Thread-18" java.lang.NullPointerException
at java.io.Reader.<init>(Reader.java:61)
at java.io.InputStreamReader.<init>(InputStreamReader.java:55)
at backup.StreamReader.run(StreamReader.java:86)
Exception in thread "Thread-17" java.lang.NullPointerException
at java.io.Reader.<init>(Reader.java:61)
at java.io.InputStreamReader.<init>(InputStreamReader.java:55)
at backup.StreamReader.run(StreamReader.java:86)
Aug 2, 2012 12:08:44 PM backup.SSHExec run
SEVERE: null
net.schmizz.sshj.transport.TransportException: socket closed
at net.schmizz.sshj.transport.TransportImpl.init(TransportImpl.java:164)
at net.schmizz.sshj.SSHClient.onConnect(SSHClient.java:671)
at net.schmizz.sshj.SocketClient.connect(SocketClient.java:71)
at net.schmizz.sshj.SocketClient.connect(SocketClient.java:77)
at net.schmizz.sshj.SocketClient.connect(SocketClient.java:103)
at backup.SSHExec.run(SSHExec.java:73)
at backup.SSHExec.exec(SSHExec.java:42)
at backup.BackupExec2.copyPrevBackup(BackupExec2.java:335)
at backup.BackupExec2.run(BackupExec2.java:164)
Caused by: java.net.SocketException: socket closed
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at java.net.SocketInputStream.read(SocketInputStream.java:182)
at net.schmizz.sshj.transport.TransportImpl.init(TransportImpl.java:158)
... 8 more
Exception in thread "Thread-23" java.lang.NullPointerException
at java.io.Reader.<init>(Reader.java:61)
at java.io.InputStreamReader.<init>(InputStreamReader.java:55)
at backup.StreamReader.run(StreamReader.java:86)
Exception in thread "Thread-24" java.lang.NullPointerException
at java.io.Reader.<init>(Reader.java:61)
at java.io.InputStreamReader.<init>(InputStreamReader.java:55)
at backup.StreamReader.run(StreamReader.java:86)
スレッドで複数の SSHExec セッションを開始する際に問題はありますか? そうでない場合、何が間違っている可能性がありますか?