Velocity の実行時構成は、以下の一覧にある各設定キーで制御します。
通常、これらのキーは String の値、あるいは CSV (Comma Separated Value)
と呼ばれるコンマ区切りの String のリストの値を持ちます。
各デフォルト値は Velocity の JAR ファイルに含まれており、ソースとしては
/src/Java/org/apache/velocity/runtime/defaults/velocity.defaults にあり、
Velocity はこれらを設定のベースラインとして使います。
これにより、 Velocity の起動時に設定キーに常に「正しい」値が入っていることが
保証されますが、それはあなたが求めている値だとは限りません。
init() の実行前に値を指定すると、デフォルトの値を置き換えられます。
したがって、Velocity では変更が必要なキーの値だけを設定すればよくて、それ以外は
気にする必要はありません。さらに、設定関連を含めて多くの機能が追加されても、
それに合わせて設定ファイルを変更する必要はありません -- Velocity エンジンは、
常にデフォルト値を持っているからです。
設定 API についての詳細は上のセクション
一般的なアプリケーションで Velocity を使う を参照してください。
Velocity の動作を制御する設定キーの一覧は以下の通りです。
各キーはカテゴリ別に分類され、「=」記号の後に現在のデフォルト値を示しています。
Runtime Log
runtime.log = velocity.log
エラー、警告、情報に関するメッセージのためのログファイルのフルパスと名前。
格納場所は、絶対パスでなければ、「カレントディレクトリ」の相対パスとなります。
runtime.log.logsystem
このプロパティには、デフォルトの値がありません。このキーは Velocity でロギングクラス
のインスタンスを使うのに使用します。ロギングクラスは
org.apache.velocity.runtime.log.LogSystem インタフェースをサポートします。
このインタフェースを使えば、 Velocity のログメッセージと
アプリケーションのログメッセージを同じログに入れることができます。詳細は、
一般的なアプリケーションで
Velocity を使う のセクションをご覧ください。
runtime.log.logsystem.class =
org.apache.velocity.runtime.log.AvalonLogSystem
Velocity がインスタンス化したログシステムで使用されるクラスです。
runtime.log.error.stacktrace = false
runtime.log.warn.stacktrace = false
runtime.log.info.stacktrace = false
true にすると、これらのエラーカテゴリーのスタックトレースを有効にします。
これは大量のログを生成します。
runtime.log.invalid.references = true
false にすると、リファレンスが無効な場合もログ出力されません。
本番環境では false にすると良いのですが、
デバッグ時には [trueにしておくと] とても役立ちます。
runtime.log.logsystem.avalon.logger = name
これを使うと、ユーザは Avalon 階層内の既存のロガーを LogSystem インタフェースで
ラップしなくても name で指定できます。
注意: デフォルトのログシステムは変更される可能性があるため、この設定とともに
runtime.log.logsystem.class =
org.apache.velocity.runtime.log.AvalonLogSystem と指定しなければ
なりません。また Avalon ログシステムが将来もデフォルトのログシステムであることは
保証されていません。
文字エンコーディング
input.encoding = ISO-8859-1
入力 (テンプレート) の文字エンコーディングを指定します。
これを使うと、テンプレートで UTF-8 といった別のエンコーディングを使用できます。
output.encoding = ISO-8859-1
VelocityServlet と Anakia からの出力ストリームのための文字エンコーディング
#foreach() 指示子
directive.foreach.counter.name = velocityCount
#foreach() 指示子で使用され、ループカウントのためのコンテキストキー
として使用される文字列を定義します。テンプレートでは、このループカウントに
$velocityCount でアクセスできます。
directive.foreach.initial.value = 1
#foreach() ループでのループカウンタリファレンスのためのデフォルトの開始値
#include() と #parse() 指示子
directive.include.output.errormsg.start
= <!-- include error :
directive.include.output.errormsg.end
= see error log -->
#include() 指示子で問題が起こった場合の、入力ストリームのエラーメッセージ用に
開始タグと終了タグを定義します。.start と .end の両方でタグが定義されていれば、
エラーメッセージは、「.start msg .end」という形式
(この形式では .start と .end でプロパティの値を参照します) で、
ストリームに出力されます。
.start と .end の両方で(次の)タグが定義されていても、
テンプレート処理ストリームへの出力が行われるだけです。
directive.parse.maxdepth = 10
テンプレート解析の深度を定義します。
テンプレートは、別のテンプレートを #parse() するかも知れませんし、
解析されるテンプレートにも #parse() 指示子があるかもしれません。
この値は、#parse() 再帰の無限ループを防ぎます。
リソース管理
resource.manager.logwhenfound = true
リソースマネージャからの「リソース発見」メッセージの
ロギングの制御を切り替えます。最初にリソースが見つかったときに、
リソース名とリソースを見つけたローダのクラス名が
ランタイムログに通知されます。
resource.loader = <name> (default = File)
複数値のキーで、値として CSV 形式を受け入れます。
リソースローダのパブリック名が使用されます。このパブリック名は、
このリソースローダに固有のプロパティを指定するのに使用されます。
注意: 複数値のキーでは、"file, class" (引用符なし) といった値を渡すことが可能で、
上記の値の場合、2つのローダの設定値が後に続くことを示しています。
<name>.loader.description
= Velocity File Resource Loader
当該ローダの説明文字列。
<name>.resource.loader.class
= org.apache.velocity.runtime.resource.loader.FileResourceLoader
このローダのクラスの実装名。デフォルトのローダはファイルローダです。
<name>.resource.loader.path = .
複数値のキーで、値として CSV 形式を受け入れます。
ローダによるテンプレートの読み込み元のルートを示します。テンプレートは
このルートのサブディレクトリに存在しているかもしれません。
例) homesite/index.vm。この設定キーは、現在のところ
FileResourceLoader と JarResourceLoader に適用されます。
<name>.resource.loader.cache = false
ローダでのテンプレートのキャッシュ制御。
配備とデバッグを簡単にするために、デフォルトは false となっています。
本番環境への配備の際に true にすべきです。
「true」の場合は modificationCheckInterval プロパティが適用されます。
これによって、キャッシュを効率的に行い、リロード制御を簡単に行えます --
これは、テンプレートは頻繁に変更されるけれども、アプリケーションや Servlet エンジンの
再起動はしたくない、あるいは許可されていないようなホスティング環境や ISP 環境
で役に立ちます。
<name>.resource.loader.modificationCheckInterval = 2
キャッシュが有効な場合の変更チェックの間隔の秒数です。
この数字が 0 より大きい整数の場合、テンプレートが変更されたかどうかを
チェックする間隔の秒数を示します。最後のチェック以降にテンプレートが
変更されていれば、再ロード・再解析されます。そうでなければ、何もしません。
0 以下の場合は修正チェックは行われませんし、 (上記の) cache プロパティ
が true の場合、テンプレートが最初の使用時に一度ロード・解析されたら、
アプリケーションや Servlet エンジンが再起動するまでチェック・リロードは行われません。
具体例として、デフォルトの Velocity プロパティで FileResourceLoader のセットアップ
がどのように管理されているかを示します。
 |
 |
 |
 |
resource.loader = file
file.resource.loader.description = Velocity File Resource Loader
file.resource.loader.class = org.apache.velocity.runtime.resource.loader.FileResourceLoader
file.resource.loader.path = .
file.resource.loader.cache = false
file.resource.loader.modificationCheckInterval = 2
|
 |
 |
 |
 |
Velocimacro
velocimacro.library = VM_global_library.vm
複数値のキーで、値としてCSV形式を受け入れます。
Velocity Runtime エンジンが起動したときにロードされる
Velocimacro ライブラリのファイル名(複数指定可)です。これらの Velocimacro は、
すべてのテンプレートからアクセスできます。このファイルでは
ファイルローダリソースパスのルートからの相対パスを想定しています。
velocimacro.permissions.allow.inline = true
テンブレート内で #macro() 指示子による新しい Velocimacro の定義を許可するかどうか
を決定します。デフォルト値は true で、どんなテンプレートでも新しいVelocimacro
の定義・使用が可能であることを意味します。
注意: 他のプロパティの設定によっては、これらの #macro() ステートメントが
グローバルな定義を置き換えることも可能です。
velocimacro.permissions.allow.inline.to.replace.global = false
テンプレート内で「インライン」定義された Velocimacro が、起動時にロードされた
ライブラリ内の Velocimacro 定義を置換できるかどうか制御します。
velocimacro.permissions.allow.inline.local.scope = false
Velocimacro の「プライベートな」テンプレートのネームスペースを制御します。
true のとき、テンプレート内の #macro() 指示子で作成した Velocimacro は、
定義を行ったテンプレートからのみアクセスできます。つまり、起動時にロードされる
グローバル/ローカルのライブラリ以外の Velocimacro は共有できないことを意味します (上記参照)。また、テンプレートが相互干渉できないことも意味します。
このプロパティを使うと、グローバル/ローカルのライブラリに「デフォルト」の
Velocimacro 定義があり、テンプレート内の使用時にその実装を「オーバーライド」するという
テクニックが可能です。こうしたことが可能なのは、このプロパティが true の場合、
Velocimacro でのテンプレートのネームスペースの検索がグローバルネームスペースより
先に行われ、オーバーライドを行うことが可能となるためです。
velocimacro.context.localscope = false
Velocimacro 内のリファレンスへのアクセス (set/get) でコンテキストを変更できるようにするか、
それとも、アクセスはその Velocimacro のローカルスコープに限定するかを決めます。
velocimacro.library.autoreload = false
Velocimacro ライブラリの自動ロードを制御します。
trueにセットすると、起動された Velocimacro のライブラリソースについて
変更をチェックし、必要であればリロードされます。
これにより、まさに通常のテンプレートと同じように、
アプリケーションや Servlet コンテナを再起動せずに
Velocimacro ライブラリの変更・テストができるようになります。
これは、リソースローダのキャッシュが off (例えば
file.resource.loader.cache = false ) の場合のみ動作します。
この機能は開発用であり本番環境用ではありません。
文字列展開
runtime.interpolate.string.literals = true
VTL String リテラルの展開の仕組みを制御します。注意:
VTL String リテラルは厳密に言えば二重引用符で囲まれた文字列で、
#set() ステートメント内、リファレンスのメソッド呼び出し、VM へのパラメータで使われたり、
VTL 指示子への引数として一般的に使われたりします。
詳細は VTL リファレンスを見てください。
ランタイム設定
parser.pool.size = 20
このプロパティでは、Velocity が起動時に作成して、プールに保持する
パーサの数を設定します。
デフォルトのパーサ数は20ですが、たいていの用途では十分なはずです。
Velocity がパーサを使い果たすと、ログに記録され、必要に応じて動的に
作成されます。ただし、それらはプールに加えられないことに注意してください。
通常のパーサのプールと比較して動作が遅くなりますが、
これは例外的な状態だと考えられます。ログにメッセージが出た場合には、
このプロパティの数字を増やしてください。