my_util
クラス Facility

java.lang.Object
  拡張my_util.Facility
すべての実装インタフェース:
Inspectable, Loggable

public class Facility
extends java.lang.Object
implements Loggable, Inspectable

ここで Facility とは、アプリケーションを構成する機能を表現する抽象的な実体を意味します。 Facility のインスタンスそれぞれは、ひとつの機能を担います。

Facility インスタンスの担う機能に対応する処理の詳細は FacilityAgent によって実装します。 インスタンスは複数の FacilityAgent インスタンスを管理することで機能の並行処理を実現できます。
インスタンスは機能の開始・中断・終了を、 FacilityAgent に関連付けたスレッドを実行・待機・停止させることで 実現します。また、これを敷衍して並行処理の並行度を動的に変更する ことができます。

Facility インスタンスが処理要求を受け付ける要求キューとして、 Message インスタンスを 1 つ使用します。 このキューから、管理下の FacilityAgent が FacilityCommand を 読み出して実際の処理を進めます。

Facility インスタンスは、その管理下にある FacilityAgent のログ出力先と記録される情報のレベルを管理します。 ログのレベルには、致命的な障害 (FATAL)、エラー (ERROR)、 警告 (WARN)、処理経過情報 (INFO)、デバッグ情報 (DEBUG) という区分があります。

関連項目:
FacilityAgent, FacilityAgentControlBlock, FacilityCommand, Log, Semaphore, Message

フィールドの概要
protected  boolean active
          機能が活性化/非活性の状態を示す
protected  java.lang.String agclass_name
          機能の処理を実装する FacilityAgent クラスのクラス名
protected  int concurrency
          現在の並行度。
protected  Log log
          機能のログ出力先
protected  LogConf log_conf
          機能のログ出力先構成情報
protected  int max_concurrency
          並行処理を行える最大並行度。
protected  java.lang.String name
          機能名称
protected  Message req_queue
          機能の要求待ち受けキュー。
 
メソッドの概要
 boolean activate()
          機能を活性化します。
static Facility attach(java.lang.String name)
          既に create(java.lang.String, java.lang.String, int, int, my_util.LogConf, int) メソッドで生成された機能インスタンスを、機能名称で検索します。
 boolean change_concurrency(int concurrency)
          機能の並行度 concurrency を変更します。
 boolean change_log(LogConf log_conf)
          機能のログ情報を記録する出力先・文字エンコーディング・ ログ・レベルを変更します。
static Facility create(java.lang.String name, java.lang.String agclass_name, int max_concurrency, int concurrency, LogConf log_conf, int resq_len)
          機能の生成を行います。
 boolean deactivate()
          機能を非活性化します。
protected  InspectionData get_agents_details()
          エージェントの詳細情報を InspectionData として返します。
protected  Timer get_app_timer()
          この機能を所有するアプリケーションのタイマを 取得します
 InspectionData get_details()
          機能の詳細情報を InspectionData として返します。
protected  InspectionData get_details(int ser_num)
          機能の詳細情報を InspectionData として返します。
protected  java.lang.String get_log_delimit()
          ログ出力のフィールド区切り文字を取得します。
 InspectionData get_summary()
          機能のサマリ情報を InspectionData として返します。
protected  InspectionData get_summary(int ser_num)
          機能のサマリ情報を InspectionData として返します。
protected  boolean leave()
          take(boolean, boolean, long) メソッドで獲得された機能インスタンスの ロックを開放します。
 void log(int log_class, java.lang.String msg)
          機能のログ情報を記録します。
 boolean put_request(java.lang.Object cmd, long timeout, boolean insert_head)
          この機能に要求を送るために要求送信元が呼び出します。
protected  void set_app(Application application)
          この機能を所有するアプリケーションを設定します
protected  boolean take(boolean sharing, boolean blocking, long to)
          機能インスタンスをロックします。
 
クラス java.lang.Object から継承したメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

フィールドの詳細

name

protected java.lang.String name
機能名称


agclass_name

protected java.lang.String agclass_name
機能の処理を実装する FacilityAgent クラスのクラス名


max_concurrency

protected int max_concurrency
並行処理を行える最大並行度。1 以上である必要がある


concurrency

protected int concurrency
現在の並行度。FacilityAgent で障害/エラーが発生した場合、 実際に活動しているスレッド数は、この値より少なくなる (活動しているスレッドが 0 ということもある)


req_queue

protected Message req_queue
機能の要求待ち受けキュー。FacilityCommand が渡される


log

protected Log log
機能のログ出力先


log_conf

protected LogConf log_conf
機能のログ出力先構成情報


active

protected boolean active
機能が活性化/非活性の状態を示す

メソッドの詳細

get_summary

protected InspectionData get_summary(int ser_num)
機能のサマリ情報を InspectionData として返します。 Inspector が呼び出します。

パラメータ:
ser_num - 機能の通番
戻り値:
サマリ情報を設定された InspectionData

get_summary

public InspectionData get_summary()
機能のサマリ情報を InspectionData として返します。 Inspectable インタフェースが実装要求しています。

定義:
インタフェース Inspectable 内の get_summary
戻り値:
サマリ情報を設定された InspectionData

get_details

protected InspectionData get_details(int ser_num)
機能の詳細情報を InspectionData として返します。 Inspector から呼び出されます。

パラメータ:
ser_num - 機能の通番
戻り値:
詳細情報を設定された InspectionData

get_details

public InspectionData get_details()
機能の詳細情報を InspectionData として返します。 Inspectable インタフェースが実装要求しています。

定義:
インタフェース Inspectable 内の get_details
戻り値:
詳細情報を設定された InspectionData

get_agents_details

protected InspectionData get_agents_details()
エージェントの詳細情報を InspectionData として返します。 Inspector から呼び出されます。

戻り値:
詳細情報を設定された InspectionData

set_app

protected void set_app(Application application)
この機能を所有するアプリケーションを設定します

パラメータ:
application - アプリケーション

get_app_timer

protected Timer get_app_timer()
この機能を所有するアプリケーションのタイマを 取得します

戻り値:
  • 非 null -- アプリケーションのタイマを 返します
  • null -- アプリケーションがタイマ機能を 提供していない場合

create

public static Facility create(java.lang.String name,
                              java.lang.String agclass_name,
                              int max_concurrency,
                              int concurrency,
                              LogConf log_conf,
                              int resq_len)
                       throws java.lang.Exception
機能の生成を行います。生成されたインスタンスは、 機能名称をキーとして登録されます。

パラメータ:
name - 機能名称
agclass_name - 機能の処理を実装した FacilityAgent クラスのクラス名
max_concurrency - 機能の最大並行度
concurrency - 機能の並行度の初期値
log_conf - 機能のログ出力先構成情報。 my_util.LogConf を参照のこと
resq_len - FacilityAgent への応答キューのキュー長
戻り値:
  • 非 null -- 生成した Facility インスタンス
  • null -- 不正な引数、要求キュー生成失敗、 ログ出力先オープンに失敗の場合
例外:
java.lang.Exception - FacilityAgent の生成に失敗した場合

attach

public static Facility attach(java.lang.String name)
既に create(java.lang.String, java.lang.String, int, int, my_util.LogConf, int) メソッドで生成された機能インスタンスを、機能名称で検索します。

パラメータ:
name - 機能名称
戻り値:
  • 非 null -- 機能名称に対応する インスタンス
  • null -- 機能名称が null かあるいは、 機能の生成がされていない場合

take

protected boolean take(boolean sharing,
                       boolean blocking,
                       long to)
                throws TimeoutException,
                       java.lang.Exception
機能インスタンスをロックします。 ロック機構には Semaphore を使用しています。

パラメータ:
sharing - -- 共有ロックの場合は true を、 占有ロックの場合は false を指定します。
blocking - -- ロック獲得時にブロッキングするか否かを指定 します。
to - -- ブロッキングする場合のタイムアウト時間をミリ秒精度で 指定します。無制限にブロックさせるばあいは、0 を指定 します。
戻り値:
  • true -- ロック獲得に成功した場合
  • false -- ロック獲得に失敗した場合
例外:
TimeoutException - -- タイムアウトした場合
java.lang.Exception - -- 上記以外の例外。Semaphore を参照のこと。

leave

protected boolean leave()
take(boolean, boolean, long) メソッドで獲得された機能インスタンスの ロックを開放します。 ロック機構には Semaphore を使用しています。

戻り値:
  • true -- ロック開放に成功した場合
  • false -- ロック開放に失敗した場合
例外:
java.lang.Exception - -- Semaphore を参照のこと。

activate

public boolean activate()
                 throws java.lang.Exception
機能を活性化します。現在の並行度 concurrency に 一致する FacilityAgent インスタンスのスレッドの実行を開始します。

戻り値:
  • true -- 活性化に成功した場合
  • false -- 活性化に失敗した場合
例外:
java.lang.Exception - -- Facility インスタンスかあるいは FacilityAgentControlBlock インスタンスの ロック獲得・開放に失敗した場合

deactivate

public boolean deactivate()
                   throws java.lang.Exception
機能を非活性化します。現在の並行度 concurrency に一致する FacilityAgent インスタンスのスレッドを停止するために 割込みを送信します。

戻り値:
  • true -- 非活性化に成功した場合
  • false -- 非活性化に失敗した場合
例外:
java.lang.Exception - -- Facility インスタンスかあるいは FacilityAgentControlBlock インスタンスの ロック獲得・開放に失敗した場合

change_concurrency

public boolean change_concurrency(int concurrency)
                           throws java.lang.Exception
機能の並行度 concurrency を変更します。 並行度を下げる場合はサスペンド割込みを、 並行度を上げる場合はレジューム割込みを 適切な数の FacilityAgen スレッドへ送信します。

パラメータ:
concurrency - -- 変更後の並行度
戻り値:
  • true -- 並行度の変更に成功した場合
  • false -- 並行度の変更に失敗した場合
例外:
java.lang.Exception - -- Facility インスタンスかあるいは FacilityAgentControlBlock インスタンスの ロック獲得・開放に失敗した場合

log

public void log(int log_class,
                java.lang.String msg)
機能のログ情報を記録します。 Loggable インタフェースが実装を要求します。

定義:
インタフェース Loggable 内の log
パラメータ:
log_class - ログ・レベルを指定します。Log クラスを参照のこと
msg - エラー・メッセージを指定します

get_log_delimit

protected java.lang.String get_log_delimit()
                                    throws java.lang.Exception
ログ出力のフィールド区切り文字を取得します。

戻り値:
  • 非 null -- 区切り文字
  • null -- 区切り文字が設定されていない場合
  • 例外:
    java.lang.Exception - 機能のロック獲得に失敗した場合

change_log

public boolean change_log(LogConf log_conf)
                   throws java.lang.Exception
機能のログ情報を記録する出力先・文字エンコーディング・ ログ・レベルを変更します。Loggable インタフェースが実装を要求 します。

定義:
インタフェース Loggable 内の change_log
パラメータ:
log_conf - ログ出力先構成情報。my_util.LogConf を参照のこと
戻り値:
  • true -- ログ出力先などの変更に成功した場合
  • false -- 変更に失敗した場合
例外:
java.lang.Exception - Facility インスタンスのロック獲得に失敗 した場合

put_request

public boolean put_request(java.lang.Object cmd,
                           long timeout,
                           boolean insert_head)
                    throws InactiveFacilityException,
                           TimeoutException,
                           java.lang.Exception
この機能に要求を送るために要求送信元が呼び出します。

パラメータ:
cmd - 要求内容と応答内容を保持する FacilityCommand インスタンス
timeout - タイムアウト時間をミリ秒精度で指定します
insert_head - cmd を機能の要求キューの先頭に挿入 するか否かを指定します。
戻り値:
  • true -- 要求の送信が成功した場合
  • false -- 要求の送信が失敗した場合
例外:
InactiveFacilityException - 機能が非活性の場合
TimeoutException - タイムアウトが発生した場合
java.lang.Exception - 上記以外の例外