PEXA Modelについて

チュートリアル

定義ファイル

機能一覧

リファレンス

目次
  1. はじめに
  2. 現象の種別について
  3. 現象定義ファイルの書式


はじめに

このドキュメントは、PEXAモデルフレームワークで使用される現象定義について解説する物です。

現象とは、ある現象型が特定の値のみを取り得るタイプ(type=category)の場合の、実際に取り得る値(区分値)の定義です。
区分値の集合に対してIDや名称を割り振り、区分値一つ一つの内部値や定数値(外部表現値)などをこの定義ファイルで宣言します。

 アプリケーション側ではあくまで外部表現である区分値を参照する。
 PEXA実行エンジンがDBに保存する際には内部で保持している値が使用される。
┌─────┐            ┌───────────────┐                        DataBase
│          │            │RemovedFlag                   │              ┌───────┬────→
│ Client   ├──┬───┼→区分値(外部表現)=REMOVED    │              │REMOVED_FLAG  │
│ Service  │    │      │  内部で保持する値=1(Integer)───┐         ├───────┼────→
│          │    │      └───────────────┘   └───→ │     1        │
│          │    │                                                      ├───────┼────→
└─────┘    │      ┌───────────────┐     ┌──→ │     0        │
  REMOVED,        │      │RemovedFlag                   │     │       ├───────┼────→
  NOT_REMOVED     └───┼→区分値(外部表現)=NOT_REMOVED│     │       │              │
  で意識する。            │  内部で保持する値=0(Integer)────┘       ├───────┼────→    
                          └───────────────┘              ↓              ↓
上記の例では、アプリケーションは現象"RemovedFlag"の値を
  • RemovedFlag .REMOVED
  • RemovedFlag .NOT_REMOVED
という形で意識します。

この定義ファイルはXMLファイルとして記述され、ビルドツールを通すことでカタログHTMLファイルとビジネスオブジェクトのJavaソースコードが生成されます。 定義する単位としては、一種類の区分値集合に対して一つの現象定義XMLファイルを作成することになります。


現象の種別について

現象には、明示的な種別分けというのは存在していません。
ただし、現象定義のビルドを行うことにより生成されるJavaクラスの実装タイプにいくつかのタイプが存在します。

  • Phenomenon
  • Conversinable
  • IdentifiedFlag
  • Comparable
それぞれについて、以下で説明します。

Phenomenon

現象オブジェクトを表すインタフェースです。
現象定義から生成された実装クラスは、必ずこのインタフェースを実装します。

現象オブジェクトは、コンストラクタの引数でのみ内部に保持するべき値を受け取る不変(immutable)オブジェクトです。 一度生成されたらその値自体が変更されることはありません。

また、現象オブジェクトのインスタンスは、定数としてクラス自体の読み込み時に全て生成されます。 基本的にはこの定数をアプリケーションは使用すればよいので、インスタンス生成の必要はありません。


Conversinable

文字列表現から現象オブジェクトに変換できることが保証されていることを表すタグインタフェースです。
このインタフェースを持つ現象オブジェクトは、文字列を引数にとり、自身を返すconvertメソッドを持つ必要があります。

PEXAの実行エンジンでは、まずこのインタフェースを実装しているかをチェックして、 なければ文字列を引数にとるコンストラクタを持つかを再度チェックし、 それでもなければ文字列からの変換が失敗したと見なしてエラーになります。

現象定義から生成された実装クラスは、必ずこのインタフェースを実装します。


IdentifiedFlag

データモデルの種別を判別するためのフラグを表すインタフェースです。
このインタフェースを実装するかは任意です。

このインタフェースを持つ現象は、基本的にProxyと組み合わせて使用されます。

例えば、同じステレオタイプを持つデータモデルが複数種類ある場合は同じProxyオブジェクトが使用されることがあります。 このような場合、Proxy内部に通番しか持っていないとデータモデルをユニークに抽出することができないので、Proxyに対してIdentifiedFlagを付与することでユニーク性を保証します。

このインタフェースを持つ現象では、区分値一つ一つの文字列表現はデータモデル名と同一になる必要があります。


Comparable

大小比較が可能であることを表すインタフェースです。
このインタフェースを実装するかは任意です。

区分値の一覧を何らかの理由でソートできる必要がある場合に実装して下さい。



現象定義ファイルの書式

以降で、現象定義ファイルの書式について解説します。

現象定義ファイルは、XML形式で記述します。
ルートタグのphenomenonタグで、seqno属性に現象のIDを指定します。

記述例:

<?xml version="1.0" encoding="Windows-31j"?>
<!--
 COPYRIGHT
 -->
<!DOCTYPE phenomenon SYSTEM "../doctype/phenomenon.dtd">
<!--==================================================
 == Current-Module:   $HeadURL: http://pexa.atrris.com/repos/trunk/doc/material/developGuide/model/xdocs/ja/pexa_model_definition_phenomenon.xml $
 == Release-Date:     $Date:: 2007-05-22 16:15:14 #$
 == Release-Version:  $Revision: 824 $
 == First-Created-On: 2007/04/27
 == First-Created-By: 
 == Copy-Right-Owner: 
 ==================================================-->
<!-- 現象 -->
<phenomenon seqno="PH9000001">
     :
     :
     :
</phenomenon>
このIDはシステム内でユニークになるIDを割り当てて下さい。
なお、通番に関する標準的な命名規則についてはこちらを参照して下さい。

内部は以下のセクションに分割されています。


categoryセクション

記述例 :

<category name="ModelOperationCategory"
          implement="pexa.share.event.ModelOperationCategory"
          namingpath=""
          dispName="ModelOperationCategory" >
    <!-- 値 -->
    <categoryValue implement="java.lang.Integer" comparable="false" identifiedFlag="false" generate="false">    
        <!-- カテゴリ値 -->
        <static value="1" constant="CREATE" dispName="CREATE" />
        <static value="2" constant="UPDATE" dispName="UPDATE" />
        <static value="3" constant="REMOVE" dispName="REMOVE" />
        <static value="4" constant="INVALID" dispName="INVALID" />
        <static value="5" constant="DELETE" dispName="DELETE" />
        <static value="6" constant="ENABLE" dispName="ENABLE" />
        <static value="7" constant="DISABLE" dispName="DISABLE" />
    </categoryValue>
</category>

説明 :
現象の識別情報を記述します。
現象名称や実装クラス名を属性で指定し、配下のcategoryValueタグで区分値の詳細な定義を行います。

属性値 :
categoryタグの属性値は以下の通り。

属性値名 説明 形式 必須/非必須
name 現象名の指定です。
この名称は必ずシステム内でユニークになる必要があります。
また、実装クラス名(パッケージは除く)と同一にして下さい。
文字列 必須
implement 現象の実装クラス名を指定して下さい。 文字列 必須
namingpath 現在未使用です。 文字列 非必須
dispName 現象の表示名称指定です。
現象名とは別の名称を指定できますので、例えば現象名は英字で統一するがdispName側には分かりやすい日本語名を付けておくといった指定が出来ます。
文字列 必須

セクション内の子要素:
categoryセクションのサブ要素として、categoryValueタグがあります。

categoryValueタグ

区分値の具体的な内容を詳細定義するためのタグです。
基本的には必須のタグとなります。
(XMLのDTD上では非必須のタグになっていますが、これは過去のバージョンとの互換性ととるため)

現象オブジェクトの内部で保持する値や、現象オブジェクトに実装させるべきインタフェースの指定、 現象オブジェクトのソースコード自動生成を行うかどうかの指定など、基本的にコード自動生成のための情報になります。

属性値 :
categoryValueタグの属性値は以下の通り。

属性値名 説明 形式 必須/非必須
implement 現象の内部で保持する値の実体を指定します。
基本的には数値(Integer)か真偽値(Boolean)のどちらかになります。
java.lang.Integer,
java.lang.Boolean
必須
comparable 現象オブジェクトにComparableインタフェースを実装するかの指定です。 true,
false
必須
identifiedFlag 現象オブジェクトにIdentifiedFlagインタフェースを実装するかの指定です。 true,
false
必須
generate 現象オブジェクトのソースコード自動生成を行うかどうかの指定です。 true,
false
必須

staticタグ
categoryValueタグの子要素として、staticタグがあります。
現象内で保持する区分値をこのタグで列挙して定義して下さい。

属性値名 説明 形式 必須/非必須
value 区分値の実体値を指定します。
categoryValueタグのimplement属性で指定された型に応じて指定して下さい。
文字列 必須
constant 現象オブジェクト内に宣言される、区分値毎の定数名称を指定します。
アプリケーションはこの定数を参照することになります。
文字列 必須
dispName 区分値の名称指定です。
分かりやすい日本語名称などをここで指定できます。
なお、この名称は現象オブジェクトには影響を与えないコメント情報です。
文字列 必須


abstractセクション

記述例 :

<!-- 概要  -->
<abstract>
    データモデルが削除されているかを表すフラグです。
</abstract>

説明 :
現象の概要説明を記述します。
文字列で自由に記述して下さい。


definitionセクション

記述例 :

<!-- 定義  -->
<definition>
    データモデルが削除されているかを表すフラグです。
</definition>

説明 :
現象の定義内容説明を記述します。
現象オブジェクトの自動生成を行っていなかった時期に このセクションに区分値の詳細内容を文章で記載していましたが、 現在はcategoryセクション内部に定義するようになりましたので、実質未使用のセクションとなっています。


statusセクション

記述例 :

<status>
    <author>$Author: morishita $</author>
    <datetime>$Date:: 2007-05-22 16:15:14 #$</datetime>
    <version>$Revision: 824 $</version>
</status>

説明 :
定義ファイルの編集情報を記述するセクションです。
バージョン管理システムの置換キーワードなどと連携して使用してください。

セクション内の子要素 :
以下の子要素があります。

authorタグ

タグの間にはさんで、ファイルの編集者を記述します。


datetimeタグ

タグの間にはさんで、ファイルの編集日時を記述します。


versionタグ

タグの間にはさんで、ファイルのバージョンを記述します。



更新情報

  • 最終更新者 : $Author: morishita $
  • 最終更新日時 : $Date:: 2007-05-22 16:15:14 #$
  • バージョン : $Revision: 824 $



Copyright © 2006, Atrris Corporation