2015年1月25日日曜日

[Java][batch]Javaプログラムをバッチファイルから実行する(インターフェース及び例外クラス)

別の記事で掲載したAppMainから呼び出す、共通インターフェースの定義について記述する。
バッチプログラム実行時には、「String[] args」という文字列の配列を可変引数として渡すことができる。
そこから呼び出される機能も、取りうる引数は全て 「String[] args」になる。そのため、共通インターフェースであるCommandInterface.javaも同じ引数とした。

ただしメソッド名の横に「throws」を書かなくても投げられる致命的エラー(いわゆるRuntimeException)以外の例外は、アプリケーションで捕捉して処理したい。
呼び出す個々の機能で、例えばIOExceptionが起きた時、throws Exceptionで何でも全部例外を受け取る側の処理に任せてしまっては、メンテナンスに著しい支障をきたす。
そこで共通インターフェースはAppExceptionという拡張例外をスローする仕様とし、原則として個々のクラス内部で起きるエラーは個々のクラスが処理し、上位にスローすべき例外は拡張例外のみとする。

 <以下、CommandInterface.javaのソースコード>
package cmd;

import exception.AppException;

/**
 * コマンドインターフェース
 */
public interface CommandInterface {

    /**
     * コマンドラインインターフェースです。 <br>
     * 本クラスの機能をバッチから呼び出す場合は、このメソッドを実行する。
     *
     * @param args
     *            コマンドライン引数
     * @throws Exception
     */
    public void doMain(String[] args) throws AppException;
}

<以下、アプリケーション例外クラス>
package exception;

/**
 * アプリケーション例外
 */
public class AppException extends Exception {

    /** シリアルバージョン */
    private static final long serialVersionUID = 1L;

    /**
     * エラーメッセージを渡すタイプのコンストラクタです。
     *
     * @param message
     *            エラーメッセージ
     */
    public AppException(String message) {

        // スーパークラスの処理を実行する
        super(message);
    }

    /**
     * 例外クラスを渡すタイプのコンストラクタです。
     *
     * @param cause
     *            原因
     */
    public AppException(Throwable cause) {

        // スーパークラスの処理を実行する
        super(cause);
    }
}

0 件のコメント:

コメントを投稿