1. 無料アクセス解析

crossroad's Blog

Javaを中心にした技術ネタなど。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

本日の Seasar Teeda 学習のまとめ

今日もしこしことTeedaでJSFのお勉強です(^^;

提供されているサンプルを参考に、プログラミングしてみたのですが、
細かいことで何箇所かつまずきました。

1.PageやActionが呼び出されない
 conversion.dicon のルートパッケージ名を、実際のパッケージ名
 にあわせて修正していませんでした。

 その為、PageやActionがDIコンテナに自動登録されていませんでした。

 当初、「そういえば、diconにコンポーネント登録してないなぁ」と
 思ったのですが、サンプルを見てもPageやActionをコンポーネント登録
 している気配がない。

 「なぜこれで動くんだ~?」と思ったら、S2Containerの新機能、SMART Deploy と Creatorが働いていて、
 パッケージ構成とクラスの命名規則を守っていれば、自動的にコンポーネント登録されるのでした。

2.アクションメソッドが呼び出されない
 SUBMITボタンを作って、Pageクラスのアクションメソッドを呼び出すように
 したのですが、どういうわけか呼び出されない。
 Pageクラスのプロパティに値は設定されているので、HTMLとPageクラスの
 関連付けは正しく行なわれているようですが。。。

 原因は、HTMLのformのidの命名ミスでした。
 Teeda Extensionを使う場合、HTMLの各要素に色々と規約があるのですが、
 この規定に従ったidを付与していませんでした。

 以前に、S2StrutsやS2Daoを使った際も、ちょっとした命名ミスで
 結構ハマったことがあり、これはCoCでの注意点
だと思います。
 # しかも、命名ミスの場合は例外が発生しないことがあり、
 # 一見動いているように見えたりして調査が難しいことが多いです。
 # Seasarのソースを読まないと、原因特定できないことも少なくありません。

 SeasarファウンデーションのWebサイトを注意深く読めば、大抵は書いてある
 のですが、プロダクト毎に記述箇所が散らばっていることもあって、
 気づくのに時間がかかることもしばしば。。。

 実プロジェクトで使う時は、アーキテクトが命名規則一覧のようなものを
 作成・配布したほうが良さそう
な気がします。

3.ActionからServiceやLogicを呼び出すと、NoSuchMethodError
 ActionにインジェクトしたServiceやLogicを呼び出そうとすると、
 NoSuchMethodErrorが発生しました。

 インジェクトされたオブジェクトは、S2AOPによってバイトコードエンハンス
 されたものですが、リフレクションで getClass().getMethods() すると、
 呼び出そうとしているメソッドは存在するように見えます。

 原因は...これまたServiceとLogicのクラス名の命名ミスでした。
 僕は、慣例的に
  ・インターフェース・・・IHogeHoge
  ・実装クラス・・・HogeHoge
 のように命名するのですが、これがSMART Deployの規約(?)とあっていませんでした。

 正しくは、
  ・インターフェース・・・HogeHoge
  ・実装クラス・・・HogeHogeImpl
 です。

4.アクションメソッド起動時に、IllegalStateException
 アクションメソッド起動時に、

 java.lang.IllegalStateException: not readable
at org.seasar.framework.beans.impl.PropertyDescImpl.getValue(PropertyDescImpl.java:192)
at org.seasar.teeda.extension.interceptor.ActionSupportInterceptor.invoke(ActionSupportInterceptor.java:73)
 <以下略>

 が発生しました。

 原因は、Actionクラスに、PageインスタンスのGetterメソッドがないことでした。
 Actionクラスには、画面の入力値を保持したPageインスタンスが
 インジェクトされますが、インジェクトしてもらうだけなので、
 Setterだけで良いか、と思ってGetterを作成していませんでした。

 どうやら、S2AOPで拡張されたActionクラスが、オリジナルのActionクラスの
 フィールドにアクセスする際、Getterメソッド経由でアクセスするっぽいです。
 (S2AOPが、サブクラス化によってアスペクトをウィービングしているから...かな)

5.PageとActionのアクションメソッドの呼び出し優先順
 Teedaでは、アクションメソッドをPageクラスとActionクラスどちらにでも
 定義できる
ようですが、その呼び出される優先順は、

 (1)Pageクラス
 (2)Actionクラス

 のようです。

 なので、

 ・アクションメソッドをPageだけ定義し、Acitonには定義しない
  →Pageのアクションメソッドが呼び出される

 ・アクションメソッドをActionだけ定義し、Pageには定義しない
  →Actionのアクションメソッドが呼び出される

 ・アクションメソッドをPageとAciton両方に定義する
  →Pageのアクションメソッドが呼び出される
   (Actionに定義したアクションメソッドは意味がない)

 と言う事になります。


今日1日でいろいろ勉強になりました。
ほとんどが命名規約違反によるもので、それはSeasarサイトのドキュメントを
しっかり読めば回避できる
ものがほとんどです。

実際のプロジェクトでは、実装者全員がこのような問題に対処できるわけではないので、
やはりSeasarプロダクトを理解したアーキテクトなりがサポートする必要があるように思います。

アーキテクトは(特に開発初期は)少々大変かもしれませんが、
Seasarの各プロダクトはそれだけの価値があると思いますので、
自分がアーキテクトをできる場合は、積極的に採用(してもらえるように提案)したいと思います。

スポンサーサイト

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2007/08/23(木) 21:03:06|
  2. ソフトウェア開発 Seasar
  3. | トラックバック:0
  4. | コメント:0

JSF+Ajaxを学ぼう!しかし。。。

業務が落ち着いてきたので、久しぶりに何か新技術でも仕入れよう、
と言う事で...

よし、JSF(Java Server Faces) と Ajax だ。(遅っ)

いや、Rubyもやろうと思ってるんですけど、案件の多さからすると
まだRubyは少なくて...少ないうちにやっとけ、って気もしますが、
まだまだJava。

最近のプロジェクトでもまだStruts+JSP+カスタムタグが
多いんですが、やっぱと言うか結構ゴリゴリ書かないといけなくて、
色々と問題があるなと思っていたわけです。

で、何かないやろか?と言う事で、まずはJSF。
とある人がJSFがイイ!と言っていたし、J2EE標準だから今後使用頻度が
多くなる可能性は高いと見た。
# 実際調べてみても、Strutsより開発しやすい印象です。

あと、昨今はリッチクライアントと言うか、HTMLオンリーのUIに
不満が聞かれるようになってきたので、Ajax。
# 個人的には、GoogleなんかのAjaxを見て、「やっぱ企業システムに使うには不安だなぁ」
# と思っていたのですが...まぁそうも言ってられないかなと。

調べてみると、JSFとAjaxの組み合わせはなかなか良さそう。


。。。が、しかしここしばらく学習を怠けていたツケは大きかった。
まず、そもそもJSFがわからん。
昔々にJava Worldの記事を読んで概要を押さえているくらいなので、
いざやろうと思うと結構手ごわい。
しかもどういうわけか書籍が少ない。。。あれ?JSFって駄目なの??

さらにAjaxもわからん。
ちょっと前に「うぉーAjaxすげー!」と巷が賑わっていた頃には
手をつけなかったので、今更基本からやらんと駄目。
今となっては色々ライブラリも出ていて、低レベルな処理を意識しなくても
良くなってるみたいだけど、アーキテクトを自称(いや、"目指す"かな)するには、
動作原理もしっかり押さえておかないといけない。

え?S2JSF?Teeda?
JSFのManaged Beanに色々DIできるって!?
しかもfaces-config.xmlを書かなくてもいい!?
それは良いなぁ~
ってかSeasarプロダクトも、S2Container+S2Struts+S2Dao止まりだ。


。。。うーむ、やはり日々地道な学習が必要だなぁ。



  1. 2007/08/21(火) 20:58:07|
  2. ソフトウェア開発 Java
  3. | トラックバック:0
  4. | コメント:0

プロフィール

crossroad

Author:crossroad
関西在住。男。
フリーランスのソフトウェアエンジニア。
エレキベース(Rock&Roll)とお酒が好物でございます。

カテゴリー

タグリスト

Java F1 フリーランス ベーシスト HARRY TheStreetSliders iPhone FX お酒 Seasar Maven eclipse Wicket マイホーム 野球 プロジェクトファシリテーション Rails Ruby UML お店 ソフトウェア Tomcat S2Flex2 jsf Teeda Eclipse タグライブラリ ajax タスク europa mylyn trac 

ブログ内検索

最近の記事

最近のコメント

最近のトラックバック

カレンダー

05 | 2017/06 | 07
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -

月別アーカイブ

全ての記事を表示する

全ての記事を表示する

Twitter


RSSフィード

リンク

このブログをリンクに追加する

アクセスカウンタ

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。