読者です 読者をやめる 読者になる 読者になる

Java EE 事始め!

主にJava EEについて、つらつらとマイペースに書いていきます。「Java EEを勉強するときに、一番最初に読んでもらえるブログ」を目指して頑張ります!

JSR 371(MVC 1.0)Early Draftリリース&簡単に解説。

リリース予定

  • Q3 2014 Expert Group formed
  • Q1 2015 Early Draft ★今はココ!
  • Q3 2015 Public Review
  • Q1 2016 Proposed Final Draft
  • Q3 2016 Final Release

MVC 1.0に限らず、Java EE 8の各技術はだいたいこんな感じのスケジュールのようです。
MVC 1.0は、Q1 2015ギリギリの3月31日でした。

Security APIは間に合わなかったのかな・・・。
The Java Community Process(SM) Program - JSRs: Java Specification Requests - detail JSR# 375

ゴールとするもの・しないもの

上記のJSRには冒頭に、ゴールとするもの・しないものが明記されています。

ゴールとするものは、下記の5つです。
(あんまり英語得意じゃないので、厳密には正しくないかもしれません^^;)

  1. Java EEの既存技術を活用する。
  2. CDIおよびBean Validationと統合する。
  3. 最初のバージョンでは、MVCアプリケーションのコアを提供し、すべての機能は必ずしもサポートしない。
  4. JAX-RS上で動かす。
  5. JSPとFaceletsのビュー技術をサポートする。

逆に、ゴールとしないものは、下記の4つです。

  1. 新しいビュー技術は定義しない。
  2. Java EE外で、スタンドアロンで動作するMVCはサポートしない。
  3. JAX-RSベースでないRESTはサポートしない。
  4. Java EEでないビュー技術はサポートしない。

要するに、既存のJava EE技術を最大限に活用して、新たに仕様を策定する部分は最小限に留める、と僕は解釈しています。
これは、個人的には非常に賛同します。Java EEは既に膨大な仕様の集まりになっているので。

Ozark独自の拡張機能

https://github.com/spericas/ozark/tree/master/ext
JSP・Facelets以外の、ThymeleafやVelocityなどのビュー技術は、Ozark独自の拡張機能として提供されています。
具体的には、javax.mvc.engine.ViewEngineというインターフェイスがあり、それを実装してXxxViewEngineというクラスを作ることで、各ビュー技術をサポートしています。
JspViewEngineやFaceletsViewEngineは、Ozarkに含まれています。

サンプルコード

MavenからWARでダウンロードして、そのままGlassFishにデプロイすれば動きます。
GroupIdが「com.oracle.ozark.test」のものが、MVC 1.0を使ったサンプルプログラムです。
The Central Repository Search Engine
GitHubにソースもあります。
https://github.com/spericas/ozark/tree/master/test

動くサンプル

上記のWARすべては試していないのですが、下記のサンプルは動きました。

  • book-cdi
  • book-models
  • facelets
  • thymeleaf

動かないサンプルとバリデーション方法

動かなかったのは、validationのサンプルです。
動くには動くのですが、バリデーションで引っかかるような入力をしてSubmitすると、例外画面になってしまいます。
f:id:MasatoshiTada:20150402220031j:plain

ozark/FormController.java at master · spericas/ozark · GitHub
ValidationResultというのが、検証結果を保持する役割を持っているのですが、あらためて、現時点のOzarkのソースコードを一通り確認すると、そのValidationResultに検証結果を詰める処理が、まだ未実装のようでした。
まだEarly Draftなので、これからに期待ですね。
また、現時点のJSRには、検証結果のエラーメッセージをどのようにJSPなどのビューに表示させるかは、まだ明記されていません。

ということで

まだまだ未実装の部分はありますが、これからに期待ですね!引き続きウォッチします。