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ライフを送る事が出来ます。