my_util
クラス FacilityAgent

java.lang.Object
  拡張my_util.FacilityAgent
すべての実装インタフェース:
java.lang.Runnable

public abstract class FacilityAgent
extends java.lang.Object
implements java.lang.Runnable

アプリケーションを構成する機能を表現する Facility クラスにより制御される機能処理を実装する ための抽象クラスです。このクラスのインスタンスは、Facility に より作成されたスレッド上で実行されます。

他の Facility に送信した要求コマンドの応答を受信するために 応答キューを持ちます。

機能処理を実装するには、このクラスを拡張し以下の 抽象メソッドを定義する必要があります。

init() は、機能が活性化された場合に、初期化処理を行う ために呼び出されます。

process() は、この機能の要求キューから FacilityComannd が 受信された場合に呼び出されます。

suspend() は、機能の並行度が下がった場合に、この FacilityAgent のスレッドを中断するために呼び出されます。 それ以降、 resume() が呼び出されるか terminate() が呼び出される まで中断状態は継続します。

resume() は、機能の並行度が上がった場合に中断状態から 復帰するために呼び出されます。

terminate() は、機能が非活性にされた場合に、終了処理を 行うために呼び出されます。

これらのメソッドが異常終了した場合、ただちにこの FacilityAgent の スレッドは停止されます。また、割込み例外 InterruptedException あるいは process() がタイムアウト例外 TimeoutException を throw した場合にも、この FacilityAgent のスレッドはただちに停止します。 その際、ログ出力先に FATAL ログ・レベルのメッセージを出力します。

関連項目:
Facility, FacilityAgentControlBlock, Message, Log, Loggable

フィールドの概要
protected static int EXCEPTION_IN_GET_INTERRUPT_CAUSE
          内部エラー: 割込み原因の取得中に例外が発生した場合
protected static int EXCEPTION_IN_GET_NOW_CONCURRENCY
          内部エラー: 機能の並行度の取得中に例外が発生した場合
protected static int EXCEPTION_IN_GET_REQUEST
          内部エラー: 要求取得フェーズで例外が発生した場合
protected static int EXCEPTION_IN_INIT_PHASE
          内部エラー: 初期化フェーズで例外が発生した場合
protected static int EXCEPTION_IN_PROCESS
          内部エラー: 要求処理フェーズで例外が発生した場合
protected static int EXCEPTION_IN_RESUME
          内部エラー: 復帰フェーズで例外が発生した場合
protected static int EXCEPTION_IN_SUSPEND
          内部エラー: 中断フェーズで例外が発生した場合
protected static int EXCEPTION_IN_TERMINATE
          内部エラー: 停止フェーズで例外が発生した場合
protected static int EXCEPTION_IN_ZOMBINATE
          内部エラー: 終了フェーズで例外が発生した場合
protected  java.lang.Exception[] fatal_exception
          停止処理の原因となった例外。
protected  int fatal_exception_cnt
          停止原因の例外の数
protected static int GET_REQUEST_RETURNED_NULL
          内部エラー: 要求キューからのコマンド受信が異常終了した場合
protected  int[] halt_cause
          停止処理の原因を示すエラーコード。
protected static int ILLEGAL_STATUS
          内部エラー: 不正な状態でスレッドが実行 (start()) された場合
protected static int INIT_RETURNED_FALSE
          内部エラー: init() が異常終了した場合
protected  FacilityCommand last_command
          最後に受信した要求コマンド
protected static int NORMALEND
          正常終了
protected  Message resq
          他の Facility へ送信した要求コマンドの応答を受け付ける応答キュー
protected static int RESUME_RETURNS_FALSE
          内部エラー: resume() が異常終了した場合
protected static int SUSPEND_RETURNS_FALSE
          内部エラー: suspen() が異常終了した場合
protected static int TERMINATE_RETURNED_FALSE
          内部エラー: terminate() が異常終了した場合
protected static int TIMEOUTED_IN_PROCESS
          内部エラー: 要求処理フェーズでタイムアウト例外が発生した場合
protected  java.lang.Object wait_channel
          最後に入出力を行ったオブジェクト
 
コンストラクタの概要
protected FacilityAgent()
          コンストラクタ
 
メソッドの概要
protected  void create_resq(int resq_len)
          このエージェントが応答を受信するキュー resq を作成する
protected  void destroy_resq()
          このエージェントが応答を受信するキュー resq を破棄する
 FacilityCommand get_responce(java.lang.Object cmd, long timeout)
          この FacilityAgent への応答を受信します。
 java.lang.String getAgname()
          エージェント名称を取得する
 int getAid()
          エージェント ID を取得する
 java.lang.String getFacname()
          機能名称を取得する
abstract  boolean init()
          初期化処理を実装するための抽象メソッドです。
protected  void log(int log_class, int errcode, java.lang.String msg)
          機能のログ・メッセージを出力します。
abstract  int process(FacilityCommand req)
          要求コマンド処理を実装するための抽象メソッドです。
 boolean put_request(java.lang.String to_fac, java.lang.Object buf, long timeout)
          要求コマンドを送信します。
 FacilityCommand request(java.lang.String to_fac, java.lang.Object buf, long timeout)
          要求コマンド FacilityCommand を送信し、その応答を受信します。
 boolean responce(java.lang.Object buf, long timeout)
          要求コマンドで示された応答先のキューに、処理の結果を送信します。
abstract  boolean resume()
          中断状態からの復帰処理を実装するための抽象メソッドです。
 void run()
          FacilityAgent のメインループ
 void setAgname(java.lang.String agname)
          エージェント名称を設定する
 void setAid(int aid)
          エージェント ID を設定する
 void setFacname(java.lang.String facname)
          機能名称を設定する
abstract  boolean suspend()
          中断処理を実装するための抽象メソッドです。
abstract  boolean terminate()
          停止処理を実装するための抽象メソッドです。
protected  boolean timer_cancel(TimerCommand tc)
          TimerUser インタフェースを実装した FacilityAgent が開始した タイマを取り消します。
protected  boolean timer_start(TimerCommand tc)
          TimerUser インタフェースを実装した FacilityAgent が利用する、 タイマを開始します。
 
クラス java.lang.Object から継承したメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

フィールドの詳細

wait_channel

protected java.lang.Object wait_channel
最後に入出力を行ったオブジェクト


last_command

protected FacilityCommand last_command
最後に受信した要求コマンド


NORMALEND

protected static final int NORMALEND
正常終了

関連項目:
定数フィールド値

ILLEGAL_STATUS

protected static final int ILLEGAL_STATUS
内部エラー: 不正な状態でスレッドが実行 (start()) された場合

関連項目:
定数フィールド値

INIT_RETURNED_FALSE

protected static final int INIT_RETURNED_FALSE
内部エラー: init() が異常終了した場合

関連項目:
定数フィールド値

EXCEPTION_IN_INIT_PHASE

protected static final int EXCEPTION_IN_INIT_PHASE
内部エラー: 初期化フェーズで例外が発生した場合

関連項目:
定数フィールド値

EXCEPTION_IN_GET_INTERRUPT_CAUSE

protected static final int EXCEPTION_IN_GET_INTERRUPT_CAUSE
内部エラー: 割込み原因の取得中に例外が発生した場合

関連項目:
定数フィールド値

EXCEPTION_IN_GET_NOW_CONCURRENCY

protected static final int EXCEPTION_IN_GET_NOW_CONCURRENCY
内部エラー: 機能の並行度の取得中に例外が発生した場合

関連項目:
定数フィールド値

SUSPEND_RETURNS_FALSE

protected static final int SUSPEND_RETURNS_FALSE
内部エラー: suspen() が異常終了した場合

関連項目:
定数フィールド値

EXCEPTION_IN_SUSPEND

protected static final int EXCEPTION_IN_SUSPEND
内部エラー: 中断フェーズで例外が発生した場合

関連項目:
定数フィールド値

RESUME_RETURNS_FALSE

protected static final int RESUME_RETURNS_FALSE
内部エラー: resume() が異常終了した場合

関連項目:
定数フィールド値

EXCEPTION_IN_RESUME

protected static final int EXCEPTION_IN_RESUME
内部エラー: 復帰フェーズで例外が発生した場合

関連項目:
定数フィールド値

GET_REQUEST_RETURNED_NULL

protected static final int GET_REQUEST_RETURNED_NULL
内部エラー: 要求キューからのコマンド受信が異常終了した場合

関連項目:
定数フィールド値

EXCEPTION_IN_GET_REQUEST

protected static final int EXCEPTION_IN_GET_REQUEST
内部エラー: 要求取得フェーズで例外が発生した場合

関連項目:
定数フィールド値

TIMEOUTED_IN_PROCESS

protected static final int TIMEOUTED_IN_PROCESS
内部エラー: 要求処理フェーズでタイムアウト例外が発生した場合

関連項目:
定数フィールド値

EXCEPTION_IN_PROCESS

protected static final int EXCEPTION_IN_PROCESS
内部エラー: 要求処理フェーズで例外が発生した場合

関連項目:
定数フィールド値

TERMINATE_RETURNED_FALSE

protected static final int TERMINATE_RETURNED_FALSE
内部エラー: terminate() が異常終了した場合

関連項目:
定数フィールド値

EXCEPTION_IN_TERMINATE

protected static final int EXCEPTION_IN_TERMINATE
内部エラー: 停止フェーズで例外が発生した場合

関連項目:
定数フィールド値

EXCEPTION_IN_ZOMBINATE

protected static final int EXCEPTION_IN_ZOMBINATE
内部エラー: 終了フェーズで例外が発生した場合

関連項目:
定数フィールド値

halt_cause

protected int[] halt_cause
停止処理の原因を示すエラーコード。 正常終了は 0 、フレームワーク内部にエラー原因がある場合は負数、 process() 抽象メソッドが異常終了した場合は 1 異常の整数となる。


fatal_exception

protected java.lang.Exception[] fatal_exception
停止処理の原因となった例外。


fatal_exception_cnt

protected int fatal_exception_cnt
停止原因の例外の数


resq

protected Message resq
他の Facility へ送信した要求コマンドの応答を受け付ける応答キュー

コンストラクタの詳細

FacilityAgent

protected FacilityAgent()
コンストラクタ

メソッドの詳細

init

public abstract boolean init()
                      throws java.lang.Exception
初期化処理を実装するための抽象メソッドです。 機能が活性化された場合に呼び出されます。

戻り値:
  • true -- 初期化処理に成功した場合
  • false -- 初期化処理に失敗した場合。リターン後、 この FacilityAgent のスレッドは停止 します。
例外:
java.lang.InterruptedException - 初期化処理中に割込みが発生した 場合。この FacilityAgent の スレッドは停止しません。
java.lang.Exception - 初期化処理中に割込み以外の例外が発生した 場合、この FacilityAgent のスレッドは terminate() を呼び出さずに停止します。

suspend

public abstract boolean suspend()
                         throws java.lang.Exception
中断処理を実装するための抽象メソッドです。 機能の並行度が下げられた場合に呼び出されます。

戻り値:
  • true -- 中断処理に成功した場合
  • false -- 中断処理に失敗した場合。リターン後、 terminate() が呼び出されます。
例外:
java.lang.InterruptedException - 中断処理中に割込みが発生した 場合。この FacilityAgent の スレッドは停止しません。
java.lang.Exception - 中断処理中に割込み以外の例外が発生した 場合、この FacilityAgent のスレッドは terminate() を呼び出して停止します。

resume

public abstract boolean resume()
                        throws java.lang.Exception
中断状態からの復帰処理を実装するための抽象メソッドです。 機能の並行度が上げられたばあに呼び出されます。

戻り値:
  • true -- 復帰処理に成功した場合
  • false -- 復帰処理に失敗した場合。リターン後、 terminate() が呼び出されます。
例外:
java.lang.InterruptedException - 復帰処理中に割込みが発生した 場合。この FacilityAgent の スレッドは停止しません。
java.lang.Exception - 復帰処理中に割込み以外の例外が発生した 場合、この FacilityAgent のスレッドは terminate() を呼び出して停止します。

process

public abstract int process(FacilityCommand req)
                     throws java.lang.Exception
要求コマンド処理を実装するための抽象メソッドです。 機能の要求キューから受信した FacilityCommand が引数に 渡されます。

戻り値:
  • NORMALEND -- 要求コマンド処理に成功した 場合
  • 1 以上の整数 -- 要求コマンド処理に失敗した場合。 リターン後、terminate() が 呼び出されます。
例外:
TimeoutException - 要求コマンド処理中にタイムアウトが 発生した場合。この FacilityAgent の スレッドは停止しません。
java.lang.InterruptedException - 要求コマンド処理中に割込みが発生 した場合。この FacilityAgent の スレッドは停止しません。
java.lang.Exception - 要求コマンド処理中にタイムアウトまたは割込み 以外の例外が発生した場合、この FacilityAgent のスレッドは terminate() を呼び出して停止 します。

terminate

public abstract boolean terminate()
                           throws java.lang.Exception
停止処理を実装するための抽象メソッドです。 機能の非活性化がされた場合、process(), suspend(), resume() が異常終了した場合あるいはタイムアウト・割込み以外の例外 を投げた場合に呼び出されます。

戻り値:
  • true -- 停止処理に成功した場合
  • false -- 停止処理に失敗した場合。
例外:
java.lang.Exception - 停止処理中に例外が発生した場合。

setFacname

public void setFacname(java.lang.String facname)
機能名称を設定する


getFacname

public java.lang.String getFacname()
機能名称を取得する


setAid

public void setAid(int aid)
エージェント ID を設定する


getAid

public int getAid()
エージェント ID を取得する


setAgname

public void setAgname(java.lang.String agname)
エージェント名称を設定する


getAgname

public java.lang.String getAgname()
エージェント名称を取得する


create_resq

protected void create_resq(int resq_len)
このエージェントが応答を受信するキュー resq を作成する

パラメータ:
resq_len - キューの長さ

destroy_resq

protected void destroy_resq()
このエージェントが応答を受信するキュー resq を破棄する


responce

public boolean responce(java.lang.Object buf,
                        long timeout)
                 throws NotRunningFacilityAgentException,
                        TimeoutException,
                        java.lang.InterruptedException,
                        java.lang.Exception
要求コマンドで示された応答先のキューに、処理の結果を送信します。

パラメータ:
buf - 応答コマンド。FaclityCommand であること。
timeout - タイムアウト時間をミリ秒精度で指定する
戻り値:
  • true -- 応答コマンドの送信が正常終了した場合
  • false -- 応答コマンドの送信に失敗した場合
例外:
NotRunningFacilityAgentException - 応答先の FacilityAgent が停止している場合
TimeoutException - タイムアウトが発生した場合
java.lang.InterruptedException - 割込みが発生した場合
java.lang.Exception - 1) 応答先 FacilityAgent が存在しない 2) 応答先 FacilityAgent の取得に失敗 3) 応答先 FacilityAgentControlBlock のロック 獲得/開放に失敗 4) 応答先 FacilityAgentControlBlock が存在 しない 5) 応答先 FacilityAgent の応答キューが存在 しない

put_request

public boolean put_request(java.lang.String to_fac,
                           java.lang.Object buf,
                           long timeout)
                    throws InactiveFacilityException,
                           TimeoutException,
                           java.lang.InterruptedException,
                           java.lang.Exception
要求コマンドを送信します。

パラメータ:
to_fac - 送信先の機能名称
buf - 要求コマンド。FaclityCommand であること
timeout - タイムアウト時間をミリ秒で指定する
例外:
InactiveFacilityException - 送信先の機能が非活性の場合
TimeoutException - タイムアウトが発生した場合
java.lang.InterruptedException - 割込みが発生した場合
java.lang.Exception - 1) 送信先の機能が存在しない場合 2) 送信先機能のロック獲得/開放に 失敗した場合 3) 送信先機能の要求キューが存在 しない場合

get_responce

public FacilityCommand get_responce(java.lang.Object cmd,
                                    long timeout)
                             throws FailedProcessingException,
                                    TimeoutException,
                                    java.lang.InterruptedException,
                                    java.lang.Exception
この FacilityAgent への応答を受信します。

パラメータ:
cmd - 応答に対応する要求コマンド FacilityAgent
timeout - タイムアウト時間をミリ秒精度で指定します (msec)
例外:
FailedProcessingException - 要求コマンド受信側で処理に失敗した場合
TimeoutException - タイムアウトが発生した場合
java.lang.InterruptedException - 割込みが発生した場合
java.lang.Exception - cmd が null の場合

request

public FacilityCommand request(java.lang.String to_fac,
                               java.lang.Object buf,
                               long timeout)
                        throws java.lang.Exception
要求コマンド FacilityCommand を送信し、その応答を受信します。

パラメータ:
to_fac - 要求送信先の昨日名称
buf - 要求コマンド FacilityCommand
timeout - タイムアウト時間をミリ秒精度で指定する (msec)
例外:
java.lang.Exception - put_request(java.lang.String, java.lang.Object, long) および get_responce(java.lang.Object, long) を参照のこと

log

protected void log(int log_class,
                   int errcode,
                   java.lang.String msg)
機能のログ・メッセージを出力します。 ログのフォーマットは yyyy/mm/dd HH:MM:SS.sss:log_class:機能エージェント名称:errcode:msg となります。

パラメータ:
log_class - ログ・レベルを指定します。Log クラスを参照のこと
errcode - エラー・コードを指定します
msg - エラー・メッセージを指定します

timer_start

protected boolean timer_start(TimerCommand tc)
                       throws java.lang.Exception
TimerUser インタフェースを実装した FacilityAgent が利用する、 タイマを開始します。

パラメータ:
tc - タイマ機能に登録するタイムアウト設定
戻り値:
  • true -- タイマ開始に成功した場合
  • false -- タイマ開始に失敗した場合
例外:
java.lang.Exception - -- TimerUser を実装していない エージェントが呼び出した場合

timer_cancel

protected boolean timer_cancel(TimerCommand tc)
                        throws java.lang.Exception
TimerUser インタフェースを実装した FacilityAgent が開始した タイマを取り消します。

パラメータ:
tc - タイマ機能に登録したタイムアウト設定
戻り値:
  • true -- タイマ取消に成功した場合
  • false -- タイマ取消に失敗した場合
例外:
java.lang.Exception - -- TimerUser を実装していない エージェントが呼び出した場合

run

public void run()
FacilityAgent のメインループ

定義:
インタフェース java.lang.Runnable 内の run