- - PR -
staticメソッドを含むクラスファイルの差分リリース
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-06-30 15:05
WEBアプリ開発をしている者でございます。
現在運用中のシステムで、部分的に修正があったとします。 あるクラスのstaticメソッドのロジック部分のみを変更した場合、 コンパイルした当該クラスファイルのみ本番環境のものを上書き、 アプリケーションサーバ再起動、という手順で問題ないでしょうか。 そのstaticメソッドを呼び出す側のクラスとの整合がとれなくなる 可能性がある、と言っている同僚がいるのですが、アプリケーション サーバを再起動するので、そんなことはないと思いますがいかがなもの でしょうか。 | ||||
|
投稿日時: 2005-06-30 15:11
全く問題ありません。
| ||||
|
投稿日時: 2005-06-30 15:26
それはおそらくstatic finalのような定数が絡んできた場合の
ことを同僚さんは言っているのではないでしょうか。 定数定義がしてあるファイル public static final String msg001 = "hello" があったとして、この定数を「goodbye」に変更、このファイル のみをコンパイルして差分適用させると、呼び元では変更前の 「hello」が表示されると思います。 私の場合は、どんな軽微な修正であれ、モジュール単位(warとかjar?) で全コンパイルして出すようにした方が安全だとは思っています。 | ||||
|
投稿日時: 2005-06-30 15:34
そうですよね。
たしかに全コンパイルして固めてリリースしたほうが安全ですね。 ご意見ありがとうございました。 | ||||
|
投稿日時: 2005-06-30 16:00
再起動するんだったら、
該当のクラスのみコンパイル⇒再起動でいいのでは? 定数であれメソッドであれ動的参照されるでしょ。 ちなみに、デプロイはjarとかwarとかでやってます? jarとかwarとかでデプロイするのだったら、 全コンパイル⇒war(jar)作成⇒デプロイ⇒再起動 の方が普通かも。 | ||||
|
投稿日時: 2005-06-30 16:26
あるクラスにpublic static finalのintやString等の定数が定義されている場合に、
その定数を参照しているクラスをコンパイルした場合、 その定数への参照ではなく、直接値が取り込まれます。
というようなコードがあるとします。 クラスBのAAAの部分はコンパイル時点で100に置き換えられ、 クラスAのAAAの値を変更しても一切変わりません。 変更するのであれば、影響範囲すべてに再ビルドを行わなければ行けません。 Eclipseあたりなら自動で対処してくれると思いますが・・・ (これって、Sunのコンパイラだけなのかな・・?) | ||||
|
投稿日時: 2005-06-30 17:50
未記入様
static finalな定数の問題はAPサーバの再起動とは全く の別問題です。 APサーバ再起動しようがしまいが、発生します。 classファイルレベルで参照値が記述されている ためもういちどstatic finalな定数が絡んでいる ソースを全てコンパイルしなおさなければ正しい 値に変更されません。 かつのり様提示のソースをサンプルにしてイメージ で言うと、クラスBのバイトコードにはAAAという 変数ではなく100という「値」が直接書き込まれて おり、クラスAのソースを修正後、コンパイル したとしてもクラスBのバイトコードは100を保持 したままになるということです。 # 合ってるかな? |
1