Commons-Jelly

Jelly

Community

Libraries

コンポーネント レポジトリ

Sandboxコンポーネント

日本語訳 (Translations)

オリジナル

Jelly 概要

JellyはXMLベースのスクリプトエンジンです。 基本アイディアは、XML要素が何かの関数を動かすJava BeanであるJava Tagと結びつくというものです。ここに例を挙げます。

public class FooTag extends TagSupport {    
    private int count;
    public void setCount(int count) {
        this.count = count;
    }
    public void doTag(XMLOutput output) throws Exception {
        for ( int i = 0; i < count; i++ ) {
            // evaluate body
            getBody().run( context, output );
        }
    }
}

そして、Jellyスクリプト内で以下のようにタグが使われます:

<f:foo count="123">
    something...
</f:foo>

Jexl・Velocity・pnuts・beanshellといったスクリプト言語や、JavaScript・JPythonといった BSF(Bean Scripting Framework) 言語を通じたインテグレーションと同じように、Jellyは、カスタムアクション(JSPカスタムタグと同じようなやり方)を通じて完全に拡張可能です。

また、Jellyは、XMLイベントを出力するため、SAX ContentHandlerをextendしたXMLOutputクラスを使う事を覚えておいてください。これによって、Jellyが、XMLコンテンツの生成・SOAPスクリプト・ウェブサイト生成に理想的なものになっています。 一つのJellyタグは、XMLイベントを生成し、消費し、フィルタリングし、変換します。これにより、幾分Cocoonに似たXMLの強力なパイプラインエンジンをもたらします。


予備知識

今日、独自のXML言語を定義してある種の処理を行う事が一般的のようです。 ここに、例を挙げます:

  • Ant
  • XSLT
  • XMLパイプライン言語
  • JSTL・JSPカスタムタグ
  • Latka・AntEater・類似のXMLベースのユニットテストフレームワーク
  • commons-workflow

Jelly開発の動機というのは、 様々な独自のアクションをサポートする為に拡張され得るシンプルなXMLベース処理エンジン を作りだすものでした。 完全修飾XML要素名をJava Bean(あるいはDynaBean)にマッピングし、 同XML属性名をプロパティにマッピングする事が出来ます。 一旦、Beanが生成され、プロパティがセットされると、TagインターフェースのdoTag()メソッドを通じて処理されます。 ですから、ループ処理・条件分岐・式評価といった低レベルなものから、 本体のPOST処理やHTTP・SOAP・JMS呼び出し・SQLデータベースへの問い合わせ、等といった高レベルな ものまで全ての種類の独自アクション処理をさせる事が出来ます。


比較

より深くJellyが何であるかを感じてもらうため、Jellyと他のスクリプトエンジンやJellyと 他のテンプレート技術との比較及び対比を行います。

類似点

  • Jellyは、JSPのカスタムタグライブラリの概念を使い、JSTL(JSP標準タグライブラリ)から 多くの経験を得ています。実際、JSTLはJellyの中で使う事が出来ます。

相違点

  • Jellyには、サーブレットやJSPとの依存関係がありませんので、 コマンドラインやAnt内部、アプレット内部やJavaコードが動くどこからでも、 Jellyを動かす事が出来ます。
  • Jellyタグは、JSPに比してよりシンプルに書いたり使ったりする事が出来ます。 JSPがスクリプトレットをサポートしなければなりません(後方互換性問題による)。 それによって、貴方が書いているタグ種類に基づく実装をするために、 ページコンテナから呼び出されるイベントベースのメソッドの複合セット と共に、3つの異なるインターフェース(Tag、BodyTag、IterationTag)を”裏の裏まで” 実装しています。 Jellyタグは、とても簡単です。TagSupportから派生させ、doTag()メソッドを実装すればよいのです。実にシンプルです!
  • Jellyは、スクリプトの形式・出力形式の両方がXMLによるものなので、 XMLでの作業・XMLベースのアプリケーション・XMLベースのウェブサービスとして 理想的なものです。
  • Jellyタグは、最適なパフォーマンス・簡単な妥当性チェックの為に本体を解析・コンパイルする事が出来ます。 ですから、タグは空白を無視したり本体の繰り返し作業をしたりコンパイル時に本体を変換したりする事が出来ます。 Jellyタグは、高機能なform(HTML)のビルド、あるいはSOAPマクロの作成、といった、 コンパイル時の本体の事前処理を行うシンプルなマクロとなる事もできます。

Velocity表現・ディレクティブ・スクリプトをサポートするカスタムタグを通じて、Velocityを Jelly内部で使う事が出来ます。 しかし、色々な点で、凌ぎを削る比較がなされます。

類似点

  • Jellyは、Velocity同様、Java風のマナーに従ってJavaオブジェクトを操作します。
  • Jellyは、Velocityによく似た表面的な構文(surface syntax)を持つ事が出来ます。例えば、Velocityに外見が良く似た共通ディレクティブや表現の為のJellyパーサーを作成する事が出来ます。

相違点

  • Jellyは、拡張可能なタグメカニズムを提供し、JSTL・XML・XPath・XSLT・SQL・SOAPサービス用スクリプトをサポートする事で、 より強力なスクリプティングを提供します。本質的に、Jellyは”ディレクティブ”を意味するXMLタグを使います。
  • Jellyは、JavaScript・NetRexx・Jythonなどの他のスクリプト言語のサポートを統合しています。

Antは、実に素晴らしいビルドシステムです。常に、”スクリプト”を登録しています。 Antがビルドシステムそのものになる事はありませんが、その代わり、”スクリプト” に焦点を合わせています。しかし、Jellyは色々な意味でAntに良く似ています。

両者はとてもうまい形で協力しあう事が出来ます。Jellyは、Antのスクリプトプラグインとして考える事が出来ます。Jellyは、Ant内部からAntタスクとして呼び出す事が可能で、Jellyスクリプトは他のAntタスクを書き出す事も出来、Antプロパティにアクセスし、他のJellyタグ(ロジック用、ループ用、Bean処理用、XPath用、SQL用、等)全てを使う事もできます。

類似点

  • 両者共にXML形式を表現言語(例:${foo.bar})と共に使います。
  • XML要素がJavaオブジェクトにマッピングされます。Ant・Jelly双方、シンプルなJavaコードを容易に拡張する事が可能です。

相違点

  • Jellyは、プラグイン可能な表現言語を完全にサポートします。デフォルトの表現言語は、JSP・ JSTL・JSFといった、条件分岐表現/Beanプロパティ操作/Maps・Collections・List・配列等の使用、をサポートする表現言語です。現在、Beanに対し、メソッド呼び出し等のVelocityに似た拡張を加える実装がJexlにはあります。Jellyは、各々に対するタグライブラリによって、Velocity・beanshell・JavaScript・Jython・pnuts・BSF等のように、他の表現言語・スクリプト言語をサポートします。
  • JellyにはネイティブXMLサポートが組み込まれています。Jellyは、XMLの解析・処理を XPath表現を使って(JSTLタグを通じて)行う事が出来ます。 また、JellyはXSLTに似た、XML処理の宣言型モデルをサポート(JSLタグを通じて)します。 Jellyタグ・Bean・AntタスクをXMLテンプレートの内部でDVSLと同じ様に使います。
  • Jellyには、もっと強力なタグやタスク間での情報受け渡しの協力メカニズムがあります。Jellyでは、変数がオブジェクトになり得、更に、変数スコープがネスト出来るため、ネストされたスクリプトがお互いにうまく動く事ができます。タグ・タスクは、Beanでカスタマイズ出来ますし、XMLの読み込み・書き出し・フィルタリング・変換も出来ます。ですから、Jellyタグは設定可能で、BeanとXMLで協力しあう事が出来ます。
  • Jellyタグは、動的タグをサポートします。SOAPコールを行う際の複雑な丸め込みといった反復型を避けるために、タグをJellyスクリプト内で定義出来ます。ですから、タグベースのマクロ機能をJellyは持っているのです。
  • 多くの異なるタグライブラリがシームレスに同じXML文書内で協力し合えるよう、Jellyは、XML名前空間を使います。これによって、AntタスクとJSTL・Jellyタグライブラリを混合したりマッチさせたり出来ます。全てのファイルが独自の表現言語を使っていても、一つのスクリプトで、XPathやJython同様、AntやJSTLからの表現言語と混合したりマッチさせたりする事が出来ます。
  • ここで明確に違いを強調しますと....Antはビルドシステムであり、Jellyはスクリプトエンジンです。


Jellyの使い道

Jellyには様々な使い道があります。考えられるものをここに挙げますと:

  • Antユーザーにより柔軟性のあるAntスクリプトを提供する追加ツール:実際、Jellyは既にMavenに使われており、現存のAntタスクの資産を保ちつつ、柔軟性の高いビルド機能を提供しています。
  • LatkaやAntEaterに類似した、HTTP・JMS・SOAP・XML・SQLベースのユニットテストフレームワーク
  • SOAPスクリプトエンジン・XML処理エンジン
  • XML・ページテンプレートシステム:もしかすると、Cocoon用のGeneratorの可能性あり
  • 静的コンテンツ生成用のAntから実行可能なJSTLの代わりとしての利用(超軽量)
  • ワークフロー・EAI・インテグレーション(commons-workflowと統合される可能性)
  • コード生成システム:XDoclet用の拡張スクリプトエンジン



Copyright © 1999-2007, Apache Software Foundation
Translated into Japanese by Tetsuya Kitahata , powered by Terra-International, Inc.
Original English Page would be found from HERE     --    ApacheNews    ASF プロジェクト一覧
Terra-International, Inc. -- テラ・インターナショナル
Special Thanks -- 【お問い合わせ/テキスト広告】