LASZLO in Actionで本格学習
ここではOpenLaszloについてMANNINGから今年出版されましたLASZLO in Actionを使って本格学習を行います。
この本の読み方
LASZLO in Actionは18章で構成され、これらの章は
5部に分かれており、2個のオンライン appendixが付属
しています。
オンライン appendixはHTTP サーバーアプリケーション
情報を提供します。
各々の章にはLaszlo Marketアプリケーション
を逐次的に内容を補強してゆく素材が提供されます。
後の章ではHTTP サーバーと接続します。appendixで
説明されているように、このサーバーはデータベース
と接続されて、
アプリケーションにXMLデータを提供します。
この本を最後までこなした時には、最適化された
Laszlo Marketオンラインストアを構築したことになります。
このオンラインストアは見映えが良いブランドイメージを持ち、しかもFlashとDHTML
両方のプラットフォームが実行できるものです。
NetBeans と LASZLO in Action で本格学習:
- 第1部
本の第1部は第1章から第5章で構成され、「Laszloの基礎」
で、デザインと初期のプロトタイプを
構成するための
Laszlo LZXの基本を説明します。
第一章からだい14章までのBasicな部分のソースコードをここにおきます。
第1章はLaszlo
のRIAの世界での位置づけとアーキテクチュアを説明します。
まずRIAの位置づけです。この図でWebベースでの電子マーケットからの商品の購入ステップを示します。
この図が示すように一回の購入をするのに7回のステップを要し、従来のWebベースではステップ毎に画面遷移を必要とし、
その度にWebサーバーとの通信があって画面を更新しなおします。このわずらわしい画面遷移が消費者の購買意欲をそいでしまう要因の
の75%を占めます。
この画面遷移を不要とするのがAjax技術であり、RIAとはこのAjax的なアプローチに加え、Flashなどの動く要素を加えて画面をリッチ
にして購買意欲を高めます。
OpenLaszloはJ2EEのサーブレットの技術を使用してXML形式のソースコードをコンパイルしてダイナミックな
Webコンテンツを生成するということでは従来のJSP,サーブレットと同様の技術体系にあり、Flexも同じです。
ですが、FlexがFlashコンテンツのみを生成するのに対して、Flashに加えてDHTMLコンテンツを生成可能であり、
いわゆるマルチRIAということでユニークです。これを図示します。
第2章ではLaszlo LZXアプリケーションの
宣言型、命令型のアーキテクチュアの解説です。これを図示します。
第3章では
Laszlo LZXの言語学的な観点をもって、抽象的なもの
からハンズオン的なアプローチへと移行します。
これを図示します。
第4章ではLzViewオブジェクトの概要です。これはLaszlo
のすべての見えるオブジェクトのスーパークラスです。
第5章の最後にさしかかる頃にはLaszlo Marketの
機能のプロトタイプの骨格を構成していることに
なります。
ここではLaszlo Marketのすべての操作が
明確に表示されます。
画面間の状態遷移を制御するためにgCOntrollerというLzNodeクラス<state>タグが使用されている。
サンプル http://localhost:8080/OpenLaszlo411App/chap5/main.lzx で起動。
LaszloMarketの基本フレームが現れ、checkoutボタンが効きます。chap5サンプル画面
- 第2部
第2部は第6章から第9章で構成され、「Laszlo Market」の
プロトタイプ"で、初期のプロトタイプの骨格を形成
します。
第6章ではビジュアルなスクリーンの
色々なパターンでの見え方を構成するのにレイアウトオブジェクトを使います。
第7章はプレゼンテーションに
関しての様々な問題を解決する、広範囲に渡った
インターフェースコンポーネントです。
サンプル http://localhost:8080/OpenLaszlo411App/chap7/main.lzx で起動。
checkoutボタンに加え、Billing Information,shipping Information の中身が見れます。chap7サンプル画面
第8章では
イベントハンドラー、メソッドイベント、属性の関係を
示しながら、パブリッシャー-サブスクライバー間の
コミュニケーションについて探求します。
第9章では
どのようにしてユーザーと
システム入力機能とをサポートするサービスが提供されているかを示します。
最終的にこのサービスによりLaszlo Marketに
典型的なLoginwindowを付加してドラッグアンドドロップ
ネットワークの構築を
開始します。このネットワークは
この後の章毎に強化されてゆきます。
サンプル http://localhost:8080/OpenLaszlo411App/chap9/main.lzx で起動。
LaszloMarketの基本フレーム表示の前にLogin画面が追加されました。chap9サンプル画面
- 第3部
第3部は第10章から第12章で構成され、「Laszlo dataset」
を解説します。
Laszlo datasetはLaszloのデータバインディングシステム
を使ってデータ操作を行う手法です。
第10のLZXコード
内にXMLデータを内包することから始めます。
サンプル http://localhost:8080/OpenLaszlo411App/chap10/main.lzx で起動。chap10サンプル画面
Product List,Media Playerの中身が表示されます。
第11章
では前章のデータバインディング技術を拡張してデータバインディング
関係を操作して、XMLドキュメントの各要素を
行ったり
来たり(traverse)します。
サンプル http://localhost:8080/OpenLaszlo411App/chap11/main.lzx で起動。
Product Listの項目をクリックするとその詳細がProduct Detailsに表示されます。chap11サンプル画面
第12章では「スコアボード」アプリケーションの
概要です。ここではセントラルリポジトリを作成します。
この
場合、情報を見るためのインターフェースメソッドを
提供するdatasetです。
このセントラルリポジトリがLaszlo Market
のショッピングcartを実装します。
サンプル http://localhost:8080/OpenLaszlo411App/chap12/main.lzx で起動。
Product DetailsのAdd to CartをクリックするとShopping Cartにその項目が追加され、自動集計されます。chap12サンプル画面
- 第4部
第4部は第13章から第15章で構成され、「DHTMLとFlashの統合」
です。ここでは使い勝手について論じます。
第13章では
アプリケーションの操作においてアニメーションがいかに物理的な
感覚にインパクトを与えるかを説明します。
というのは
操作するということは実世界の物理的なものを
取り扱うことに通じるので、動いて見えることがアプリケーション
の操作を直感的にします。
第14章では対象となる多くの方に
受けるように、アプリケーションにブランドイメージの付加・味付けをします。
それに加えて、異なったプラットフォームでも同等の
見え方をするための問題点を検討します。
サンプル http://localhost:8080/OpenLaszlo411App/chap12/main.lzx で起動。
Shopping Cartの下にTrashボックスがアイコンとして置かれ、Shopping Cartから項目をドラッグアンドドロップで取り去ることが
でき、このときTrashボックスにアニメーション効果が現れます。
chap14サンプル画面
第15章
では複合的でプラットフォームをまたがって使用
できるアプリケーションの優位性と、一つのプラットフォームに
固定されている場合の短所について述べます。
次のサンプルでは同じソースコードでFlashでもDHTMLモードでも動作できるように、 browse.lzx,
checkout.lzx,
mediaplayer.lzx
sectionheader.lzx,
resources.lzx の5つのモジュールに<switch>タグが使用されています。
サンプルとしてLaszloMarketを載せます。これはオンライン補助教材のappendixBのソースコードに付属していたものを
Laszlo4.1.1にバージョンアップさせたものです。
まずそのまま実行すると"lzmodules/validator_check.lzx:37:64: checkZipcodezipcodevalidator"というエラーメッセージが出ます。
これに対しては、Laszlo_Market_by_chapter/chap17のREADMEに従って
$LPS_HOME/lps/components/incubators/validators
の位置にchap17にあるzipcodevalidator.lzxを置いてvalidatorsディレクトリ内のlibrary.lzxを編集してやります。
また、Laszlo_Market_by_chapter/resourcesをwebルートにコピーして置かないと、DVDの画像が見えません。
このバージョンではProductListのDVDをMediaPlayerにドラッグアンドドロップすると映像が再生されます。
但し、そのためにはオープンソースFlashメディアサーバーのRED5をインストールしておく必要があります。
起動をFlash版は "http://localhost:8080/OpenLaszlo411App/rails_chap15/flash.jsp"または
DHTML版は "http://localhost:8080/OpenLaszlo411App/rails_chap15/index.jsp"とします。
こうして表示したLaszloMarketの画面を示します。ソースコードはここです。
どういう訳かdhtml版が"WARNING: this page uses lzOptions.ServerRoot. Please use the second argument of lz.embed.lfc() instead."というエラーメッセージが出て起動できない。<-- mediaplayer.jsp,lzmodules/mediaplayer.lzx を修正してOK。
だが、LaszloMarketのmediaplayer用のwindowにmediaplayerが現れない。
<-- lzmodules/mediaplayer.lzxの
<html name="videoplayer" width="100%" height="100%" visible="${gController.currstate == 'Main'}" src="mediaplayer.jsp"/>
のvisible="${gController.currstate == 'Main'}"をvisible="true"として初めて現れるようになった。このとき映像はドラッグアンドドロップして再生できるが、コントロールが利かない。4.1.1への変換にどこか不完全なところがある。
<-- この件はindex.jspで解決。main.lzxで起動し、ディベロッパーコンソールでDHTMLとDebug
の両方のボタンをアクティブにして立ち上げると、コントロールが効かなくなる。
- 第5部
第5部は第16章から第18章で構成され、「サーバーと最適化」
についてです。
第16章から第18章を通して我々の
Laszlo Marketアプリケーションをバックエンドサーバーと
統合します。
バックエンドサーバーとの接続するとき
最適化の問題が生じます。
第16章では開発用の
内蔵datasetから商用のHTTP供給のdatasetへの
移行が如何にシームレスに行われるかを示します。
このサンプルも前回のサンプルに含まれ、起動を"http://localhost:8080/OpenLaszlo411App/rails_chap16/flash.jsp"または
"http://localhost:8080/OpenLaszlo411App/rails_chap16/index.jsp"と変えるだけです。
RoRのデータを受けてProductListに表示するが、BrowseSearch機能が働いていない。Laszlo4.1.1への変換が未完のようである。
/data/listing.htmlでXML_HTTPが生きている場合はRoRを、出なければ内臓データのリストを自動的に選択する仕組みを
持たせているようだが、これが生きていない。 <-- 原因が判明。4.1.1になって、htmlタグの仕様が変更になった。
lzmodule/browse.lzxのsearchareaクラスにwidth="100%" height="100%"を追加してOK。ただしBrowseSearch機能はDHTML版ではまだ動作しない。
BrowseSearchは見えるようになり、ボタン機能も動作するが、ボタン操作のするまではRoRのデータを表示しているが、
ボタンを操作すると内臓XMLファイルのデータを表示する。<-- この件は4.0.12版でも同様の現象。
RoRのデータからドラッグアンドドロップで映像を見せるには、MySQLのデータの修正とRoRの修正が必要であった。Videoの
データをRED5に合わせることと、Videoデータを出力することである。
MySQLのデータとRoRのプロジェクトである。
第17章ではこれらの最適化に対処するに当たり、
多面性を持った取り組みをします。
現在表示している
リソースの配置を制御するために「lazy replication」
という技術と、データを細分化して再ロードするための
「ページング」という技術を使用します。
第18章では
この再配布のコストという概念を拡張して、アプリケーション
のスタートアップ時間を減らすための最適化への
システム操作を実施します。
- オンライン補助教材
出版社のWEbサイト http://www.manning.com/klein/
と http://www.manning.com/LaszloinAction から
この本を補強するオンライン教材がダウンロードできます。
Laszlo MarketへのXMLデータ供給用にappendix A
はJavaベースの Struts サーバーサイドアプリケーションが、
appendix B は Ruby on Railsアプリケーション です。
この補助教材はLaszloアプリケーションへのサーバーサイドから
のサポートの仕方をデモするためのもので、
Strutsや
Ruby on Rails 開発の権威ある説明をするためでは
ありません。
これらについて更にお知りになりたい場合は
Manning のStruts in Action や Rub for Railsを
ご覧になってください。
(筆者の体験ではappendix Bは使用に耐える完全なソースコードが付属していますが、appedix Aは解説の理想と実際に付属しているソースコードとの間には大きな隔たりがあります。)