[連載]
初めてのEnhydra

第3回 XMLCアプリケーションの基礎




2.XMLCとは何か

 Enhydraのアプリケーションフレームワーク

 XMLCの説明に入る前に、まずはEnhydraのアプリケーションフレームワークと呼ばれる構造について説明しておきます。Enhydraはアプリケーションフレームワークと呼ばれる抽象的な多階層構造を採用することで、開発時の用途分離を実現します。この階層構造自体は特別独自のコンセプトを導入しているわけではありません。むしろアプリケーションサーバとしては一般的な構造になっているといえるでしょう。それぞれにはEnhydra特有の呼び方が付いています。各レイヤは「xxxオブジェクト」という形で呼ばれます。Enhydraのアプリケーションは以下のオブジェクトによって構成されます。

 XMLCの説明に入る前に、まずはEnhydraのアプリケーションフレームワークと呼ばれる構造について説明しておきます。Enhydraはアプリケーションフレームワークと呼ばれる抽象的な多階層構造を採用することで、開発時の用途分離を実現します。この階層構造自体は特別独自のコンセプトを導入しているわけではありません。むしろアプリケーションサーバとしては一般的な構造になっているといえるでしょう。それぞれにはEnhydra特有の呼び方が付いています。各レイヤは「xxxオブジェクト」という形で呼ばれます。Enhydraのアプリケーションは以下のオブジェクトによって構成されます。

●PO - Presentation Object
 POは、アプリケーションデータをブラウザにどのように表示するかを取り扱うオブジェクトです。単純な応答処理に関しては、このオブジェクトだけで実現することも可能です。

●BO - Business Object
 BOは、プレゼンテーションとデータベースの間を取り持ち、複雑なビジネスロジックを実現するためのオブジェクトです。

●DO - Database Object
 DOはその名のとおり、データベースアクセスを行うためのオブジェクトです。Enhydraのサーバ環境におけるアプリケーションと各オブジェクトの位置付けは、おおよそ下図のようになります。

Enhydraのアプリケーションでは、POは必須のオブジェクトになる

 Enhydraアプリケーションでは、PO(プレゼンテーションオブジェクト)は必須です。ビジネスオブジェクトとデータオブジェクトは必須ではなく、必要に応じて利用することができます。アプリケーションを3つのレイヤに分割することで、プレゼンテーション層とアプリケーションのデータを分離します。例えばページのレイアウトを変更した場合やデータベースの参照テーブルが変わった場合などでも該当部分のオブジェクトを修正するだけ済み、メンテナンスが容易になります。といっても、Enhydraが自動的にレイヤを分けてくれるわけではないので、アプリケーションを3つのレイヤに分ける設計が重要なポイントとなります。

 POはブラウザに表示するコンテンツを動的に生成するためのオブジェクトです。Enhydraはブラウザから.poで終わるURLのリクエストを受けると、その要求を対応するプレゼンテーションオブジェクトに渡します。例えば、http://www.air-beat.com/Login.poが要求されたときに、呼び出されるプレゼンテーションオブジェクトは、Loginです。このようにPOはそのリクエストを受け取って処理を行い、動的に生成したコンテンツをブラウザに返します。逆に、POとは最低限この機能を満たしているオブジェクトだということができます。この「機能を満たしたオブジェクト」とは、実際には次のインターフェイスを実装したJavaオブジェクトのことを指します。

com.lutris.appserver.server.httpPresentation.HttpPresentation

 このインターフェイスには、run(HttpPresentationComms)というメソッドが定義されており、これに処理を記述することにより動的なコンテンツの生成を行います。

 POの構造としては以上のとおりですが、実際にはまずもととなるコンテンツ(HTMLファイルなど)があり、その一部を動的に変更してその結果をブラウザに返す、といった処理形態になるのが普通です。その場合は、もととなるコンテンツとそれに対して変更を加えブラウザへ応答を返す処理を行うオブジェクトの2つの要素でPOが構成されることになります。その仕組みを実現するためにコンテンツも処理オブジェクトも実際にはJavaオブジェクトとして実装されることになります。そこで必要となるのが、Enhydraを特徴付けているXMLCなのです。

 XMLCが行うこと

 XMLC(XML Compiler)は、XMLまたはHTMLで記述されたコンテンツからJavaのクラスを生成するためのツールです。生成されたクラスは元の文書構造を忠実に再現することができます。また生成されたクラスはW3Cで標準化されているDOMの定義に従ったインターフェイスを持っていて、アプリケーション実行時に動的にそのコンテンツを変更することができるようになっています。基本的にW3Cが提供するAPIの利用のみで、望みどおりにコンテンツを変更することができますが、XMLCはさらに属性の変更などに関する追加のAPIを用意していて、より生産性の高い環境を提供しています。

 XMLCによって、出力するHTMLの構成を管理するクラスと、HTMLの中にに動的にコンテンツを埋め込んでいくための処理を行うクラスを分離して開発することが可能になります。これによって、プレゼンテーション層における分業、即ちデザインと処理の分離開発を進めることが可能となるのです。これはJSPなどと比較しても非常に大きな利点となっています。

 もう少し詳細に説明しましょう。あるHTMLファイル(a.html)をXMLCに通してやると、その構造を出力するためのJavaソースコードが生成されます(a.java)。このJavaソースコードを普通にコンパイルしてやればJavaクラスの出来上がりなのですが、それだけではJSPと比較しても何ら新味はありません。実はXMLCはそのコンパイル時にちょっと気の利いたことをしてくれます。

 XMLCは読み込んだHTML文書内に記述されているid属性を見つけると、そのid属性をJava側で操作するホットスポットであると見なして、そのホットスポットを外部クラスから操作するためのメソッドを用意してくれるのです。

 例えば、次のようなHTMLがあったとします。

・・・
<H1 id=aisatsu>こんにちは</H1>
・・・

 これをXMLCに通して作成されたJavaクラスは、

  • getElementAisatsu()メソッドで値を取り出す(この場合だと最初に実行すると「こんにちは」を返す)
  • setTextAisatsu()メソッドで引数に指定された値で、ターゲットid属性のタグのテキストを置き換える(setTextAisatsu("こんばんは") とすると、<H1>こんばんは</H1>に置き換えられる)

というような処理を行うためのメソッドが用意されるのです。これには特別なことはまったく不要です。単純にHTMLファイルやXMLファイルなどサポートされている形式を読み込ませればよいだけです。

 さて、このメソッドを操作するにはどうしたらよいでしょうか。そのためにEnhydraはPOを2つのクラスに分離しています。1つはこの文書構造を出力するためのクラス。もう1つがrun()メソッドを実装するクラスです。先述したように、.poで終わるURLがリクエストされると、Enhydraはその名前に対応したJavaクラスのrun()メソッドを呼び出します。これは実際にはServletと同じ仕組みが使われます。このrun()メソッドの中で、XMLCによって生成された各種のメソッドを操作してやればよいのです。

 参考までに、XMLCが生成するほかのメソッドもいくつか紹介しておきましょう。

  • getElementXXX ( )
    XXXで指定されたid属性値を持つ要素を得ます

  • setAttribute( )removeAttribute ( )
    自要素に属性を設定、または削除します

  • getParentNode ( )getChildNode ( )
    自要素のすぐ上、またはすぐ下の階層にある要素を得ます

  • appendChild (Node)
    自要素のすぐ下の階層に、Nodeで指定する要素を追加します

  • cloneNode(boolean)
    自要素の複製を生成します

 では、あまり長々と説明していても余計に混乱すると思いますので、実際にコードを書いてみましょう。

2/5
3.実際にアプリケーションを作成してみる

初めてのEnhydra(第3回)
  1.Enhydraの最新動向
日本語版Lutris Enhydra 3.5が出荷される
2.XMLCとは何か
Enhydraのアプリケーションフレームワーク
XMLCが行うこと
  3.実際にアプリケーションを作成してみる
サンプルアプリケーションを実行してみる
“Hello XMLC”を作成してみる
  4.インタラクティブなFormの作成
入力した値を表示するアプリケーションを作成する
  5.コンポーネント化で開発効率を上げる
ElementGeneratorの作成



連載記事一覧

 



Java Agile フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Java Agile 記事ランキング

本日 月間