技術記事については、Qiitaにも稀に投稿しています。

GlassFishのasadamin deployコマンドの--name, --contextrootオプションについて検証してみる

glassfish_white

先日投稿したさくら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が生成されます。すっきりしていますね。

pkmn_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)でデプロイできますね。それでは、どろん。