プローブファンクションコール

概要

プログラムの呼び出し方法として、ページテンプレートでext:languageを指定する方法のほかに、ページ、タグ、プローブポイントのパターンに対してプログラムを割り当てておき、該当する箇所で呼び出す方法があります。これをプローブファンクションコールと呼びます。

パターンを記述したファイルは環境設定のコンフィグレーションファイルから参照されます。デモにおいては、web.xml→quickreflector.xml(環境設定ファイル)→functions.xml(プローブファンクションパターンファイル)と参照されるように設定しています。

パターンファイルの設定

パターンファイルの記述例を以下に示します。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root SYSTEM "http://127.0.0.1/x">
<root>
    <addfunc use="true" pattern="**">
        <function use="true" language="java" source="MetaCtl.java" point="post_pre_element" pattern="html/head"/>
        <function use="true" language="java" source="LinkCtl.java" point="pre_element" pattern="**/a"/>
    </addfunc>
    <addfunc use="true" pattern="top/sample1.html">
        <function use="true" language="java" source="Sample1LinkCtl.java" point="pre_element" pattern="**/a"/>
    </addfunc>
</root>
    

addfuncタグにより、ページリクエストのパターンに対してどのfunctionを割り当てるかを記述します。pattern には"**"と"*"のワイルドカードを使うことができます。"**"はパス区切り(/)文字を含みます。"*"はパス区切り文字を含みません。

functionタグはpatternとpointの記述により、ページのどのタグ位置でプログラムを呼ぶかをパターン化しています。ここでもpatternには"**"と"*"を使うことができます。

languageとsourceの指定はプログラムコールにおけるext:languageとext:targetの記述とほぼ同じです。式評価がされないことが違いです。

上記の例では、以下のことを処理しています。これにより、top/sample1.htmlの呼び出しの際に、上のaddfuncと下のaddfuncがすべて呼び出されることになります。

  • すべてのページリクエストに対しhtml/headの直後でMetaCtl.javaが呼び出される。METAタグやTITLEタグの挿入ができる。
  • すべてのページリクエストに対しページ中のすべてのAタグでLinkCtl.javaが呼び出される。href属性がある場合に処理を行うように記述することですべてのリンクに対してなんらかの加工を施すことができる。
  • top/sample1.htmlへのページリクエストに対しすべてのAタグでSample1LinkCtl.javaが呼び出される。このページのAタグに独自の加工を行うことができる。

patternとpointによって特定された位置においてファンクションが複数存在する場合、設定ファイルにおいて先に書かれているほうから順に実行されます。上記の例ではAタグに対するpre_elementリクエストがこれに該当します。

useの値を"!true"や"false"とすると、そのタグは無効になります。

sourceに記述されたパスは、呼び出されたページパスに対する相対位置への参照として扱われます。どういうことかというと、a/test.htmlとb/test.htmlにおいてprobe.javaがコールされた場合、a/probe.javaとb/probe.javaが参照されるということです。これが不都合である場合には"/"で始まる絶対パスで記述しなければなりません。

point の設定値

function タグのpointに指定できる文字列とその呼び出し位置は以下のとおりです。

文字列 ライブラリ 呼び出し位置 備考
pre_render WebCore ページ生成の開始直前 meta[ "_ENTRYPATH_" ]、meta[ "_PAGEPATH_" ]、meta[ "_DOMPATH_" ] が参照可
post_render WebCore ページ生成の正常終了の直後
on_exception WebCore ページ生成中に予想外のExceptionが生じた場合 meta[ "_EXCEPTION_" ] が参照可
pre_comment SilverGear コメント<!-- ... -->の出力直前 meta[ "_VALUE_" ] が参照/変更可。"_DOMPATH_"、"_PATHATTR_" は参照可
post_comment SilverGear コメント<!-- ... -->の出力直後
pre_text SilverGear 文字列(テキストノード)の出力直前 meta[ "_VALUE_" ] が参照/変更可。"_DOMPATH_"、"_PATHATTR_" は参照可
post_text SilverGear 文字列(テキストノード)の出力直後
pre_element SilverGear 開始タグの属性の出力直前 meta[ "_PATHATTR_" ] が参照/変更可
post_pre_element SilverGear 開始タグの属性の出力直後。 子要素を持たないタグの場合は発生しません。meta[ "_PATHATTR_" ] は参照可
pre_post_element SilverGear 終了タグの出力直前。 子要素を持たないタグの場合は発生しません。meta[ "_PATHATTR_" ] は参照可
post_element SilverGear 終了タグの出力直後