JAX-RS
時代はJAX-RSって事で。
最初悩んだのがAPサーバを何にするかでした。
当初は、開発Jetty、本番GlassFishでやろうかと考えてました。
1. web.xml
色々情報があって噛み砕けてませんが、
GlassFish→web.xml不要
Jetty,Tomcat→web.xml必要(不要にも出来るらしい)
開発と本番でベースの設定が異なるのは避けたい。
2. デバッグ
Jettyのデバッグ環境をセットアップしていく中で、
gradle jettyRun
で起動しておき、Eclipseでリモートデバッグ。
これがそこそこ苦痛。これまでmaven-tomcat-pluginで
Eclipse内でTomcatの起動、デバッグがシームレスに行えていたので、
デバッグまでの手順と設定が多い事がネック。
Jetty組み込みも考えたが、シンプルさに欠ける感じ。
3.その他
・Gradleは今後の為にも使っておきたい。
・JAX-RSは是非使いたいが、JavaEEマストではない。
・GlassFishの商用サポートが無くなった。
などなど考えて、
開発Jetty、本番Tomcat
にする事にしました。
開発は、あえてGradleを使う事を優先しました。
これまで通りMaven,Tomcatのほうが設定も少なく、
開発しやすいのは分かっているのですが、
「Gradleを使っておきたい」が大きな理由です。
Gradle使うとなればJettyのほうが情報量が多いのでJetty採用。
デバッグの手間は我慢出来ないレベルではないかなと。後に楽なやり方を見出だせる事かも。
本番は、1の理由とGlassFishである絶対の理由が無いので、Tomcatで。
以上を踏まえて、Eclipse上でGradle、JAX-RSを使って、
Jettyで開発出来る環境を作ります。
・JDK 1.7.0_45
・Eclipse Standard 4.3.1
・Gradle 1.10(binをパスに通す)
それぞれダウンロードとインストール。
・Gradle IDEのプラグイン追加
http://dist.springsource.com/release/TOOLS/update/e4.3
Eclipse Integration for Gradle
EclipseからGradleプロジェクトが作成出来るようになる。
ディレクトリ構成とか手動メンドイので。JavaQuickStartでプロジェクト作成。
・Jettyの起動
EclipseのExternal ToolsでGradleのjettyRunタスクが実行出来ればよかったのですが、
どうにもビルドが途中で止まる(8%から進まない)。Jetty自体は起動している。
jettyStopタスクでも止まらない。他のタスクは動作する。
External Toolsを諦め、jettyRunタスクの起動スクリプトで実行させる事としました。
デバッグ起動する必要があるので、以下参考にデバッグモードで起動させます。
Struts 1.3 + Spring 2.5のサンプルアプリ(ついでにGradle化) - wadahiroの日記
set GRADLE_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n gradle jettyRun
・起動したJettyにリモートデバッグ
EclipseのDebugからRemoteJavaApplicationで8787にアタッチ。
URLからGET、ブレークポイントが止まる、ホットデプロイ出来る、OK。
・WARデプロイ
gradle war
で作成したWARをTomcatにデプロイ。起動、URLからGET、OK。
・build.gradle
apply plugin: 'java' apply plugin: 'eclipse' apply plugin : 'jetty' apply plugin: 'war' sourceCompatibility = 1.7 version = '1.0' repositories { mavenCentral() } dependencies { compile 'javax.ws.rs:javax.ws.rs-api:2.0' compile 'org.glassfish.jersey.core:jersey-server:2.4' compile 'org.glassfish.jersey.containers:jersey-container-servlet:2.4' testCompile 'junit:junit:4.11' } task wrapper(type: Wrapper) { gradleVersion = '1.10' }
・web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <servlet> <servlet-name>ServletContainer</servlet-name> <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> <init-param> <param-name>jersey.config.server.provider.packages</param-name> <param-value>com.hoge.resources</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>ServletContainer</servlet-name> <url-pattern>/rest/*</url-pattern> </servlet-mapping> </web-app>
JAX-RS(Jersey)いい。これはいい。ブラウザが近く?に感じます。
Gradleは正直、現時点ではMavenのほうが色々やりやすい印象です。
今後に期待です。