Apache Shale ViewController その3
ViewControllerは,Apache Shale 1.0.3からRequest Scopeにおく必要があります.
Request Scopeに置かないと,init()やら,prerender()のような,コールバックメソッドを呼んでくれなくなりました.
このあたりが,大きな変更と言えます.
その代わりと言ってはなんですが,新たに各スコープに対応したバッキングビーンラッパーが用意されました.
アプリケーションスコープ
org.apache.shale.view.AbstractApplicationBeanを継承します.
AbstractApplicationBeanには,以下のコールバックメソッドが用意されています.
- init()
インスタンス生成後,バッキングビーンの呼び出し時に呼ばれます.バッキングビーンは,アプリケーションスコープに置かれるので,当然init()は1度呼び出されたら,2度呼び出されることはありません.
- destroy()
アプリケーションの削除時,又はアプリケーションを終了したときに呼ばれます.
セッションスコープ
org.apache.shale.view.AbstractSessionBeanを継承します.
AbstractSessionBeanには,以下のコールバックメソッドが用意されています.
- init()
インスタンス生成後,バッキングビーンの呼び出し時に呼ばれます.バッキングビーンは,セッションスコープに置かれるため,セッション毎に1回呼び出されます.
- passivate()
Sessionが非活性化されたときに呼ばれます.
- activate()
Sessionが活性化されたときに呼ばれます.
- destroy()
セッションの破棄時に呼ばれます.
リクエストスコープ
org.apache.shale.view.AbstractRequestBeanを継承します.
AbstractRequestBeanには,以下のコールバックメソッドが用意されています.
- init()
インスタンス生成後,バッキングビーンの呼び出し時に呼ばれます.バッキングビーンはリクエストスコープに保持されるため,リクエスト毎にinit()は呼ばれます.
- destroy()
バッキングビーンの破棄時に呼ばれます.画面にレスポンスを返した後ってところですかね.
しかし,ViewControllerクラスがあるのに,さらにAbstractRequestBeanなんて作る意味があるんでしょうか?使い道もないし.
各スコープ毎のバッキングビーンには,AbstractFacesBeanが継承されているため,便利なヘルパーメソッドが使えるようになっています.
感想
なんだか,苦し紛れの対応のような気がしました.
まず,各バッキングビーンをどのスコープに置くかは,faces-config.xmlで定義します.それだけでなく,バッキングビーン側にまでスコープに対応したビーンを継承させるのは複雑さが増すし,手間がかかります.
AbstractRequestBeanなんて,ほとんどおまけみたいなもので,作成する必要すら感じません.
これらの対応は結局のところ,init()とdestroy()のタイミングを思うようにできず,仕方がなくこのような形になってしまったと思われます.
これらのコールバックメソッドを呼んでいる場所は,
org.apache.shale.view.faces.LifecycleListenerクラスです.このクラスは
- ServletContextAttributeListener
- ServletContextListener
- HttpSessionActivationListener
- HttpSessionAttributeListener
- HttpSessionListener
- ServletRequestAttributeListener
- ServletRequestListener
をimplementsしており,それぞれのコールバックはリスナーによって呼ばれます.
それぞれのスコープに対応したコールバックにきっと見覚えがあることでしょう.
しかし,一時しのぎの対応かと思っていたらこのまま1.0.3としてリリースされてしまいました.
確かに,すべてを対応させる為にはこれしかないように思いますが・・・他に手はないのだろうか・・・
AbstractSessionBeanのpassivate()やactivate()の必要性もないし,init()とdestroy()を呼びたいだけなのだから,すべてViewControllerクラスでできるようにするべきだと思います.
一番使いたいコールバックであるprerender()メソッドもViewControllerクラスを継承してさらにリクエストスコープでしか扱えないのも問題があります.postbackにしてもviewControllerクラスでしか対応していません.
さてさて・・・このままではまずいですよ・・・
今月の本
Eclipse: Building Commercial-Quality Plug-ins (Eclipse Series)
- 作者: Eric Rubel, Dan Clayberg
- 出版社/メーカー: Addison-Wesley Professional
- 発売日: 2006/03/22
- メディア: ペーパーバック
- クリック: 5回
- この商品を含むブログ (5件) を見る
今日は忙しいので読めませんが,明日から楽しみ.
良書だといいなぁ.
今月の本
LinuxデスクトップHacks ―プロが教えるテクニック&ツール100選
- 作者: Nicholas Petreley,Jono Bacon,株式会社ドキュメントシステム
- 出版社/メーカー: オライリージャパン
- 発売日: 2005/09/26
- メディア: 単行本(ソフトカバー)
- 購入: 1人 クリック: 14回
- この商品を含むブログ (12件) を見る
デスクトップHackといっても,KDEやGNOMEのカスタムだけではありません.
コンソールベースのカスタマイズや,ブートローダーの改造まで.
とにかく,見た目にこだわった改造ができます.
カーネル2.4時代じゃできなかったことが,こんなにできるようになっているんですね.
X.orgの登場とか,自分が全盛で触っていたときとはかなり変わっていて,勉強になりました.
しばらくは,Slackwareを改造しますよ.ちなみに,本とSlackwareは一切関係ありません.
(むしろ,Debianとか使っている人のほうが助かるのかもね)
Linux使いなら,買うしかありません.
Ajax and Flash Development With Openlaszlo: A Tutorial
- 作者: Chris Coremans
- 出版社/メーカー: Brainysoftware.Com
- 発売日: 2006/08/30
- メディア: ペーパーバック
- クリック: 3回
- この商品を含むブログ (3件) を見る
OpenLaszloに関する,唯一の本.これからは,リッチクライアントでしょ.
GNU Development Tools が届いた.
先日予約していた,「GNU Development Tools」が届きました.
http://www.oversea-pub.com/publications.htm
自主出版なんて,すごいですね.
すごい綺麗で,豪華な本が届きました.
よかったよかった.
今月の本
- 作者: 山田和夫
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2006/08/22
- メディア: 単行本
- 購入: 1人 クリック: 16回
- この商品を含むブログ (17件) を見る
Puzzles for Hackers:スクリプトキディから大人のハッカーへ (IT Architects' Archive 知の連環)
- 作者: イワン・スクリャロフ,鷹跣搗汯
- 出版社/メーカー: 翔泳社
- 発売日: 2006/08/29
- メディア: 単行本(ソフトカバー)
- 購入: 1人 クリック: 81回
- この商品を含むブログ (28件) を見る
なかなか面白いです.正直,むづかしい...Perlのフレームワークがいっぱい.
- 作者: WEB+DB PRESS編集部
- 出版社/メーカー: 技術評論社
- 発売日: 2006/08/24
- メディア: 大型本
- クリック: 2回
- この商品を含むブログ (36件) を見る
Java World (ジャバ・ワールド) 2006年 10月号 [雑誌]
- 出版社/メーカー: アイ・ディ・ジー・ジャパン
- 発売日: 2006/08/24
- メディア: 雑誌
- クリック: 5回
- この商品を含むブログ (7件) を見る
Apache Shale 1.0.3リリース
http://people.apache.org/dist/shale/v1.0.3/
正式リリースには,まだ少しかかるかな.
Dialog Managerあたりの不具合も残っているもよう.
Apache Con(2006/10)にリリースを目標にしているのでしょうか.
View Controller周りは,結構変わったのでまた紹介します.
Tomcat5.x スクリプトレットを使用禁止に!
Tomcat5.xから、JSPでのスクリプトレットの使用を禁止に出来るみたい。
web.xml
<jsp-config> <jsp-property-group> <url-pattern>*.jsp</url-pattern> <el-ignored>false</el-ignored> <page-encoding>Windows-31J</page-encoding> <scripting-invalid>true</scripting-invalid> </jsp-property-group> </jsp-config>
scripting-invalidをtrueに設定してやると、スクリプトレットを使用禁止にできます。
ディフォルトは、false。
Tomcatでは、確認済み。(ほかのAPサーバも有効になるんだろうか。。。)
el-ignoredをtrueにすると、EL式が書けなくなります。${hoge}とかそのまま表示されます。
注意点。
JSPファイルの方に、pageディレクティブが存在すると、上書きされるので注意しましょう。
<%@ page language="java" contentType="text/html; charset=windows-31j" pageEncoding="windows-31j"%>
と書くのが当たり前になりすぎていて、気づきませんでした。
上記例だと、scripting-invalidがfalseで宣言されているのと同等なので、web.xmlに記述しただけではスクリプトレットが動きます。
scripting-invalidを直接pageディレクティブに記述しても、スクリプトレットを禁止できます。
尚、scripting-invalidをtrueに設定して、スクリプトレットを記述すると、Exceptionが発生しますので。
前回のGETパラメータの文字化け確認しました。
ついでに、server.xmlの設定が有効になるのも確認しました。
サーブレット・JSPを勉強したい方へお勧めの本。
- 作者: 宮本信二
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2005/09/27
- メディア: 単行本
- 購入: 1人 クリック: 3回
- この商品を含むブログ (6件) を見る
よい本です。