MVC 1.0(Java EE 8)をとりあえず動かしてみた
MVC 1.0とは?
Java EE 8は、来年(2016年)の第3四半期にリリースが予定されています。
その中に含まれる予定の、アクションベースMVCフレームワークの仕様が「MVC 1.0」です。
参照実装は「Ozark」です。
Ozark, the JavaEE MVC RI — Project Kenai
環境
プロジェクトは[Maven]→[Webアプリケーション]で作ってください。
プロジェクト名は「OzarkSample」とします。
Maven依存関係
プロジェクトを作成したら、pom.xmlに下記の依存関係を追加してください。
<dependencies> <dependency> <groupId>com.oracle.ozark</groupId> <artifactId>ozark</artifactId> <version>1.0.0-m01</version> <scope>compile</scope> </dependency> <dependency> <groupId>javax</groupId> <artifactId>javaee-web-api</artifactId> <version>7.0</version> <scope>provided</scope> </dependency> </dependencies>
JAX-RSの有効化
package ozarksample; import javax.ws.rs.ApplicationPath; import javax.ws.rs.core.Application; @ApplicationPath("api") public class MyApplication extends Application { }
MVC 1.0は、JAX-RSベースのフレームワークです。
javax.ws.rs.core.Applicationのサブクラスを作ると、JAX-RSが有効化されます。
クラスの中身は空でOKです。
@ApplicationPath("api")は、このアプリケーションのURLを指定しています。
つまり「http://localhost:8080/コンテキストパス/api/・・・」となります。
コントローラーの作成
package ozarksample.controller; import com.oracle.ozark.engine.JspViewEngine; import javax.enterprise.context.RequestScoped; import javax.inject.Inject; import javax.mvc.Controller; import javax.mvc.Models; import javax.mvc.Viewable; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.PathParam; @Path("hello") @RequestScoped public class HelloController { @Inject private Models models; @GET @Controller @Path("{name}") public String hello(@PathParam("name") String name) { models.put("name", name); return "hello.jsp"; } // コレでもOK // @GET // @Controller // @Path("{name}") // public Viewable hello(@PathParam("name") String name) { // models.put("name", name); // return new Viewable("hello.jsp", models, JspViewEngine.class); // } }
@Pathは、やはりURLを指定するものです。
はまったのは、このコントローラークラスに@RequestScopedなどのCDIスコープアノテーションをつけないと、実行時に「org.glassfish.hk2.api.UnsatisfiedDependencyException」が出てしまいました。
参考URL:GlassFish 4.0のCDIに潜む罠 - Programming Studio
本来は、コントローラークラスにはスコープアノテーションは付けないようなのですが、今回はとりあえず動かすためにこうしてます。
JSPページ
上記のコントローラーから、フォワードする先のJSPです。
EL式を使って、コントローラーでModelsにputしたnameを表示しています。
<%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title> </head> <body> <%-- EL式でnameを表示 --%> <h1>Hello, ${name}!!</h1> </body> </html>
最終的なプロジェクト構成
実行してみる
ブラウザで、下記のURLにアクセスしてください。
http://localhost:8080/OzarkSample/api/hello/hogehoge
すると、URLの最後の「hogehoge」の部分が、下記のように表示されます。
感想
非常にシンプルで、使いやすいフレームワークだと感じました。
まだ仕様策定中で未完成な部分があるということもありますが、逆に言えばまだクラス数が少ないので、コードリーディングがしやすいです。
今のうちにチェックしておいて、構造を把握しておくのも良いと思います。
僕も、今後も定期的にチェックします。
注意事項
MVC 1.0およびOzarkは、現在も仕様策定や開発の真っ最中であり、今回のサンプルは2015年3月31日現在のものに過ぎません。
後々になると仕様が変わっており、上記のサンプルは動かなくなっている可能性がありますので、ご注意ください。
Ozarkのサンプル
https://github.com/spericas/ozark/tree/jaxrs/ozark-sample
GitHubにあるのですが、このサンプルはどうも古いらしく、現在の実装とはちょっと違っています。