2011-09-15 8 views
0

コンテキスト:MysqldResource javaクラス(Connector/MXJ lib)でデプロイされたMySQLサーバ。何らかの理由でmysqlサーバを使用しているアプリケーションがクラッシュし、MySQLをシャットダウンすることなく終了する可能性があります。MysqldResourceを使用してMySQLをオフにするか、killする

次のように行わのMySQLの設定と実行:

mr = new MysqldResource(runtimeDir, dataDir); 
mr.start("My MySQL", options); 

目標:MySQLは(MysqldResource.pidが存在しない、またはpidが存在しない)が実行されていないことを確認するためにコードを書きます。 MySQLの場合、私はそれを殺したいと思う。

注:mysqldを起動しません!

は最後に、

がどのように私はMysqldResourceインタフェースを使用して目標をarchieveん、それも可能ですか?それとも手動で.pidファイルを使って試してみるべきですか?特に

は私のために正しく次のコードは動作します:プログラムがクラッシュして最初にMySQLを起動せずに後

mr = new MysqldResource(runtimeDir, dataDir); 
mr.shutdown(); 

は別のセッションで後にその実行を想定しましたか?言い換えれば、このコードは既存のMySQLインスタンスを強制終了しますか?

答えて

0

次のコードは動作します:それは、それは別のVM上または別のMRのインスタンスで実行している場合でも動作します

mr = new MysqldResource(runtimeDir, dataDir); 
mr.shutdown(); 

。 MySQLが実行されている展開されている場合、以下の方法を確認するために使用することができます。

mr.isRunning(); 

証明するために、そのシャットダウンがまたシャットダウン・コードをチェックし、新しく作成されたMRインスタンス上で呼び出された場合でも動作します - それは、pidファイルは、()の存在を確認するために使用していますプロセスの:

/** 
    * Kills the MySQL process. 
    */ 
    public synchronized void shutdown() { 
     boolean haveShell = (getShell() != null); 
     if (!pidFile().exists() && !haveShell) { 
      printMessage("Mysqld not running. No file: " + pidFile()); 
      return; 
     } 
     printMessage("stopping mysqld (process: " + pid() + ")"); 

     issueNormalKill(); 

     if (processRunning()) { 
      issueForceKill(); 
     } 

     if (shellRunning()) { 
      destroyShell(); 
     } 
     setShell(null); 

     if (processRunning()) { 
      printWarning("Process " + pid + "still running; not deleting " 
        + pidFile()); 
     } else { 
      threads.pause(150); 
      System.gc(); 
      threads.pause(150); 
      pidFile().deleteOnExit(); 
      pidFile().delete(); 
      pidFile = null; 
      pid = null; 
     } 

     setReadyForConnection(false); 

     printMessage("clearing options"); 
     options.clear(); 
     out.flush(); 

     printMessage("shutdown complete"); 
    } 
関連する問題