2011-06-24 14 views
0

私はGui ApplicationをWindowsで実行していると書いてあります。遠隔のUNIXマシンに接続してAPIなどのアクションを実行したい場合は、マシンのログファイルを見て、リモートマシン上で実行したい最後のログファイルまたはその他のAPI。Javaを使用した2台のマシン間の通信

リモートマシンでは、アプリケーションサーバーがあります。そこにインストールされているJavaがあります。

リモートマシン上でリモートAPIを実行するためにJavaを使用したいと思います。

アドバイスは何ですか、私はウェブサービスを使用することができますが、助言してください。

ありがとうございます。

答えて

1

あなたが話しているアクションをJavaが実行できる場合は、Socketsを使用してUNIX-Machine(TCP/IP経由)と通信します。

あなたのWindows-PCはUnix-PCにコマンドを送信するクライアントです。

+0

+1を:特に行うには、あなたの良い理由がない限り、あなたが簡単にログインして、受け取っ/送信されているものを読むことができますので、私はテキストベースのプロトコルを使用します。 –

0

SOAPサービスを選択した場合、Webサービスは少し重いオプションになります。クライアントとサーバーが常にJavaに問題がなければ、RMIは、通常のメソッド呼び出しメカニズムを使用する2つの異なるJVM間の通信であるため、この問題の最も簡単な解決策です。 RMI仕様を歓迎します)。

0

リモートマシンのログファイルを分析する場合は、常にApache Commons sftpを使用してプログラムによってリモートログファイルのコピーをPCにFTPで送信できます。

ログファイルを回転可能に構成するか、特定のサイズに達するたびに回転するように設定すると、同じ情報を何度も繰り返し読み込まれることはありません。

0

remoting optionsのスプリングフレームワークは、すべてセットアップが非常に簡単です。それらのクラスを使用して、RMIやJMSのような標準の設定を簡単にしたり、SpringのHTTP呼び出し側やHessianなどの軽量Webサービスプロトコルを使用することができます。

0

Client Java AppからリモートホストにGanymed SSH-2 for Javaを使用してsshを実行し、コマンドを実行できます。リモートサーバー上で追加コンポーネントを実行する必要はありません。リモートホストにログインするためのパスワードベースの認証またはキーベースの認証を行うことができます。リモートUNIXホスト上で実行されているアプリケーションの管理(ログファイルの開始/停止/ grepなど)に成功しました。パッケージに含まれているStreamGobblerクラスを使用して、リモートコマンドの出力をキャプチャできます。 1回のリモート呼び出しで複数のコマンドをセミコロンで区切って渡すことができます。

基本的な例は、パッケージに含ま:

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 

import ch.ethz.ssh2.Connection; 
import ch.ethz.ssh2.Session; 
import ch.ethz.ssh2.StreamGobbler; 

public class Basic 
{ 
    public static void main(String[] args) 
    { 
     String hostname = "127.0.0.1"; 
     String username = "joe"; 
     String password = "joespass"; 

     try 
     { 
      /* Create a connection instance */ 

      Connection conn = new Connection(hostname); 

      /* Now connect */ 

      conn.connect(); 

      /* Authenticate. 
      * If you get an IOException saying something like 
      * "Authentication method password not supported by the server at this stage." 
      * then please check the FAQ. 
      */ 

      boolean isAuthenticated = conn.authenticateWithPassword(username, password); 

      if (isAuthenticated == false) 
       throw new IOException("Authentication failed."); 

      /* Create a session */ 

      Session sess = conn.openSession(); 

      sess.execCommand("uname -a && date && uptime && who"); 

      System.out.println("Here is some information about the remote host:"); 

      /* 
      * This basic example does not handle stderr, which is sometimes dangerous 
      * (please read the FAQ). 
      */ 

      InputStream stdout = new StreamGobbler(sess.getStdout()); 

      BufferedReader br = new BufferedReader(new InputStreamReader(stdout)); 

      while (true) 
      { 
       String line = br.readLine(); 
       if (line == null) 
        break; 
       System.out.println(line); 
      } 

      /* Show exit status, if available (otherwise "null") */ 

      System.out.println("ExitCode: " + sess.getExitStatus()); 

      /* Close this session */ 

      sess.close(); 

      /* Close the connection */ 

      conn.close(); 

     } 
     catch (IOException e) 
     { 
      e.printStackTrace(System.err); 
      System.exit(2); 
     } 
    } 
} 
+0

ご回答ありがとうございました 現在、私はGanymed SSHを使用しています。この問題は、いつもunixコマンドとして要求を送信する必要があります。 sess.execCommand( "uname -a && date && uptime && who ") 、もし私がJavaコードで重いロジックを実行していて、それをJavaのスレッドで使用したいのであれば – john

関連する問題