外部コマンドの実行
同じWindowsバッチに異なる引数を渡して何度も実行したかったのだが、毎回引数を設定するのが煩わしかったので、どうにかして引数を自動で設定できないかと模索してたら、javaで外部コマンドを実行できるとのこと!
早速、簡単な外部コマンドを実行するプログラムを作ってみた。
実行環境
- jdk1.5.0_15
- Windows XP Professional SP2
サンプル
以下のプロセスを実行したい。
cmd.exe /c date /T*1
サンプルコード
import java.io.BufferedReader; import java.io.InputStreamReader; /** * * @author hmeguro * */ public class ExecCmd { /** * @param args */ public static void main(String[] args) { try { // 日付出力コマンド ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/c", "date", "/T"); // プロセス開始 Process process = pb.start(); // プロセスが終了するまで待機 process.waitFor(); // 結果を標準出力に書き出す System.out.println("↓ プロセス実行結果"); System.out.println("=================================================================="); BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream())); String str; while ((str = in.readLine()) != null) { System.out.println(str); } System.out.println("=================================================================="); // プロセスのexit値を取得・表示 System.out.println("プロセスの終了値 : " + process.exitValue()); // 終了処理作業 process.destroy(); in.close(); } catch (Exception ex) { ex.printStackTrace(); } } }
実行結果
↓ プロセス実行結果 ================================================================== 2009/06/26 ================================================================== プロセスの終了値 : 0
うまく出力できた。
引数を設定してバッチ処理を行う場合は
ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/c", "date", "/T");
の部分を
ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/c", "start", "/wait", "<バッチファイル名>", "<引数>");
にすればいけるはず!
ロックの解除方法
あるアプリのデバッグ中に、間違ってAPサーバを停止してしまい、ロックされたままになってしまった。
その時に調べたロックの解除方法。
ロック原因のセッション抽出
SELECT SID, SERIAL# FROM V$SESSION WHERE SID IN (SELECT SID FROM V$LOCK WHERE TYPE IN ('TM','TX') );
つまり、表ロック、行ロックを保持するセッションIDを含むセッションIDとセッション・シリアル番号を抽出しています。
ロックの解除
ALTER SYSTEM KILL SESSION '<SID>, <SERIAL#>';
※SID、SERIAL#には、さきほど抽出したセッション情報を入力します。
注意事項
DBA権限がないと、上記のクエリは実行できないです。
最後に
APサーバが停止時に、自動的にロールバックするようにすればいいんじゃね?
今度、作成してみよう!!
Hello World!
最近、よく聞くscalaという言語を使ってみた。
以下のサイトより、ダウンロード
Download | The Scala Programming Language
Hello Worldをやってみる。
object HelloWorld { def main(args: Array[String]) = { println("Hello World!"); } }