Documentation9. 付録

 

MSPTaglibのリファレンス

このセクションではMSPのtaglibが提供している6つのタグについて説明します.これらの使い方の例はたくさんありますが,特に「基本的な例題」のセクションをご覧になるとよいでしょう.

MSPのtaglibは,最も基本的には,JSPが1つまたは複数のmsp:evaluateタグの周りのmsp:allocateKernelタグをラップするために使われます.

...
<msp:allocateKernel>

<msp:evaluate>
      ...
</msp:evaluate>

<msp:evaluate>
...
</msp:evaluate>

</msp:allocateKernel>
...

以下はこれらのタグの操作説明です.MSPのtaglibを使うJSPの処理ステップのまとめになっています.

msp:allocateKernel (タグオープン)

msp:allocateKernelタグは計算のためにMathematica カーネルを入手するために使われます.開始タグはページの処理に次のステップを踏みます.

プールの決定

msp:allocateKernelは,まず,JSPの名前に基づいてリクエストに使うプールを決定します.名前の付いたプールがなければGeneralプールが使われます.

カーネルの割当て

Mathematica カーネルはカーネルプールからリクエストされます.プールには計算のために待機しているカーネルが入っています.使えるカーネルがなければ,システムは使えるようになるまで待機します.プールを使うことで,複数のリクエスト間でMathematica カーネルを分け合うことが可能になり,システムの応答時間が短くなります.
各リクエストが全く異なるカーネルを得ることがあるので,カーネルに何かを保存して次に再びそれを使うことはできません.

入力変数の割当て

リクエストで送られた入力変数は,次に値と共にMathematica カーネルに送られます.変数symと値funに,Mathematica$$sym = "fun"という割当てが行われます.これで,値はMathematica の文字列として送られ,何らかの特別のアクションなしでは評価されなくなります.input要素だけが変数のソースではないのでご注意ください.例えば,画像マップも変数を転送します.webMathematica はこれらの変数の名前を付け替えて,ユーザのMSP中のMathematica コードと干渉し合うことを防ぎます.

各変数はスキャンされ,有効なMathematica のシンボルであるかどうか確認されます.「.」という記号はすべてバッククォート(`)で置き換えられます.またアンダースコア(_)は「U」で置き換えられます.名前の変換はJ/Link におけるそれと一致します.

以下は変数名の変換例です.

その後,各変数は文字,数字,ドル記号($),バッククォート記号(`)しか含んでいないことが確認されます.これにより,エクスクラメーション記号(!)で始まる変数を送る攻撃が抑止されます.エクスクラメーション記号で始まる変数はMathematica にオペレーティングシステムシェルの操作を始めさせる可能性があるので,潜在的な危険性を孕んでいるのです.

各値はMathematica の文字列になります.ここで,バックスラッシュ記号(\)やダブルクォート記号(")があると,バックスラッシュ記号(\)が追加される形で拡張されます.値がエクスクラメーション記号(!)で始まっている場合は,スペースが加えられます.最後にダブルクォート(")が前後に加えられます.

パラメータの割当て

カーネルのリクエストに相応しくなるように,$ServletRequest$ServletResponse$ServletConfig$ScriptName$PathInfo$QueryStringに割当てをします.

初期化

$Context$ContextPathの設定は保存され,メッセージとプリント出力の保存に使われたリストは初期化されます.

msp:evaluate

msp:evaluateタグはJSPの内部にあるMathematica のコマンドを評価するためのものです.msp:evaluateタグの内部にあるMSPの関数すべてを使うことができます.それぞれのタグは内容を評価するようにmsp:allocateKernelタグで割り当てられたカーネルを使います.カーネルが割り当てられていない場合,リクエストはエラーページに転送されます.

MSPExceptionが投げられると,処理コードがそれを捕え,適切なエラーメッセージを挿入します.

MSPReturnコマンドが評価されると,進行中の評価や他のすべての評価が直ちに終了され,引数が直接JSPから返されます.MSPReturnコマンドがひとつもなければ,評価結果は出力ストリームに挿入されます.

各評価の処理は,KernelTimeLimit設定パラメータから計算される時間のパラメータであるTimeConstrainedでラップされます.

Mathematica が何らかのメッセージや出力を生成すると,それらはMSPGetMessagesMSPGetPrintOutputでそれぞれ回収できるように保存されます.

msp:evaluateタグの結果はフォーマットされ,結果として返されます.以下の例では出力ページにその日の日付けが表示されます.

<msp:evaluate>
   Date[]
</msp:evaluate>

ひとつのmsp:evaluateタグで複数の日付けを計算したければ,別々のステップをセミコロン(;)で区切ります.最後の計算の結果がフォーマットされて出力ページに現れます.以下の例ではx+yという計算の数値結果が現れます.

<msp:evaluate>
   x = Sin[5.6];
   y = Sqrt[x];
   x+y
</msp:evaluate>

msp:evaluateタグの結果のフォーマットについては「評価のフォーマット」で詳しく説明してあります.

msp:allocateKernelスコープ内ではmsp:evaluatemsp:setmsp:getのすべてのタグで同じカーネルが使われます.このためそれぞれは互いに可視的です.この定義は/msp:allocateKernelでクリアすることができます.

msp:allocateKernel(タグクローズ)

msp:allocateKernelタグが閉じられると,次のステップで後処理が行われます.

Javaの例外

JSPの処理中にJavaの例外が投げられると,投げられた例外は捕えられ,カーネルはシャットダウンされた後に再スタートされます.それから例外が再度投げられ,場合によってはHTTPのリクエストと一緒に返されます.

MSPReturn

評価中にMSPReturnがあると,JSPの通常の出力の代りにその引数が返されます.

ContentTypeの設定

コンテントタイプが設定されます.これはMSPPageOptionsContentTypeオプションの設定によって,またはMSPReturnによって指定されます.デフォルトはtext/htmlです.

カーネルをクリーンにする

カーネルは再び使えるようにクリーンな状態にされます.つまり,リクエストとともに送られたパラメータの値がクリアされ,デフォルトコンテキストのすべてのシンボルが取り除かれます.これに加えて$Context$ContextPathが初期値に戻され,Javaオブジェクトの参照が削除されます.また,開かれたストリームはすべて閉じられます.

カーネルの解放

カーネルは再び使えるようにプールに戻されます.

msp:set

msp:setタグはJavaを使ってMathematica のシンボルを設定するためのものです.各msp:setタグはmsp:allocateKernelタグで割り当てられたカーネルを使ってその内容を評価します.カーネルが割り当てられていない場合は,リクエストがエラーページに転送されます.

このタグは以下の必須属性を持ちます.

上記に加え,以下の属性も設定しなければなりません.

次の例題では,Mathematica の変数varがJavaのint numで設定されています.

<msp:allocateKernel>

   <msp:set name="var" intValue="<%= num %>" />

</msp:allocateKernel>

先に挙げたmsp:set の例題もご覧ください.

msp:allocateKernelスコープ内ではmsp:evaluatemsp:setmsp:getのすべてのタグで同じカーネルが使われます.このためそれぞれは互いに可視的です.この定義は/msp:allocateKernelでクリアすることができます.

msp:get

msp:getタグはMathematica から値を取ってJavaに入れるためのものです.各msp:getタグは,内容を評価するようにmsp:allocateKernelタグによって割り当てられたカーネルを使います.カーネルが割り当てられていないと,リクエストはエラーページに転送されます.

このタグは以下に記した3つの必須属性を取ります.

次の例題では,タイプDoubleのJavaの変数dValueMathematica の関数Random[]の結果に設定されています.

<msp:allocateKernel>

   <msp:get name="dValue" type="Double" value="Random[]" />

</msp:allocateKernel>

先に挙げたmsp:getの例題もご覧ください.

msp:allocateKernelスコープ内ではmsp:evaluatemsp:setmsp:getのすべてのタグで同じカーネルが使われます.このためそれぞれは互いに可視的です.この定義は/msp:allocateKernelでクリアすることができます.

msp:includeClassicMSP

msp:includeClassicMSPタグはMSPスクリプトをJSPに入れるためにあります.MSPスクリプトは「以前のwebMathematica 技術」のセクションで説明してあるように,webMathematica を使う古い方法です.

このタグは以下のように2つの属性を取ります.

以下の例にはMSPスクリプトExamples/PlotSingle.mspの結果が含まれています.引数fun=Sin[x]&x1=10はMSPスクリプトに渡されます.

<msp:includeClassicMSP name="Examples/PlotSingle" arguments="fun=Sin[x]&x1=10" />

先に挙げたmsp:includeClassicMSPの例題もご覧ください.

msp:forwardClassicMSP

msp:forwardClassicMSPタグはMSPスクリプトをJSPから転送するためにあります.MSPスクリプトは「以前のwebMathematica 技術」に関するセクションで説明してあるように,webMathematica を使う古い方法です.

このタグは以下のように2つの属性を取ります.

以下の例はMSPスクリプトExamples/PlotSingle.mspに転送されます.引数fun=Sin[x]&x1=10はMSPスクリプトに渡されます.

<msp:forwardClassicMSP name="Examples/PlotSingle" arguments="fun=Sin[x]&x1=10" />

まとめ

ページ処理の概要は「webMathematica の技術」をご覧ください.