カテゴリー: Spring (old)

[Spring Roo] Spring Rooやめました

2015/02/21 4:34 PM
 

久しぶりのエントリです。

昨年、Spring Rooについて書いていましたが、結局、使うのをやめました。

理由は、主にDojoを含むUI周りに手間がかかるためです。

  1. Spring-dojoのテンプレートのタグが中途半端。本来のJSPタグが隠蔽されていて、結局作り直すハメになる。
  2. Dojoに関する日本語の情報が少ない。
  3. Dojoのブラウザ互換性がイマイチ。

例えば、ちょっとしたスタイルの指定もcssStyleが使えず、テンプレートタグで引数を用意して、分岐ごとに追記しなければなりませんでした。タブコンテナなどは、Chromeで正常に表示されても、FirefoxやIE11ではただ中身が並んでしまい、結局ボタンとdivで作り直したこともありました。

Roo独自の流儀に従おうとしてきましたが、必要なファイルを作ってくれるRooの仕組みには助けられたものの、Dojo周辺が足手まといになった格好です。

デザイン担当とロジック担当に人員を分けられるチームならまだしも、少人数で、顧客の細かい要望に応え続けていくのは無理があると判断しました。

別の案件でSpring-Boot + thymeleaf + Bootstrap + Angular.jsを使い始めたところ、見通しの良さに関しては雲泥の差。

Angularは2.0で大きく変わるようですが、どうせ特定のテクノロジにロックインするなら、道連れが多いに限ります。

こっちに切り替えます!

[Spring Roo] 14. グリッドを使う(dgrid)

2014/03/01 9:15 PM
 

これまで作ってきたSpring RooのWebアプリの一覧表示を、機能的なグリッドで表現する。

Spring Rooが生成する一覧表では、tags/form/fields/table.tagxとtags/form/fields/column.tagxによって、普通のテーブルタグのHTMLが生成される。これは、ページネーションこそあれど、スクロールもソートもしない。

JavaScriptライブラリの選択

Dojoを使ってみよう

現在、クライアント再度JavaScriptライブラリで最も手軽に使えるのはjQueryであるが、業務の要求に耐えるようなものを作ろうとするとjQuery UIでは足りなくて、あちこちのプラグインを寄せ集めることになり、操作性の統一感も失われてしまうことになりかねない。

Spring Rooが採用しているJavaScriptライブラリは、Dojoという、あまりなじみのないものだ。海外ではjQueryと同じくらいの認知度があるらしい。よく調べてみると、UIパーツも揃っていて、統一的にテーマを変更できるようになっている。Rooで開発をするのであれば、いい機会なので使ってみることにしよう。

続きを読む »

[Spring Roo] 13. JSONでの応答機能の追加

2014/02/28 8:04 PM
 

一覧表示を、もっとリッチなものにしたい。Spring Rooは、Dojo toolkitというJavaScriptライブラリを標準で用意しており、この中に、高機能そうなグリッドがあるので、それを使ってみたい。また、データの受信は非同期に行いたい。非同期通信と言えばJSONを使うのがポピュラーだ。

今回は、下地として、サーバ側でJSONで応答させる機能を追加してみよう。

エンティティでの対応

JSONで応答させるために、以下のコマンドを使ってアスペクトコードを作らせる。

続きを読む »

[Spring Roo] 12. JPA Repositoryを使用したソートの実装

2014/02/23 2:39 AM
 

Spring Rooが生成したService、Repositoryには、ソート機能がない。しかし、実際のアプリケーションにはソート機能は必須だ。そこで今回は、一覧の検索にソート機能を実装する。

実現したいこと

Serviceの検索結果を、指定した順にソートされた状態で取得する。

具体的には、Accountの一覧で、ログインID順に表示する。

続きを読む »

[Spring Roo] 11. オリジナルテーマの作成

2014/02/17 3:58 PM
 

オリジナルのテーマを作る

Spring Rooのページ・レイアウトには、Apache Tilesが利用されている。

webmvc-config.xmlには、

  • WEB-INF/layouts/layouts.xml
  • WEB-INF/views/**/views.xml

が、レイアウト定義であることが記述されている。

layouts.xmlでは、defaultのテンプレートとしてdefault.jspxを指定している。default.jspxに配置されたheader、menu、body、footerのうち、header、menu、footerがlayouts.xmlで定義され、bodyは各views.xmlで定義されている。views.xmlにある画面が使用される時、views.xmlからlayouts.xmlへと継承が辿られて、最終的な画面が作られる。この詳細は別の機会に書くことにする。

今回は、オリジナルテーマを作るための手順について書く。

続きを読む »

[Spring Roo] 10. メッセージの国際化(PropertiesEditorの導入)

2014/02/15 8:37 PM
 

これから、Spring Rooで作ったプロジェクトのデザインをオリジナルに変更していくのだが、その前にやっておかなければならないことがある。

message.propoertiesなどのプロパティファイルを編集するプラグインの導入だ。

もともと、.propertiesファイルは、UNICODEに直した文字列をISO-8859-1で記すものなので、日本語をそのまま記述しても文字化けする。また、ファイルのエンコードをUTF-8にしてもダメだ。

Spring Tool Suiteのプロパティファイル・エディタ(Properties File Editor)は、結局ただのテキストエディタである。国際化リソースの要となるファイルなのに、いつまでもこの状態はいかがかと思う。

PropertiesEditorの導入

そこで、日本語(他の言語も)で編集し、ISO-8859-1で保存できる、PropertiesEditorをインストールしよう。

続きを読む »

[Spring Roo] 09. パスワード変更機能の追加(jspxの編集)

2014/02/10 5:04 PM
 

今回は、パスワード変更機能の追加を通じて、jspx編集作業における注意点等を書く。

Rooによるjspx内要素の再生成(ラウンドトリップ)について

.jspxファイル内の要素は、エンティティの変更などを反映するために、Spring Rooによって自動的に更新される。だから、不要な項目などを削除しても自動的に復活してしまう。

この機能は便利である一方、デザインやセキュリティの面で邪魔になることもある。

今回の場合、アカウントの一覧画面や編集画面でのパスワードハッシュのフィールドが相当する。パスワードは、入力→ハッシュ化が一方通行である必要があり、また、ハッシュ化されたパスワードを画面に表示してもいけない。

Spring Web MVCリファレンスのJSP View(11.3)によると、jspx内の要素の属性について、以下のように書かれている。

  • id属性は、エンティティのフィールドに関連づいている。Roo Shellは、id属性とエンティティをチェックし、要素がjpsxから無くなっていれば再度生成する。
  • z属性には、エンティティのフィールド、属性の名前と値で生成されたハッシュ値が自動的に設定される。

ラウンドトリップを受けないようにするには

jspx内の要素を、Rooの自動再生成を受けないようにするには、次の方法がある。

続きを読む »

[Spring Roo] 08. 認証機能の実装

1:56 AM
 

前回は、Account作成時に入力されたパスワードを暗号化し、データベースに保存するようにした。

今回は、このAccount情報を使用しての認証機能を実装する。

認証機能の実現には、Spring Securityを使用する。

Spring Securityの追加

まず、Rooを使用して、Spring Securityを追加しよう。 Roo Shellを起動して、 security setup というコマンドを実行する。

続きを読む »

[Spring Roo] 07. パスワードのハッシュ化とDBへの保存

1:49 AM
 

これまで作ってきたオンラインメモ・アプリに、認証機能を追加しよう。

今回は、Accountテーブルに暗号化されたパスワードを保存できるようにする。次回、Spring Securityを使用して、ユーザ認証を行うように変更していく。

Accountエンティティには、既にloginIdとpasswordHashのフィールドを用意してあるので、これを利用して認証を行う。

パスワードの変更機能については別途。

パスワードをハッシュで保存する

Accountエンティティを新規登録して保存する際に、パスワードのハッシュ化を行う。ハッシュ化には、SpringのBCryptPasswordEncoderを使用する。

続きを読む »

[Spring Roo] 06. OpenEntityManagerInViewパターン

2014/02/07 7:49 PM
 

前回まででは、OnlineMemoの編集画面で、関連したAccountを表示しようとした時にエラーになってしまっていた。

Hibernateの遅延ロード機能

これは、Hibernateの遅延ロード機能により、upload.jspxの処理時にAccountオブジェクトにアクセスできないために発生した。Onlinememoの関連先であるAccountは、OnlineMemoをロードした時にはロードせず、Accountにアクセスした時に初めてロードするようになっている。DBからのロードを減らすための工夫であるのだが、こういう面で裏目に出る。

Open Session In Viewパターンによる解決

遅延ロードによるビューの不便さを解決する方法はいくつかある。DBのセッションをビューにまで延ばす方法(Open Session In View)、データ伝達オブジェクト(Transfer Object)を使う方法など。

続きを読む »


WordPress Themes