Challenge Engineer Life !

エンジニア人生を楽しみたい!仕事や趣味で学んだ技術的なことを書いていくブログです。

デプロイしたwarの中にある設定ファイルを変更するにはまたwarをデプロイするのでしょうか…?

まだまだJava EEビギナーな状態が続き、タイトルのような悩みをしてました(^^;

自分が辿りついた答え

わざわざ再度デプロイしなくていい(^^)/

GlassFish(ちなみに3.1.2.2)ではwarをデプロイした際、実体のファイルとしては展開されていてdomain配下のapplicationsフォルダに格納されていました。
なので、ここで設定ファイルを編集して、GlassFishにて再読み込みすればOKでした!

運用方法とかはちゃんと規定したほうが良さそうなのと、その他にも色々やり方はありそうですが、とりあえず自分はこれで満足です。

自分にあった先入観

通常warのデプロイは、GlassFishのコマンドラインか管理画面から行っています。
頻度としてはやはり管理画面使うことが多く、以下の画面とかみていると自然とwar単位に並んでいるし「ああ、Java EEって内部的にもwarとして持つんだぁ、へー」と勝手に先入観を持ってしまっていました(^^;

f:id:kikutaro777:20130209230453j:plain

そもそもの発端

.NETではWebサービスやASP.NETのプログラムをパッケージングするという作業はなくて「Webサイトの発行」なるものを行ってdllやweb.configなどがワラワラと吐き出され、それをサーバに配置する流れでした。

昨年Java EE6を触り始めたとき「warってなんぞや(-_-;?」という状態から始まったのですが、今では普通に成果物をwarファイルにパッケージングして、それをデプロイする作業をするようになりました。

「warって1つのファイルに固まるからわかりやすくていいな~(^^)」
「お客さんに成果物出すときもwarだけ送ればいいからシンプルだな~(^^)」

と思っていたのですが、実開発が始まって運用フェーズを想像すると…まてよ、と。

例えば、お客さん側の情シスでログレベルを変えたいとか、セッションタイムアウト時間を変えたいとか、そういう話になったとき…

「お客さんに設定ファイルを変更してもらい、warもパッケージングしてもらう!?」
「自分達で変えてwarファイルをお客さんに送りなおすの!?」

とか急に不安になりました…。これって外部設定ファイルにした意味なくない!?みたいな…。

調査とアドバイス

ネット調べると同じ質問を海外とかで幾つかみつけたのですが、Listenerクラス作ってやるとか、そもそもwarにパッケージングしないで、classpath使ってやるとか、出てきて、.NETよりめんどくさい…と思って、ふとツイートした所、@megascusさんから

「warを展開する設定にした上で、展開先を書き換えていくという運用もありです」
「もしくはwarとは別でclasspathを通しておくとか」

とコメント頂きました。デプロイ後に展開される、という考え方を全然していなかったので、とても助かりました(^^!!

Tomcatではできた、という情報も頂いて、それをキーワードに調べたら確かにTomcatではhostの属性にunpackWARsなるものがあって、そこで制御できるとのこと。なんと!

ではでは自分が使うGlassFishはどうなんだろ!と。

GlassFishでデプロイしたwar

簡単な検証のため、実際に以下の手順でデプロイし、実体のファイルがあると思われるdomain配下のapplicationを確認してみました。

なお確認ではNetBeansからGlassFishを起動したのではなく、インストールされたGlassFishのstartserv.batから起動した状態で確認しています。
(NetBeansからだと違う所に実体があるっぽいです)

1.まずはGlassFishの管理画面を確認

何もデプロイされていない状態から
f:id:kikutaro777:20130209231147j:plain

2.確認用のwarをデプロイします

ちなみにデプロイしたWebプログラムは、JSFの画面でボタンが1つだけあって、押下するとSLF4JとLogbackを利用したログが出力される、という非常に単純なものです。

f:id:kikutaro777:20130209231414j:plain

デプロイされると上記のようになります。

3.デプロイしたwarの実体があるdomain配下のapplicationフォルダを確認します

おお、普通にファイルが展開されている!!!

f:id:kikutaro777:20130209231553j:plain

4.logback.xml(ログの設定ファイル)を確認します

logback.xmlもちゃんといます!よっしゃこれを変更してみよう!
f:id:kikutaro777:20130209231627j:plain

5.logback.xmlの変更前と変更後

プログラムでは画面でボタンを押下されたら「debug」「info」「error」の3タイプのログを出力するように書いています。
で、変更前の設定はログ出力レベルを「debug」として、変更後はログレベルを「error」としました。

まずは変更前の確認から

f:id:kikutaro777:20130209231850j:plain

3つとも出力されています。

で、本題。

logback.xmlのログ出力レベルを「error」に編集して…管理画面から「再ロード」してみました。

f:id:kikutaro777:20130209231928j:plain

ポチッとな…

f:id:kikutaro777:20130209231935j:plain

で、画面もリロードしてボタンを押下すると…

f:id:kikutaro777:20130209232042j:plain

おー、ちゃんとerrorのしか出てない!!やった!!

.NETのweb.configとかと同じ感覚で設定ファイル修正ができた。良かったー(^^)
これなら自分が不安に思っていた運用イメージも払拭です。

コメント頂いた@megascusさんに感謝感謝ですm(_ _)m

にほんブログ村 IT技術ブログへ
にほんブログ村 にほんブログ村 IT技術ブログ Javaへ
にほんブログ村