JSFを使用してTFTPサーバーにルータの設定を送信しようとしています。 Mainクラスでコードをテストすると動作しますが、このコードをボタンアクションに統合しようとすると動作しません。 これは、これが出力されJSchでSSHで実行されるコマンドに入力/サブコマンドを提供するJSFを使用する
public Void SendConfigViaTftp(Router r) {
int port=22;
String name = r.getRouterName();
String ip=r.getRouterIP();
String password =r.getRouterPassword();
try
{
JSch jsch = new JSch();
Session session = jsch.getSession(name, ip, port);
session.setPassword(password);
session.setConfig("StrictHostKeyChecking", "no");
System.out.println("Establishing Connection...");
session.connect();
System.out.println("Connection established.");
ChannelExec channelExec = (ChannelExec)session.openChannel("exec");
InputStream in = channelExec.getInputStream();
channelExec.setCommand("enable");
channelExec.setCommand("copy run tftp:");
OutputStream out = channelExec.getOutputStream();
channelExec.connect();
System.out.println("Copy.");
out.write(("192.168.18.1 \n").getBytes());
System.out.println("IP.");
out.write(name.getBytes());
System.out.println("name.");
out.flush();
out.close();
session.disconnect();
return true;
}
catch(Exception e){System.err.print(e);
}
}
私のセッションBeanのコードです:
11:53:INFOは、[標準出力](デフォルトタスク-11)接続の確立25279 ...
11時53分:25,516情報[stdout](デフォルトタスク-11)接続が確立されました。
11:53:25,578 INFO [標準出力](デフォルトタスク11)コピー。
11:53:25,578 INFO [標準出力](デフォルトタスク-11)IP。
11:53:25,578 INFO [標準出力](デフォルトタスク-11)の名前です。
これは、私は、問題は私のJSFアプリケーションがOutputStreamのに問題があることを確信している私のボタン
<p:commandButton value="Sauvegarder(TFTP)" action="#{ListBean.sauvegardeTFTP(rtr)}" update=":routeurs" ><f:ajax disabled="true"/></p:commandButton>
のコードです。誰かが私を助けることができますか?
それは動作します私はメインを含むシンプルなJavaクラスでテストしますが、ボタンアクションでそれを統合すると、説明のように、out.print()を含む行はコメントされているようです。システムはこれらの行を実行せず、エラーを表示しません。 – user6624302
しかしそれはちょうど偶然のことです。接続がどれだけ早く終了するかによって異なります。シンプルな競争状態。私の提案を少なくとも試してみましたか? –
私は試しましたが、ここで私は出力の内容を読むことに気をつけませんでした。コマンドを挿入するだけです。 while((line = reader.readLine())!= null)を使用すると、出力の内容を修復することができます。ここでの問題は、Jsfの出力ストリームは私のためには機能しません。 – user6624302