タグライブラリ(JSP, 独自Mayaaプロセッサ)

LibraryManagerクラスはJSPタグライブラリをMayaa内から使えるようにしたり、独自定義したMayaaプロセッサを利用できるように管理します。 LibraryManagerはスキャナークラスを用いて指定したディレクトリやファイルからタグライブラリのファイルを検索して登録します。

スキャナー

JSPタグライブラリは、*.tld、Mayaaプロセッサは *.mld の拡張子をもつファイルをLibraryManagerがロードされた時にスキャナークラスを用いて検索します。

下表のパッケージ名の~org.seasar.mayaa.を表します。

スキャナクラス名 説明
~impl.builder.library.scanner.WebInfSourceScanner (1.3.0以降) WEB-INF内の *.tld,mld および WEB-INF/lib のJARファイル内のMETA-INF配下の *.tld,mldを検索する。このスキャナでFolderSourceScannerおよびMetaInfSourceScannerの両方を代替できる。
~impl.builder.library.scanner.FolderSourceScanner アプリケーションのコンテキストルート配下またはファイルシステム内に配置されたファイルを検索する。
~impl.builder.library.scanner.MetaInfSourceScanner JARファイル内のMETA-INFフォルダに配置されたファイルを検索する。
~impl.builder.library.scanner.ResourceScanner クラスパス内のリソースから条件に合致したファイルを検索する。
~impl.builder.library.scanner.DefaultSourceScanner Mayaaのビルトインのプロセッサを定義している mayaa.mld を読み込む。
~impl.builder.library.scanner.WebXMLTaglibSourceScanner web.xml内のtaglibエレメントにて定義されたライブラリを読み込む。

WebInfSourceScanner

Webアプリケーションのコンテキスト内のリソースを走査してライブラリファイルを検出するためのSourceScanner実装です。 走査対象は WEB-INF配下のリソースで、lib内のJARファイルも走査対象となります。

ServiceProviderの設定ファイルで以下のように設定することで、走査対象のライブラリファイルを指定することができます。 設定は記述順で評価され、最初に合致したものが採用されます。

includeexclude/WEB-INF/を基準としてライブラリファイル(tld,mld)を検出対象(include)または除外対象(exclude)するためのGlobパターンを指定します。 記述順に評価され最初に合致したもので判定されます。 どちらのパターンも指定されない場合はinclude="**/*.{tld,mld}"のみが指定されたものとみなします。

includeJarexcludeJarで走査対象JARファイルのWEB-INF/libを基準としたファイル名部分のGlobパターンを指定します。 どちらのパターンも指定されない場合は includeJar="*.jar" のみが指定されたものとみなします。

includeInJarMetaInfexcludeInJarMetaInfで読み込み対象とするライブラリファイルパスのJARファイル内のMETA-INFを基準としたGlobパターンを指定します。 どちらのパターンも指定されない場合は includeInJarMetaInf="*.{tld,mld}" のみが指定されたものとみなします。

<provider>
    <libraryManager>
       :
        <scanner class="org.seasar.mayaa.impl.builder.library.scanner.WebInfSourceScanner">
            <parameter name="exclude" value="{classes,lib}/"/>
            <parameter name="includeJar" value="taglibs-*.jar"/>
            <parameter name="excludeInJarMetaInf" value="{x,sql,scriptfree,fn,permittedTaglibs}*"/>
            <parameter name="includeInJarMetaInf" value="*.tld"/>
        </scanner>
パラメータ名 必須 規定値 値の例 説明
include - **/*.{tld,mld} 読み込み対象とするライブラリファイルパスのWEB-INFを基準としたGlobパターン
exclude - - {classes,lib} 読み込み対象外とするライブラリファイルパスのWEB-INFを基準としたGlobパターン
includeJar - *.jar taglibs-*.jar 走査対象JARファイルのWEB-INF/libを基準としたファイル名部分のGlobパターン
excludeJar - - 走査対象外のJARファイルのWEB-INF/libを基準としたファイル名部分のGlobパターン
includeInJarMetaInf - *.{tld,mld} 読み込み対象とするライブラリファイルパスのJARファイル内のMETA-INFを基準としたGlobパターン
excludeInJarMetaInf - - {x,sql,fn}-*.jar 読み込み対象外とするライブラリファイルパスのJARファイル内のMETA-INFを基準としたGlobパターン

FolderSourceScanner

アプリケーションのコンテキストルート配下またはファイルシステム内に配置されたファイルを検索する。

パラメータ名 必須 規定値 値の例 説明
folder - /WEB-INF 検索対象のフォルダ名を指定する。検索されるファイルのsystemIDはfolderに指定したパスからの相対パスが設定される。
extension - - .tld 検索するファイル名の拡張子を指定する。extensionパラメータを複数回記述することで対象の拡張子を複数指定可能。
absolute - false false trueにするとOSのファイルシステムのルートからの絶対パスと解釈する。falseの場合はWebアプリケーションのコンテキストルートを起点としたパスと解釈される。
recursive - false true trueにすると指定したフォルダは以下のサブフォルダ配下も再帰的に検索する。
<provider>
    <libraryManager>
       :
        <scanner class="org.seasar.mayaa.impl.builder.library.scanner.FolderSourceScanner">
            <parameter name="folder" value="/WEB-INF"/>
            <parameter name="recursive" value="true"/>
            <parameter name="extension" value=".tld"/>
            <parameter name="extension" value=".mld"/>
        </scanner>

MetaInfSourceScanner

JARファイル内のMETA-INFフォルダに配置されたファイルを検索する。

パラメータ名 必須 規定値 値の例 説明
folder - /WEB-INF/lib JARファイルの検索対象のフォルダ名を指定する。
extension - .jar JARファイルの拡張子を指定する。
absolute - false false trueにするとOSのファイルシステムのルートからの絶対パスと解釈する。falseの場合はWebアプリケーションのコンテキストルートを起点としたパスと解釈される。
recursive - false true trueにすると指定したフォルダは以下のサブフォルダ配下も再帰的に検索する。
extension - - .jar 検索するファイル名の拡張子を指定する。extensionパラメータを複数回記述することで対象の拡張子を複数指定可能。
ignore - - commons-beanutils- (バグ動作しない)folderおよびexensionで指定した条件に合致するファイルのうち、検査対象から除外するファイル名のパターンを前方一致で指定する。
jar.folder - META-INF/ META-INF/ 検索対象のフォルダ名を指定する。検索されるファイルのsystemIDはfolderに指定したパスからの相対パスが設定される。
jar.extension - .tld
.mld
.tld 検索するファイル名の拡張子を指定する。extensionパラメータを複数回記述することで対象の拡張子を複数指定可能。
jar.ignore - META-INF/MANIFEST.MF - 検索の起点となるフォルダを指定する。検索されるファイルのsystemIDはrootに指定したパスからの相対パスが設定される。
<provider>
    <libraryManager>
       :
        <scanner class="org.seasar.mayaa.impl.builder.library.scanner.MetaInfSourceScanner">
            <parameter name="folder" value="/WEB-INF/lib"/>
            <parameter name="extension" value=".jar"/>
            <parameter name="ignore" value="commons-beanutils-"/>
            <parameter name="ignore" value="commons-collections-"/>
            <parameter name="ignore" value="commons-logging-"/>
            <parameter name="ignore" value="nekohtml-"/>
            <parameter name="ignore" value="jaxen-"/>
            <parameter name="ignore" value="xml-apis-"/>
            <parameter name="ignore" value="xercesImpl-"/>
            <parameter name="ignore" value="rhino-"/>
            <parameter name="jar.ignore" value="META-INF/MANIFEST.MF"/>
            <parameter name="jar.extension" value=".mld"/>
            <parameter name="jar.extension" value=".tld"/>
        </scanner>

ResourceScanner

クラスパスに指定されたディレクトリやJARファイル内からライブラリファイルを検索します。 Webアプリケーションサーバ内では通常はサーバ起動時のJVMへの指定クラスパスとなっているため多くの場合は このスキャナは指定する必要はありません。

パラメータ名 必須 規定値 値の例 説明
root - - META-INF/ クラスパスがディレクトリだった時に走査するサブディレクトリを指定する。
ignore - - - クラスパスがJarファイルのとき、Jar内でライブラリとして読み込まないエントリをルートから前方一致で指定。
extension - - .tld 検査対象となった(Jar)ファイル内でライブラリとして認識するエントリのファイル拡張子。複数可能。
includeJar - - taglibs-standard-impl-*.jar 走査対象とするJarファイル名Globパターン。
excludeJar - - - 走査除外とするJarファイル名のGlobパターン。
<provider>
    <libraryManager>
       :
        <scanner class="org.seasar.mayaa.impl.builder.library.scanner.ResourceScanner">
            <parameter name="root" value="META-INF/"/>
            <parameter name="ignore" value="META-INF/MANIFEST.MF"/>
            <parameter name="extension" value=".mld"/>
            <parameter name="extension" value=".tld"/>
        </scanner>

DefaultSourceScanner

Mayaaのビルトインのプロセッサを定義している mayaa.mld を読み込む。パラメータはありません。

<provider>
    <libraryManager>
       :
        <scanner class="org.seasar.mayaa.impl.builder.library.scanner.DefaultSourceScanner"/>

WebXMLTaglibSourceScanner

web.xml内のtaglibエレメントにて定義されたライブラリを読み込みます。パラメータはありません。

<provider>
    <libraryManager>
       :
        <scanner class="org.seasar.mayaa.impl.builder.library.scanner.WebXMLTaglibSourceScanner"/>

ビルダー

検出したTLDファイルやMLDファイルを読み込んで内部のタグ定義として格納するものです。 通常は変更する必要はありません(変更しないでください)。

ビルダクラス名
~impl.builder.library.MLDDefinitionBuilder
~impl.builder.library.TLDDefinitionBuilder

コンバーター

MLDファイルでクラス変換を行う際に使用するカスタムコンバータを登録します。 通常は変更する必要はありません(変更しないでください)。

コンバータ名 コンバータクラス名
ProcessorProperty ~impl.builder.library.converter.ProcessorPropertyConverter
PrefixAwareName ~impl.builder.library.converter.PrefixAwareNameConverter

LibraryMangerの設定の全体感

※レイアウトの都合で改行しています。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE provider
    PUBLIC "-//The Seasar Foundation//DTD Mayaa Provider 1.0//EN"
    "http://mayaa.seasar.org/dtd/mayaa-provider_1_0.dtd">
<provider>
   <libraryManager class="org.seasar.mayaa.impl.builder.library.LibraryManagerImpl">
        <converter name="ProcessorProperty" class="org.seasar.mayaa.impl.builder.library.converter.ProcessorPropertyConverter"/>
        <converter name="PrefixAwareName" class="org.seasar.mayaa.impl.builder.library.converter.PrefixAwareNameConverter"/>

        <scanner class="org.seasar.mayaa.impl.builder.library.scanner.WebInfSourceScanner">
            <!-- <parameter name="include" value="**/*.{tld,mld}"/> -->
            <parameter name="excludeJar" value="commons-beanutils,commons-collections,commons-logging,nekohtml,jaxen,xml-apis,xercesImpl,rhino}-*.jar"/>
            <parameter name="includeJar" value="*.jar"/>
            <!-- <parameter name="includeInJarMetaInf" value="*.tld"/> -->
        </scanner>

        <scanner class="org.seasar.mayaa.impl.builder.library.scanner.DefaultSourceScanner"/>

        <!-- after scan jars -->
        <!-- <scanner class="org.seasar.mayaa.impl.builder.library.scanner.WebXMLTaglibSourceScanner"/> -->

        <builder class="org.seasar.mayaa.impl.builder.library.MLDDefinitionBuilder"/>
        <builder class="org.seasar.mayaa.impl.builder.library.TLDDefinitionBuilder"/>
    </libraryManager>
</provider>