• 締切済み

WeblogicのJavaのコンパイル

WebLogic(WebLogic Server 9.2)を使って開発をしています。 http://questionbox.jp.msn.com/qa4838819.html で質問をしたところ、 「古いJSPに戻してデプロイしても、JSPはコンパイルしなおさない」とのことでした。 では、JSP以外のソース(Javaソース)を古いものに戻した場合はどうなのでしょうか? やはりコンパイルしなおさないのでしょうか? コンパイルしなおさない場合、やはりJavaソースの更新日付を見て 新旧の判断をしているのでしょうか? また、初歩的な質問かもしれないのですが、コンパイルしたJavaソースはどこに展開されるのでしょうか? (JSPはweblogic.xmlのworkingDirパラメータで指定されたディレクトリに展開されているようですが)

みんなの回答

  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

> コンパイルしなおさない場合、やはりJavaソースの更新日付を見て > 新旧の判断をしているのでしょうか?  JSP以外のJavaソースはいかなる場合でも自動でコンパイルされたりはしないんじゃないでしょうか。それを行うのはEclipseなどの開発ツールの責任では? WebLogicにはそんな機能があるのかも知れませんけど、普通はデプロイの段階でwarファイルなりearファイルにはコンパイルされた.classファイルが含まれているのではないでしょうか。そもそも(JSPじゃなくて)サーブレットの場合はソースは一緒にデプロイしませんよね。ソースを含めずにwarファイル作りますよね。  JSPの場合が特別なのであって、JasperなどのJSPテクノロジ(http://java.sun.com/products/jsp/)に対応した仕組みで実現されているはずです。最近ではJSPも事前にコンパイルしたバイナリをデプロイするのではないでしょうか。開発環境なら話は別ですが。 > コンパイルしたJavaソースはどこに展開されるのでしょうか? > (JSPはweblogic.xmlのworkingDirパラメータで > 指定されたディレクトリに展開されているようですが) いや、ご自分でworkingDirパラメータで指定されたディレクトリに展開されているとおっしゃってるじゃないですか。そこに展開されているんじゃないのですか? そこにjavaファイルが見当たらないという事でしょうか。  再デプロイしてもWebアプリ(アプリケーションのID)が変わらないのであれば、無駄なコンパイルを避けるために日付を比較するのは妥当な事です。  index.jspファイルの日付<index_jsp.javaの日付の時にもコンパイルするのであればコンパイルする/しないの判断ができませんし、index_jsp.javaの日付とindex_jsp.classの日付でも同様ですよね。 $ touch index.jsp  ↓  index.jspの日付>index_jsp.javaの日付<index_jsp.classの日付 お、JSPの方が新しいからJSPをコンパイルしてjavaファイルを作ろう  ↓  index.jspの日付<index_jsp.javaの日付>index_jsp.classの日付 お、ソースの方が新しいからコンパイルしてclassファイルを作ろう  ↓  index.jspの日付<index_jsp.javaの日付<index_jsp.classの日付>WebLogicのJavaVMにロードされているclassの日付(をどうやって保持しているのかは知りません) お、バイナリが刷新されたからリロードしなきゃ  ↓  index.jspの日付<index_jsp.javaの日付<index_jsp.classの日付<WebLogicのJavaVMにロードされているclassの日付 ああ、これで安心。ページアクセスで新しいJSPの内容が表示されるようになる。  ↓  古いJSPに置き換えてみる。  ↓  index.jspの日付<index_jsp.javaの日付<index_jsp.classの日付<WebLogicのJavaVMにロードされているclassの日付 index.jspファイルは変わったようだけど日付(の関係)は変わらないな。コンパイルしても無駄からしない。

関連するQ&A

専門家に質問してみよう