Velocity

Velocityについて

コミュニティ

ドキュメント

比較

ツール

日本語訳について

JavaBeans

JavaBeans は MVC デザインパターンに従うように JSP ページから Java オブジェクトを 使用する方法です。この方法を使用する目的は Pull モデル (日本語訳) と同様のものを実装することです。例えば、

<jsp:useBean id="name" scope="page|request|session|application"
             class="className" type="typeName">

上記のコードの構文を調べて、すぐ最初に思い浮かぶのは scope 属性の使用です。 スコープに関するプログラミング概念がわかっている HTML デザイナがどのくらいいるでしょうか? Web デザイナの大部分は CGI の仕組についてほとんどわかってないと思っておいて 間違いありません。だからといって、彼らを軽んじているわけではありません。 そうではなくて、ただ単にデザインとソフトウェア工学は全く異なるスキルセット であると指摘しているのです。Java プログラマが印刷や Web で表示に問題ない カラーパレットを選べることを期待しないですよね?

このような議論に対する一般的な反応は、デザイナは単にこうしたタグを無視して、 他の人が定義・実装すればいいのではないか、というものです。 この方法の問題は、デザイナがうっかりアプリケーションが壊してしまう 可能性があり、その場合、複雑なスコープの問題はなかなか表にでないことがあるため、 デバッグしづらいということです。

Java のコード:

public class HelloBean {
  private String name = "World";

  public void setName(String name) {
    this.name = name;
  }

  public String getName() {
    return name;
  }
}

JSP のコード:

<jsp:useBean id="hello" class="HelloBean">
  <jsp:setProperty name="hello" property="*" />
</jsp:useBean>

<HTML>
<HEAD><TITLE>Hello</TITLE></HEAD>
<BODY>
<H1>
Hello, <jsp:getProperty name="hello" property="name" />
</H1>
</BODY>
</HTML>

上記のコードは、ページで Bean を使う非常に単純な例を示しています。 この Bean にいくつかのプロパティを渡して、それから結果を取り出します。 これは JSP を使う際の正しいやり方です。 しかし、Velocity でまったく同じことをする例を見れば、 プロパティを取り出すためだけに必要な余分なタイピングが いささかバカらしくなります。 もちろん現実には、タイピングを過去の遺物とする、GUIベースの ドラッグ&ドロップ ツールが、前々からあります。

現在、JSP と Struts での開発向けに、 素晴らしいドラッグ&ドロップビュー機能を提供する商用のソリューションがいくつかあります。 しかし、これらのツールの多くは、まだ第一世代のツールです。 これらのツールは多くの場合は問題の一部しか解決しておらず、 GUI では難しいことや、GUIでは不可能な場合に関して核心まで掘り下げる必要があります (Tango という製品を覚えていませんか?) [訳注: Tango はデータベースアクセスを目的とした CGI のプログラミングツール]。 また、これらのツールが生成するコードは、高い負荷のサイト向けに最適化されていない ことが多く、既存のアプリケーションを大規模向けに拡張しようとすると、 完全に書き直しが必要になることがあります。繰り返しますが、 決めるのは我々ではなくあなたです。ここでもう一点注意すべきことは、こうしたツールは高価 (マシン1台あたり1,000ドルをこえる) であるということです。 ドットコムならぬドットボムな経済状況で、 こうしたツールに実際にお金を費やす人がいるのでしょうか?

Java コード:

context.put ("hello", new HelloBean());

Velocity コード:

$hello.setName("*")
<HTML>
<HEAD><TITLE>Hello</TITLE></HEAD>
<BODY>
<H1>
Hello, $hello.Name
</H1>
</BODY>
</HTML>

この例では、HelloBean() オブジェクトを作成してコンテキストに設定しています。 そうすると、テンプレートのランタイム実行時に $variable として利用できます。 この変数は、オブジェクトでイントロスペクションを行うことで、JavaBean仕様を使用可能です。 例えば、Velocity では Bean スタイルのイントロスペクションを使って、 メソッド呼び出しを $hello.getName() から上記に示したように短縮できます。

Velocity を Turbine と組み合わせると、HelloBean オブジェクトは設定オプションとして、 処理中のどの時点でもコンテキストに加えることができます。これによって、 コンテキスト内のオブジェクトで「スコープ」を提供できます。

JSP で JavaBeans を使う際のもう一つの「なるほど…そういうことか!」 について、ジェイソンの書籍から再び引用します。

注意: サーバ (Tomcat 3.2を含む) によっては、
「セッション」スコープまたは「アプリケーション」スコープの Bean
において、Bean の実装を変更すると、変更後のリクエスト時に
ClassCastException になるかもしれません。この例外が発生するのは、
生成された Servlet コードは Bean のインスタンスを
セッションやアプリケーションから取り出した形でキャストしなければならず、
その結果、セッションやアプリケーションに格納されている古い Bean の型が期待される新しい
Bean の型とマッチしないためです。一番簡単な解決策は、サーバを再起動することです。

[どちらを選ぶかは] あなたが判断してください。

[ エラー処理 <- 前 | 次 -> サンプルアプリケーション ]



このドキュメントは、 熊坂祐二 、 高橋達男 が訳しました。
コメントがある場合は、 report@jajakarta.org までお願いします。
オリジナル英文 Copyright © 1999-2003, The Apache Software Foundation