Commons-Jelly

Jelly

Community

Libraries

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

Sandboxコンポーネント

日本語訳 (Translations)

オリジナル

Jelly : Java and XML based processing engine

Jellyは、Java・XMLベースのスクリプトエンジンです。 Jellyは、JSPカスタムタグ、Velocity、Cocoon、Ant、XDoclet内部のスクリプトエンジンから多くのアイディアをもらいました。 Jellyは、コマンドラインから、AntやMavenの内部から、Servletの内部から、ウェブサービスから、JMS MessageListenerから 使用することが出来ますし、また、独自のソフトに組み込んで直接使う事も出来ます。

Jellyは、Jaxenを通じたXPathやJavaScript、beanshell、Jythonといった表現言語(expression language)をサポートし、更に、Velocityに似たJexl と呼ばれる表現言語をネイティブサポートします。Jexlは、JSP・JSTL・JSF表現言語のスーパーセット(superset)です。

Jellyは、JSPカスタムタグやAntタスクと同じようなやり方で、カスタムタグを通じて完全に拡張可能です。Jellyはとてもシンプルですが、ServletやJSPとの依存性はありません。ですから、Velocityを更にXML化したもの(ディレクティブがXMLタグである)によく似ていると考えられるかもしれません。あるいは、より良い表現・ロジック・ループ処理でのAntタスク処理用の柔軟なエンジンであると思われるかもしれません。

Jellyはまた、Cocoonと同様、XMLのパイプライン構造に基づいています。ですから、XML処理、ウェブサービスのスクリプティング、動的ウェブ生成、あるいはCocoonのようなコンテンツ生成の一部として、理想的なものなのです。


How it works

Jellyスクリプトは、スクリプトに置き換えられるXMLドキュメントです。ですから、テキスト・XML・HTMLなどに変換される動的XMLイベントを生成する事が可能です。

Velocity同様、そのXMLドキュメントには動的な出力をする表現を含ませたり、変数を使う事が出来ます。

<document time="${now}">
  Welcome ${user.name} to Jelly!
</document>

XMLタグ要素は、ある種の動的処理を実装するJavaコードに結びつける事もできます。これを行うには、JellyのTagインターフェースを実装したJavaBeansであるJelly Tagsを実装するだけです。

Jellyスクリプトを実行する場合、 Jelly BeanのプロパティはXML属性を使って設定できます。 そして、そのTagはdoTag()メソッドを呼び出す事で動きます。 次に、いくつかの処理を行い、本体(XML要素の中身)を何度でもinvokeすることが出来ます。 ですから、Jelly TagsはJSPカスタムタグに非常に良く似ており、 Velocityのディレクティブに類似しています。

AntタスクをJellyスクリプトで使うAntタグライブラリがあります。

また、Jelly Tagsは、Jellyスクリプトの中でdefineタグライブラリを使う事で、動的に実行時に定義する事が出来ます。シンプルながらパワフルなマクロをJellyスクリプトのみを使って容易に作り出す事が出来ます。

タグライブラリを定義する事で、Jelly Beansを作成可能です。Jelly Beanは、Jellyタグと結びついた通常のJava Beanがある場所にあります。BeanがRunnableインターフェースを実装、あるいはinvoke可能なメソッド(run(), invoke(), execute())を持っていれば、Beanは、タグによってもinvokeされます。

例えば、以下のBeanを作成したと仮定しましょう:

public class MyTask {

    // 'doIt' method that does some function/task...
    public void run() throws SomeException {
        // do something...
    }

    // Properties, can be any type
    public void setX(int x) {
        this.x = x;
    }
    public void setY(String y) {
        this.y = y;
    }
}

新規タグライブラリを定義し、以下のように新規タグを使って、このBeanをスクリプト内で使う事が出来ます:

<j:jelly xmlns:j="jelly:core" xmlns:define="jelly:define" xmlns:my="myTagLib">

  <define:taglib uri="myTagLib">
    <define:jellybean name="foo" className="MyTask"/>
  </define:taglib>

  Now lets use the new tag
  
  <my:foo x="2" y="cheese"/>

</j:jelly>

このメカニズムは、Antに措ける<taskdef>の使用とよく似ていますが、ただ、Beanは全ての事が出来、Antタスクから派生させる必要が無く、引数の無い'doIt'形式のメソッド(訳注:run(), invoke(), execute()など)のJavaオブジェクトになり得ます。それどころか、メソッド名は、<define:jellybean method="doIt"/>を通じてセット出来ます。


JSTL

JSTL は、JCP(訳注:Javaコミュニティプロセス---Sun Microsystems社が主催する、Java技術に関する標準仕様を定める機関)プロセスを通じ標準化されるJSP標準タグライブラリです。

Jellyは、式評価、条件分岐、ループ、更にはBeans・XML・XPath・SQLの処理、といったコアの機能を実行するため、JSTLタグのコレクションを使います。

Jellyは、JSTLスクリプトを実行するためのスタンドアローンかつ軽量のエンジンとして機能します。Jellyは、コマンドラインあるいはAntから実行可能であり、SOAPサービス、サーブレットエンジン、JMS MessageListeners、あるいは独自のソフトウェアに容易に埋め込まれます。

加えて、Jellyによって、JSTLタグがウェブアプリケーションやウェブサービス用のユニットテストスクリプトの生成に使えるようになります。


Ant

Jellyスクリプト内でAntタスクを使うためのJellyタグライブラリ同様、JellyをAntから呼び出すJellyTaskがあります。

JSTL内の表現言語のスーパーセットであるJexl表現言語のサポートと、Ant表現言語のサポートは、AntプロパティがBeans・プロパティ・コレクション・メソッド呼び出し等を行う一方で、AntプロパティがJellyスクリプト内でシームレスに使われる事を意味します。

Ant・Velocity・JSPの組み合わせに似た、よりフレキシブルなAntのスクリプト処理エンジンであるとJellyが考えられてもおかしい事ではありません。


XML and Web Services

Jellyは、JSPやVelocityのようにテキストベースに基づいているというよりは寧ろ、Cocoonのように、XMLイベントパイプラインアーキテクチャ(SAX)に基づいています。JellyタグはXMLイベントを使い、それを吐き出す事を意味します。夫々のJellyタグはXMLソース・出力結果・フィルタ・変換として振舞う事も出来ます。

また、XMLイベントパイプラインアーキテクチャに基づいているため、余分な起動時の解析無しに効率的にXMLを処理する事が出来ます。一旦Jellyスクリプトが解析されると、キャッシュされますので、いつ動かされようが入力や出力に解析を通常必要としません。

加えて、Jelly Stylesheet Library(JSL)と呼ばれるタグライブラリがあります。これは、パターンマッチ手法を使ったXMLドキュメントのXSLTスタイルの宣言処理の為のものです。

defineタグライブラリによる動的タグ生成機能を使えば、SOAPサービスをシンプルなタグベースマクロ言語によって簡単に書くことが出来ます。

例えば、以下の一部のJellyスクリプトは、動的に本文を評価しています(Jellyタグ、JSTLあるいはAntタスクを含める事が出来る)。そして、本文を正しいSOAPメッセージに変換し、SOAPサービスを呼び出して、結果をきちんとXMLの体裁にします。

<babelfish:translate from="en" to="fr">
  Welcome ${user.name} to Jelly!
</babelfish:translate>

JellyスクリプトはXML文書なので、Jellyは自分自身を処理できます。これら全てによって、Jellyは、XMLサービス/Webサービスの良い選択肢となっています。


Other uses

Jellyが、包括的かつパワフルなXML処理/変換エンジン、Webベース/XMLベースのスクリプトエンジン、かつ、Webアプリケーションテスト用のユニットテストフレームワーク、 であって欲しいと考えています。

現在、新バージョンのMaven の内部でJellyが使われています。これによって、"Antタスク"という資産を保持しながらフレキシブルでパワフルなビルド・メカニズムを提供することを可能としています。



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 -- 【お問い合わせ/テキスト広告】