先日投稿したさくらVPS上のGlassFishに自作のRESTなAPIをデプロイするの終盤で、完成したAPIのwarファイルをglassfishにデプロイするためのコマンドが"asadmin deploy"でした。
もちろん正しくデプロイは成功し、APIの動作は確認できましたが、なんともしっくりこないURL、、1.0というversionやSNAPSHOTがちょっと余計です。
そこで、デプロイ時のオプションや、そもそものwarファイルのファイル名がどのようにURLに影響するのか検証します。
前回のデプロイコマンドの場合
$ /usr/local/glassfish4/glassfish/bin/asadmin deploy pkmnAPI-1.0-SNAPSHOT.war
Application deployed with name pkmnAPI-1.0-SNAPSHOT.
Command deploy executed successfully.
EndPoint: https://kt-kiyoshi.com:8080/pkmnAPI-1.0-SNAPSHOT/rest/pkmn/getAll
warファイルのファイル名に、version情報やSNAPSHOTであることを示す文字列が含まれているため、それがそのままURLにも現れます。
ファイル名からversion情報とSNAPSHOTを取り除く
単純なリネームではありません笑
pom.xmlに指定する
ビルド時に生成するwarファイルの名前を指定する設定をpom.xmlに記述します。以下は同pom.xml内の設定を参照していますが、直接書いても問題ないはずです。
<build>
<finalName>${project.artifactId}</finalName>
</build>
これを書いてからビルドすると、以下のようなファイル名でwarが生成されます。すっきりしていますね。
deployコマンドのオプションを検証してみる
APIの内容は同じですが、最初に生成した「pkmnAPI-1.0-SNAPSHOT.war」と「pkmnAPI.war」を用いて、deployコマンドのオプションを検証してみます。
A. deploy pkmnAPI.war
まずオプションなしのdeployコマンドで、pkmnAPI.warをデプロイしてみます。
$ /usr/local/glassfish4/glassfish/bin/asadmin deploy pkmnAPI.war
Application deployed with name pkmnAPI.
Command deploy executed successfully.
EndPoint: https://kt-kiyoshi.com:8080/pkmnAPI/rest/pkmn/getAll
当然ですが、「pkmnAPI」というnameでデプロイされ、APIのURLにも「pkmnAPI」が入っています。オプションがなければ、ファイル名から.warを取ったものがそのまま適用されるようです。
B. deploy --contextroot=pkmnAPI pkmnAPI-1.0-SNAPSHOT.war
次に、--contextrootというオプションで「pkmnAPI」を指定してみます。
$ /usr/local/glassfish4/glassfish/bin/asadmin deploy --contextroot=pkmnAPI pkmnAPI-1.0-SNAPSHOT.war
Application deployed with name pkmnAPI-1.0-SNAPSHOT.
Command deploy executed successfully.
EndPoint: https://kt-kiyoshi.com:8080/pkmnAPI/rest/pkmn/getAll
デプロイのnameは「pkmnAPI-1.0-SNAPSHOT」となっていますが、URLは「pkmnAPI」となっています。コンテキストルート(contextroot)はURLを指すようです。
C. deploy --name=pkmnAPI pkmnAPI-1.0-SNAPSHOT.war
続いて、--nameというオプションで「pkmnAPI」を指定してみます。
$ /usr/local/glassfish4/glassfish/bin/asadmin deploy --name=pkmnAPI pkmnAPI-1.0-SNAPSHOT.war
Application deployed with name pkmnAPI.
Command deploy executed successfully.
EndPoint: https://kt-kiyoshi.com:8080/pkmnAPI-1.0-SNAPSHOT/rest/pkmn/getAll
おそらく予想通りだと思いますが、nameは「pkmnAPI」ですが、URLは「pkmnAPI-1.0-SNAPSHOT」となっています。
D. deploy --contextroot=pkmnAPI --name=pkmnAPI pkmnAPI-1.0-SNAPSHOT.war
というわけで最後に念の為、--contextrootと--nameを両方指定したもので試してみます。
$ /usr/local/glassfish4/glassfish/bin/asadmin deploy --contextroot=pkmnAPI --name=pkmnAPI pkmnAPI-1.0-SNAPSHOT.war
Application deployed with name pkmnAPI.
Command deploy executed successfully.
EndPoint: https://kt-kiyoshi.com:8080/pkmnAPI/rest/pkmn/getAll
予想通りですが、nameもURLも「pkmnAPI」となりました。pkmnAPI.warを用いて、オプションなしでデプロイした時(パターンA)と同じ結果となりました。
まとめ
asaadmin deployの"--name"と"--contextroot"というオプションについてまとめておきます。
--name | APIのdeploy時の名前(undeploy時などに使う) |
---|---|
--contextroot | APIのURLに現れる名前 |
これでビルド時のファイル名を意識せずとも好きなname、URL(contextroot)でデプロイできますね。それでは、どろん。