( ꒪⌓꒪) ゆるよろ日記

( ゚∀゚)o彡°オパーイ!オパーイ! ( ;゚皿゚)ノシΣ フィンギィィーーッ!!!

Wicket勉強会に行ってきましたよ。

行ってきました。30人くらい来てた。
参加した皆様お疲れ様でした。

感想

  • 参加者はみんなアツい。Wicket大人気じゃね?
  • LTがちょっと間延びしたかな。発表するほうも時間を気にしてて集中できてなかったみたいだし。
  • 金曜夜って日程はよかった。
  • 次回はハンズオンでコーディングとかあったらいいな。
  • Wicketのソース読みましょうとかもいいかも
  • むしろ最初から懇親会とかでも。
  • 次回は何か発表できるように頑張る

ほかの人の感想など。
GlassFish Server Open Source Edition 3.1.2 - Error report
第一回wicket-ja勉強会に参加&LTしました - 凡人プログラマ
第一回wicket勉強会 | tsuyuki.makoto
Scala-ja - 資料館

以下メモ。

矢野さん

ステートフル
  • あぶくのようなオブジェクト。ポニョwww
  • 通常のWebアプリだとリクエストごとにオブジェクトの状態管理が発生する。
  • swingはそんなことねぇよ。
  • Webアプリとデスクトップのつくりはだいぶ違う
    • MVCの意味がまったくちがう

Wicketの目指すところ

デスクトップアプリのようにリクエストを超えてオブジェクトが存在するように!

  • Webの場合はセッション
  • Wicketでは、セッションはJVMのHeapと同じようなもの。
    • Wicketが状態を維持する!
    • ex)オブジェクトのバージョン管理。
  • バックボタンをUNDOにする。
    • (command patternが実装できる!)


メモリ大丈夫?

  • Wicket1.3から導入。ワークディレクトリの中にファイルが作られてキャッシュされる。(セカンドレベルキャッシュ)
  • セカンドレベルキャッシュはいつ消える?
    • Wicketの設定があって、ページオブジェクトのバージョンをいくつもつか設定できるデフォルトではバージョン5まで。
    • セッションが消えるとキャッシュも(wicket上から)消える。
    • 実ファイルが消えてるかどうか不明。
    • ModelとかはSerializableでないと、developmodeでエラーとなる。


クラスタリングは?

  • アプリケーションサーバのセッション同期に任せていた。
  • 同期するときにセカンドレベルキャッシュもなんか同期してるみたい。
  • コミッタ的には、「Wicketでやるとこじゃねぇよ。」

Ajax

DOMエレメント=コンポーネント

  • wicket:idを付ける部分はDOMツリーと一致している。
  • コンポーネントを更新する = DOMエレメントを更新する。


ビベイビア(振舞)

  • あらゆるコンポーネントにあとから[振舞]だけを追加できる。
  • 10秒単位で更新など。
  • inplaceeditorなど。
  • ほとんどのビヘイビアはajax


課題

  • コンポーネントの差し替えが基本で、エレメントの追加が苦手。
  • あらかじめテンプレートに仕込んでおく必要があるので面倒。
  • 10個から11個に追加する場合は、11個丸ごとサーバから送る。


DOMのIDと相性が悪い。

  • wicketからIDを操作するときにDOMにすでにIDがついていたらそれを使う。
  • うまく動かない。
  • こみったは後回しにした。

ライブコーディング

1.4-m3で。例のみんな大好きなサービスを150行で作るぞ

  • 実際は160行くらい。160行のほとんどが日付計算www

ログイン画面

  • 例のアレのHTMLをぱくってwicket:idを埋める。
  • Login.html
  • Login.java-Page.classのサブクラス
    • RequiredTExtFieldとPasswordFieldをadd
    • AbstractValidatorの無名クラスをadd
    • AbstractValidatorはデフォルトでブランクチェックしている
  • moutBookmarakablePageでURLをきれいに。


メッセージ表示する画面

  • timelineの取得はtwitter4Jでやってる。
  • tiwtter4jのstateオブジェクトをmodelとしてComponetnと結びつける。
  • Modelの状態が変わると自動的にcomponentの表示が変わる。
  • TimelineTable(Listview)にAjaxSelfUpdatingTimerFileterBehaviorってビヘイビアをaddすると一定時間ごとに表示を更新する。
    • ビヘイビア様最高
  • デバッグモード起動すると、ページ上にデバッガが出てくる。
    • XHRの内容とか、AJaxで通信しているログとかが出る。
    • Firebugがあるからあまり使ってなかったけど。IEとかでは便利。

質疑応答

  • JQueryとかとの組み合わせはキモイ?
    • wicketのexsampleやwicket stuffとかで実際にやっている。
  • Ajaxでのページバージョンの変更はどのタイミング?
    • sumitするとwicketが認識。
    • Modelに対して今から触る通知するメソッドがあるのでそれを使う。
    • XHRとかを直でやった場合の話で、AjaxSubmitBottonだと大丈夫。
  • AWTっぽくね?
    • 内部的にはListnerだらけ。
  • 自分でListner作れない?
    • 公開されている奴もある。
    • 実はonhogehogeとかがあるのでそれで何とかできることも多い。(commiterいわく)
    • id:t_yano的にはlistnerはただ処理をスルーするだけ。
  • Componetを作るときには継承モデルの方がわかりやすい?
  • wicketAPIは基本的に非公開。言ったら次期リリースで公開されるとか。


たけうちさん

wicketの特徴

  • 拡張性が高い。
  • 高LV、低LVでいろいろ出来る


Component Resolver


IComponentResolver

  • HTMLにWicket:idがあって、Componentがaddされていないと呼び出される。
  • PageやPanelにImplementする
  • 解決できなかったコンテナ、変換中のストリーム、解決できなかったComponentTagのオブジェクト
      public boolean resolve(MarkupCOntainer container, mMarkupuStereamd markupSterem,ConponentTag tag){
         if( tag.isAutoComponentTag() ){
           return false;
           
         Label label = new Label( tag.getId(),);
         return container.autoAdd(label,markupStream);
      }
  • タグの属性(attribute)を取得できる。

CompoundPropertyModelと組み合わせるとTeeda的なものができる。

S2Wicketのときはアノテーション的なものがあったけど、Wicketでやる必要がある?
ってかせっかくjavaでやれんのにテンプレートにゴリゴリ制御書くってどうなん?

  • 宗教論争
  • 本人が楽しければいんじゃね?投げっぱなしwww

DIの問題。

  • DIコンテナとバッティング。
  • wicket-ioc
    • クラスのフィールドをproxyとして利用する
    • wicket-spring,wicket-guiceとかが使ってる
    • ReloadableWicketFilterでなんとか・・・
    • もうClassLoader自作するしかないんじゃ…。

LT

LTじゃなくてプレゼンだよね。全然5分でおさまってない。

Kishiさん

Wcketを使って[こうなる]を作った。
予測市場(仮想の株式市場)を使って将来を予測する手法。
prototypeとscript.acur.usを使ってる。

Tips

  • のはなし
  • URLをCoolに
    • mountbookmark
    • HybridUrlCodingStrategyを実装する
    • IndexedParamUrlCOdingStrategy,MixedParamUrlCoding
  • RestartResponseExceptionを使うとURLが変わらない。
    • IEで動かない。
    • ModelがSerializableじゃなかった
ぎしさん

運用の事例。グループウェア
教育コストと生産性の話

けいすけん

Scala on wicket

  • liftはまだ実績がない。
  • @BeanPropertyでclass定義とconstoructorが簡単に。
  • クロージャとカリー化
    • Implicit Conversions
    • Componentやvalidatorの処理を型推論で簡単に
    • これは便利そう


っていうかscalaの紹介だった。個人的には面白かったけど。

田中さん

不動産広告系ASPサービスのWebアプリの事例

  • 前任者の暴走で採用www
  • wicket1.2系
  • APサーバ WLS9 JBOSS4
  • ibatics

  • wicket-auth-roles
  • PVは月間60万位 運用2年。
  • WLSのセッションDB保存機能を利用。
  • 項目が多いのでCSVで画面定義を書いてcomponentを生成して処理。
    • pageクラスのほうはなんとか頑張る
  • CMSもつくってる
    • StringRequestTargetでViewにVerocityを採用

よかった探し

  • デザイナとの協業がうまくいった。
  • デザイナがhtmlいじってSVNにコミット。
  • 完全に分業できた。


困ったところ。

  • 知ってる人はまだ少ない。
  • 日本語リソースはまだ少ない。