WAS 小ワザ集

第21回:Application Anti Pattern(6) 外部リソースにアクセスするためのパラメーターをハード・コーディングしている

Comments

コンテンツシリーズ

このコンテンツは全#シリーズのパート#です: WAS 小ワザ集

このシリーズの続きに乞うご期待。

このコンテンツはシリーズの一部分です:WAS 小ワザ集

このシリーズの続きに乞うご期待。

Anti Pattern

あるプログラムには、データベースへの接続を提供するDataSourceをJNDIからLookupするためのパラメーターが、クラスのstatic変数としてハード・コーディングされていました。また、パラメーターは使用するクラスごとに定義していたため、値が埋め込まれたクラスは多岐にわたっていました。

Result

このプログラムでは、アプリケーション・サーバーのバージョンをあげる際に、コード全体にわたって大規模な修正が必要になってしまいました。また、サーバーの環境を変更した際にも、各種の接続障害によるエラーが発生し、なかなか解決できませんでした。

Best Practice

データベースに対する接続パラメーターに限らず、外部のリソースにアクセスするためのパラメーターは、使用しているJ2EE規格やWASのバージョンが上がったりすると、しばしば変更の必要性が発生します。また、アプリケーションを運用しているサーバーの構成を変更した場合などにも、接続のためのパラメーターは変化する可能性があります。

たとえば、WASの提供するJNDIのInitialContextを取得するためのファクトリー・クラスは、WAS V3.5以前では、

com.ibm.ejs.ns.jndi.CNInitialContextFactory

でしたが、WAS V4.0以降では、

com.ibm.websphere.naming.WsnInitialContextFactory

に変更になっています。

また、アプリケーションからJNDIによりオブジェクトをlookupする際には、WAS V3.5以前ではGlobal JNDI名を直接参照していましたが、WAS V4.0以降ではJ2EEでの規定に従い、リソース参照を使用してLocal JNDI名で参照することが推奨されています。

このような外部のリソースに接続するためのパラメーターとしては、以下のようなものがあります。

  • JNDIで使用するInitialContextを取得するためのファクトリー・クラスやプロバイダーURL
  • JNDIでlookupするオブジェクトのJNDI名
  • 使用するローカルファイルのディレクトリー名/ファイル名
  • HttpConnectionで接続する外部HTTPサーバーのURL
  • Socketで接続するサーバーのホスト名とポート名

このようなパラメーターについては、クラスのstatic変数などでハード・コーディングするのではなく、デプロイメント・ディスクリプターの環境エントリーや、プロパティー・ファイルを利用して一括管理し、アプリケーションの再コンパイルなしに修正が可能なようにしておくべきです。

また、Jakarta Common LoggingなどのロギングAPIを使用している場合には、実際に値を取得して使用するときに、トレースのレベルでパラメーターを記録するようにしておくと問題が発生したときに解決が容易となります。


ダウンロード可能なリソース


関連トピック


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=WebSphere
ArticleID=809645
ArticleTitle=WAS 小ワザ集: 第21回:Application Anti Pattern(6) 外部リソースにアクセスするためのパラメーターをハード・コーディングしている
publish-date=04122012