ファイル構成やクラスローダ構成の差異以外にも、各WebアプリケーションサーバでのJava EEの仕様解釈の差異によって、移行後、業務アプリケーションの挙動が変わることがある。ここでは、その一例として、JSPの仕様解釈の違いについて説明する。例えば、あるWebアプリケーションサーバでは問題なく動作していたJSPが、別のWebアプリケーションサーバに移行後、以前と異なる動作をしたり、コンパイル時に文法エラーが発生したりすることがある。例えば、JSP内に次の記述があると、一般的に文法エラーになる。
この例の場合、カスタムタグの属性値の中で「"」がネストしていることがエラーの原因だ。エラーを確実に回避するためには、属性値の中にある「"」をJSP仕様に従ってエスケープするとよい。例を次に示す(ただし、Webアプリケーションサーバによっては、エスケープしなくても問題なく動作するものもある)。
文法エラーがあるかどうかはコンパイル時に確認できる。しかし、JSPの場合、クライアントから初めてリクエストが送信されてきたときにコンパイルされるため、コンパイルエラーが発生するかどうかを確認するためには、リクエストを送信する必要がある。しかも、各JSPに対してコンパイルするためには、それぞれリクエストを送信する必要があり、手間が掛かる。実際に業務アプリケーションを動作させることなく、JSPのエラーの有無を確認するには、JSPの事前コンパイルの機能を利用するとよいだろう。
しかも、JSPの事前コンパイル機能を使用すれば、複数のJSPをまとめてコンパイルすることもできるというメリットもある。JSPの事前コンパイル機能でコンパイルすることで、文法のエラーチェックが簡単にできる。JSPの事前コンパイル機能は、Webアプリケーションサーバで提供されていることが多いので、移行後のアプリケーションサーバで提供されているかを確認してみよう。
今回は、Java EEアプリケーション移行時に注意すべき代表的な点について紹介した。特に、Java EE標準仕様の範囲でもWebアプリケーションサーバに依存する個所があることを忘れずに確認しておきたい。システムの移行時には是非これらの情報を参考にしてほしい。
企業向け情報を集約した「ITmedia エンタープライズ」も併せてチェック
Copyright © ITmedia, Inc. All Rights Reserved.