<% Include("/hsphere/local/home/terraint/common.phps");%> Jakarta BSF -- Java Bean Scripting Framework -- - BSF Documentation
Jakarta BSF

Jakarta BSF

ダウンロード

Jakartaプロジェクト

参加するには

日本語訳 (Translations)

オリジナル

Bean Scripting Framework

Bean Scripting Framework (BSF) は、Javaアプリケーションに措いてスクリプト言語をサポートする為の一連のクラス群で、スクリプト言語からのJavaオブジェクト・メソッドへのアクセスも同時に担当します。


BSFアーキテクチャ概要

BSFの主要なコンポーネントは2つあり、BSFManagerBSFEngineです。

BSFManager は、管理下で動作している全てのスクリプト処理エンジンを取り扱い、Javaオブジェクトへのアクセスをスクリプトに許可するオブジェクトレジストリをメンテナンスします。BSFManager クラスのインスタンスを生成する事で、Javaアプリケーションはスクリプト・サービスへのアクセス権を得る事が可能となります。

BSFEngine は、言語がBSFによって使用されるようにする為に実装されなければならないインタフェースを提供します。このインタフェースは、スクリプト言語の能力のアブストラクションであり、スクリプト処理の一般操作や、スクリプト言語エンジンの処理コンテキスト内でのオブジェクト登録を許可するものです。

アプリケーションは1つのBSFManagerをインスタンス化し、複数の異なるスクリプト言語を処理する際、BSFEngineインタフェースを通じて行います。更に、BSFEngineで扱われるスクリプト言語は全て、BSFManagerに登録されているオブジェクトを認識しており、これらのスクリプト言語の処理ステータスはBSFManagerの存続期間中、維持されています。


インストール

BSFは、スタンドアローンでも、クラスライブラリとしても、アプリケーションサーバーの一部としても使用することが出来ます。クラスライブラリ、あるいはスタンドアローンのシステムとして使う場合、ただ単にbsf.jarファイルのコピーをBSFウェブサイト(英語)からダウンロードし、そのJarファイルを、お望みの言語用のクラスファイルやJarファイルと共に、classpathに入れます。

BSFをTomcatサーブレットエンジンの一部として使う場合、現在のところ、BSFウェブサイトから、JasperによってBSFを呼び出し可能とさせるためのパッチをダウンロードしなければなりません。 この操作手順については、予めビルドされたバイナリを伴って、ウェブサイトに間も無く公開される事でしょう。これ(訳注:ビルド・バイナリ)が、近い将来Tomcatと統合される事を望んでいます。


BSFの使用
BSFとJSP

BSFを使用可能にしてアプリケーションサーバーをセットアップした後、サポートされるスクリプト言語のどれを使ってもJSPが書けるようになります。Javaを使ったJSPと、スクリプト言語を使ったJSPは、若干異なります。

先ず、JSPに措けるpageディレクディブのlanguage属性を、お望みの言語にセットしなければなりません。例えば、

<%@ page language="javascript" %>

とすると、JSPで使われる言語がJavaScriptにセットされます:JSPでの全てのscriptletあるいはexpressionsはBSFに渡され、同様に処理に際してコードはRhinoに渡されます。

JSPの暗黙のオブジェクトの標準セットは、BSF内で使用可能です。スクリプト言語はJSP内でコールされたかどうかわからない為、これらの暗黙のオブジェクトは生成されるページに関する入出力用に使用されなければなりません。例えば、JSPによって生成されるページ内にテキスト行をプリントするためには、暗黙のoutオブジェクトのprintln()メソッドを使わなければなりません。

所与のJSP内で複数の言語をサポートすることが出来ます;これは、BSFのtaglibsを使うことで達成されます。taglibsは、Jakarta Taglibsプロジェクトで入手可能です。BSFのtaglibは、2つのタグを提供します:scriptlet及びexpressionです。これら両方、必須であるlanguage属性を有しており、language属性はscriptletあるいはexpressionタグ毎に使われる言語を指定する為に使用されます。


Servlet及び他のアプリケーション

Using BSF in servlets or applications is also quite simple. In order to provide an application with scripting support, you need to import the BSF class hierarchy and instantiate a BSFManager object. After instantiating the BSFManager, you register or declare any Java objects to be made available within the scripting engine. Then call either one of the eval() or exec() BSFManager methods (depending on whether you want to evaluate a script and have the value of the evaluation returned, or execute a script). Alternatively, you can call the loadScriptingEngine() method in order to get an object implementing the BSFEngine interface for the desired scripting language. You can then call the exec() or eval() methods of BSFEngine to run the script.

Additionally, BSF declares an object named bsf within a scripting engine's execution context, which represents the BSFManager that is associated with the scripting engine. This object provides all of the methods and properties associated with the BSFManager to the script. However, the most used method within scripts is usually lookupBean(), which is used to access objects in BSF's object registry.

BSFManager内で最も重要なメソッドは:

  • BSFManager() - BSFManagerのコンストラクタ
  • eval() - スクリプトを評価し、その値を戻すのに使われる
  • exec() - スクリプトを実行するのに使われる
  • loadScriptingEngine() - お望みのスクリプト言語用のBSFEngineを戻すのに使われる
  • registerBean() - BSFのオブジェクトレジストリにオブジェクトを追加する
  • lookupBean() - BSFのオブジェクトレジストリからオブジェクトを引っ張り出す
  • declareBean() - ロードされたスクリプト言語のコンテキスト内に暗黙のオブジェクト(lookupBean()を通じてアクセスする必要の無い)を生成する

その他、使う頻度が比較的少ないBSFManager内のメソッドとしては:

  • apply() - 匿名の関数を呼び出す際に使われる
  • compileExpr() - (言語)表現をCodeBufferオブジェクトにコンパイルする際に使われる
  • compileScript() - 上のcompileExprににているが、スクリプトをCodeBufferオブジェクトにコンパイルする際に使われる
  • compileApply() - 上述の2つと似ているが、匿名関数をCodeBufferオブジェクトにコンパイルする際に使われる

好奇心旺盛な方向けの話ですが、CodeBufferは、生成されたJavaコードを格納するためにBSFによって提供されるクラスです。

BSFManagerexec(), eval(), apply()メソッド(compileExecなどといったcompileのついたメソッドも同様に)は、BSFEngineインターフェースによって表現される対応するメソッドのラッパーとなります。プログラマがloadScriptingEngine()を通じて明白にスクリプトエンジンをロードした場合、BSFEngineに起因するexec()メソッドやeval()メソッドを適切に使うことが出来ます。



スクリプト言語へのBSFサポートの追加

独自のスクリプト言語をBSF対応にさせる為には、まず始めにその言語に対するBSFEngineの実装クラスを書かなければなりません:サンプルに関しては、BSFソース頒布版にて入手可能です。

普通、スクリプト言語の作者がBSFEngineImplクラス(BSFEngineを実装)を拡張し、eval()メソッドを実装するだけで良いとも言えます。しかし、実際はBSFEngineで指定される以下のメソッドは、殆ど一般的に実装されるでしょう:

  • initialize() - 根底となるスクリプト言語エンジンをセットアップするのに使われます
  • call() - スクリプトエンジンの関数或いはメソッドを呼び出す際に使われます
  • eval() - スクリプトの評価に使われます
  • exec() - スクリプトの実行に使われます
  • declareBean() - スクリプト言語内に暗黙のオブジェクトを作成するのに使われます
  • undeclareBean() - スクリプト言語から暗黙のオブジェクトを破棄するのに使われます

一旦、スクリプト言語エンジンへのラッパーを実装すれば、アプリケーションでBSFManagerをインスタンス化し、registerScriptingEngine()メソッドを通じてエンジンにそれを登録します。その後、BSFの通常のセマンティクスを通じてアプリケーションでオリジナルの言語を使うことが出来るでしょう。


スタンドアローン・スクリプト

BSFは、スクリプト言語そのものを実行する機能を備えています。単にjava org.apache.bsf.Mainを実行すれば、スクリプトをどのように知らせるかの説明を伴ったヘルプ・メッセージが流れます。


デバッグ

昨年中(2001年)ずっと、デバッグ機能サポートが追加されてきました。 現在のバージョンでは、唯一JSPでのJavascriptのデバッグ機能のみがサポートされています。複数のスクリプトエンジンに対する一般的なデバッグ用フレームワークが使用可能となるAPIのデザインに焦点があてられてきていますが、これはBSF3.0が最終的に目指すところでもあります。BSF2.3でサポートされるデバッグ機能に関して言えば、原始的なコマンドラインデバッガ(名前はjsdb)であり、BSFManagerで管理されるデバッグ用サーバーに対するクライアントとして動作します。

BSFデバッグエンジンを使った製品版のデバッガの例は、 http://www.eclipse.org/にあります。



Copyright © 1999-2005, Apache Software Foundation
Translated into Japanese by Tetsuya Kitahata , powered by Terra-International, Inc.
<% orig();%>