Rooのアーキテクチャ
Rooで作成したプロジェクトで扱う上でRooがどのような仕組みで動いているのかを知っていると開発をスムーズに行うことができるようになるのでぜひとも押えておこう。
初めてRooでアプリケーションを作成した人は、なぜ動作しているのか不思議に思うことも多いはずだ。というのも、以下のようにRooが作成したEntityクラスには、setterおよびgetterがないのである。
@Entity
@RooJavaBean
@RooToString
@RooEntity(finders = { "findRsvpsByCodeEquals" })
public class Rsvp {
@NotNull
@Size(min = 1, max = 30)
private String code;
@Size(max = 30)
private String email;
private Integer attending;
@Size(max = 100)
private String specialRequests; pa
@Temporal(TemporalType.TIMESTAMP)
@DateTimeFormat(style = "S-")
private Date confirmed;
}
またコントローラクラスには、クラス定義とアノテーション程度しか実装されていない。
@RooWebScaffold(path = "rsvp", automaticallyMaintainView = true, formBackingObject = Rsvp.class)
@RequestMapping("/rsvp/**")
@Controller
public class RsvpController {
}
極めつけは、DBのテーブルすら作成していないのに動作してしまう。まさに魔法に掛かってしまったかのようだ。
しかし、原理さえわかってしまえばたいしたことはない。Rooでは、AOPフレームワークであるAspectJのITDs(Inter-type declarations)という機能を利用している。ITDsはクラスに新たなフィールドやメソッドを追加する機能だ。RooではこのITDsが肝になっている。
Rooでコマンドを入力するとJavaファイルやJSPファイルなどの他に.ajファイルが作成される。この.ajファイルがAspectJのファイルである。.ajファイルの中にEntityクラスであれば、setterやgetterが記述されている。コントローラクラスも同様に.ajファイルを見ると何が行われているかわかる。実際に動作しているのは、Javaファイルに.ajファイルの内容を追加したものとなる。
Rooでは、Entityを変更すると自動的にビューも修正されるが、修正されると困る場合は、コントローラクラスの@RooWebScaffoldアノテーションのautomaticallyMaintainViewをfalseに設定すると行われなくなる。
続いてDBのなぞについて説明しよう。上記でも述べたがRooではテーブルを作成しなくても動作する。もちろんテーブルがないと動作するわけがないので、誰かがテーブルを作成している。作成しているのは「src/main/resources/META-INFにあるpersistence.xml」にある以下の記述だ。
<property name="hibernate.hbm2ddl.auto" value="create"/>
この記述により自動的にテーブルを作成している。開発中にはとても便利な機能である。
簡単ではあるがここまで説明した内容を知っておくだけで、Rooでの開発をスムーズに行うことができるだろう。
まとめ
本稿ではSpring Rooについて解説した。Rooはコマンドラインベースのツールである。コマンドラインが得意でない開発者は利用を躊躇してしまうかもしれない。しかし、Rooでは、「hint」コマンドを入力することで次に何をすべきか教えてくれるため、敷居は低くなっているので安心してほしい。
Rooでは現在はビューにSpring JS(Dojo)を使用したものしか提供されていない。利用する側としては、普段使い慣れたJavascriptライブラリを使いたいと思うところだろう。現在Rooでは、ビューとしてSpring JS以外にjQueryやYUI、EXTJS、GWTなどの対応を行っている。Rooチームによると次回のメジャーバージョンアップ時に利用できるようになるだろうとのことだ。GAEなどのクラウドサポートについても言及しているので、今後サポートされるものだと思われる。
Rooの生産性にクラウドが加われば、爆発的な生産性が実現されるようになるはずだ。今後もRooの進化に注目したい。
執筆者紹介
石橋 稔章(ISHIBASHI Toshiaki) - DTS
JavaEEのフレームワーク開発などを経験した後、業務システム向けアーキテクトに。現在は、金融系の大規模プロジェクトに参画し、リリースに向けて奮闘中。最近は温泉旅行に行きたくてしかたがない。好きな食べものは、イチゴ。