Java EE 7(GlassFish V4)でJAX-RSのMVCテンプレートを動かす
GlassFish V4でJersyのMVCテンプレートを動かしてみました。
基本は下のブログで書いたGlassFish V3の時と大きく変わりません。
Javaを知らない世代が今からはじめるJava EE開発
http://den2sn.hatenablog.com/entry/2012/12/19/001146
V4で注意する点は2つ
Viewableのクラスパスが変わっている
Jerseyのパッケージが「com.sun」から「org.glassfish」に変わったこともあり以前のパッケージは
com.sun.jersey.api.view.Viewable
となっていましたが、GlassFish V4で使用しているJersy2.0では
org.glassfish.jersey.server.mvc.Viewable
に変わっています。
Mavenプロジェクトの場合
<dependency> <groupId>org.glassfish.jersey.ext</groupId> <artifactId>jersey-mvc</artifactId> <version>2.0</version> <scope>provided</scope> </dependency>
を追加すれば大丈夫でしょう。
ApplicationConfigクラスでJspMvcFeatureを追加する
GlassFish V4ではそのままではJSPのプロバイダが登録されていないのでApplicationConfigでJspMvcFeatureを追加します。
Class jspProvider = Class.forName("org.glassfish.jersey.server.mvc.jsp.JspMvcFeature"); resources.add(jspProvider);
ApplicationConfigの全ソースはこんな感じ。
package com.den2sn.mavenproject1; import java.util.Set; import javax.ws.rs.core.Application; @javax.ws.rs.ApplicationPath("webresources") public class ApplicationConfig extends Application { @Override public Set<Class<?>> getClasses() { Set<Class<?>> resources = new java.util.HashSet<Class<?>>(); try { Class jsonProvider = Class.forName("org.glassfish.jersey.jackson.JacksonFeature"); resources.add(jsonProvider); } catch (ClassNotFoundException ex) { java.util.logging.Logger.getLogger(getClass().getName()).log(java.util.logging.Level.SEVERE, null, ex); } // ここから try { Class jspProvider = Class.forName("org.glassfish.jersey.server.mvc.jsp.JspMvcFeature"); resources.add(jspProvider); } catch (ClassNotFoundException ex) { java.util.logging.Logger.getLogger(getClass().getName()).log(java.util.logging.Level.SEVERE, null, ex); } // ここまで addRestResourceClasses(resources); return resources; } private void addRestResourceClasses(Set<Class<?>> resources) { resources.add(com.den2sn.javaee7test.TestResource.class); } }
これで快適なMVCライフを送る事が出来ます。