• 検索結果がありません。

仕様

ドキュメント内 thesis.dvi (ページ 36-39)

第 3 章 アプリケーション依存の先読 みが可能な O/R マッピングみが可能なO/Rマッピング

3.4 仕様

例えば、「Proceeding[@year = 2005]/Paper/@name」という記述はyear という属性の値が2005 であるProcedingというノードの子ノードPaper の属性である name を指定たことになる。

AspectJのポイントカットでは、先読みのコードを実行する位置しか指 定出来ない。そのため、本フレームワークでは、this ポイントカットを拡 張して、 DB アクセスの履歴を考慮した先読みのタイミングの指定を可 能にした。本フレームワークでの this ポイントカットの仕様は以下のよ うになる。

• 記述方式

this(<クラスまたはインターフェースのタイプ>)[XPath文字列] または、

this(<タイプ識別子>)[XPath文字列]

• 選択されるジョインポイント

処理の主体側インスタンスのタイプが< ... >で指定されるクラス またはインターフェースであり、かつ、XPathでの記述とマッチし ている全てのジョインポイント。

thisポイントカットの特定に用いるXPathの文法について述べる。こ こで用いる文法はW3Cによって勧告されているXPathの文法のサブ セットである。

まず、ロケーションパスは永続クラス間の Relationship を区切ってい くものとする。また、ノードは永続クラスまたは、永続クラスのプロパ ティであることにする。

元来XPathでは[ ]を用いて

//P roceeding[@year]/P aper/@name

のような記述が可能である。この記述は「属性 year をもつ Proceeding ノードの子ノードである Paper ノードの属性name」という意味になる が、これを本研究での永続クラス間の Relationship にという観点から翻 訳すると「 year というプロパティをもつProceeding オブジェクトに関 連付けられているPaper オブジェクトの nameプロパティ」という無意 味な記述になってしまう。text()やlast() 、position() のような関数も同 様に意味を成さない。

このことは、ノードを永続クラスまたは永続クラスのプロパティに限定 したためにおきる矛盾だと考えられる。このため、thisポイントカットを 指定するする際にXPathの述語を用いる場合には、比較演算子または述 語演算子を用いた限定のみ有効であることにした。

//Biblography/P roceeding[@year <2005]/P aper/@name のような記述は有効なものである。

以下、永続クラス間の関係を指定するXPathの仕様を示す。

表3.7: XPathの仕様 記述  用途

// 間に任意個の永続クラスを含む永続クラス間のRelationship . 現在指している永続オブジェクトを表す

.. 現在指している永続オブジェクトの親オブジェクトを表す

@ 永続クラスのプロパティを表す

∗ 任意の永続クラスまたは永続クラスのプロパティを表す [] 永続クラスに関する条件の指定に用いる

このXPathの文法を用いると以下のように this ポイントカットの指 定が出来る。this ポイントカットの記述例は以下のようになる。

• this[//Proceeding/@*]

Proceedingオブジェクトの任意のフィールドがアクセスされた時点。

AspectJのthisポイントカットと等しい。

• this[//Biblography/Proceeding/@year]

Biblographyオブジェクトによって取得されたProceedingオブジェ クトのyearフィールドがアクセスされた時点

• this[//Biblography/Proceeding[year = 2005]/@conference-name]

Biblographyオブジェクトによって取得されたyearフィールドの値 が1であるProceedingオブジェクトのconferece-nameフィールド がアクセスされた時点

Prefetch アスペクトクラスに定義されている。 prefetch() メソッド、

prefetchAsync() メソッドも同様にこのXPathの文法を用いて先読みの 指定を行う。prefetch() メソッド、pefetchAsync() メソッドはXPath形 式の文字列で指定されたデータをRDBから取得し、その後取得したデー タを適当な永続オブジェクトにマップする。

このXPathを用いた先読みデータの指定を行うことで、オブジェクト レベルでの先読みの指定が可能となる。そのため、SQLやHQLを用い る場合に比べて直感的かつ容易に先読みの記述が出来る。例えば、

pref etch(”./P roceeding/P aper/@pdf f ile) をSQL を用いて記述しようとすると

SELECT pdffile FROM paper t0, proceeding t1, biblography t2 WHERE t0.cid = t1.conferenceid AND t1.bib-id = t2.id AND (t2.bib-id like ?)

のようなデータベースのテーブル名、カラム名を意識した煩雑は記述を しなければならなくなる。

以下、簡単なprefetch()メソッドの記述例を示す。

• prefetch(”./@*”);

thisJointPointが表す永続オブジェクトの全てのプロパティを先読 みする。

• prefetch(”../Paper/@*[self::pdffile and self::psfile]”);

thisJoinPointが表す永続オブジェクトを取得したオブジェクトに関 連付けられているPaperオブジェクトのpdffileとpsfileプロパティ を取得する。

ドキュメント内 thesis.dvi (ページ 36-39)

関連したドキュメント