ページの先頭行へ戻る
Interstage Application Server/Interstage Web Server J2EE ユーザーズガイド

2.3.6 トレース機能によるトラブル調査

J2EEアプリケーションを作成する際は、クラスがどのクラスローダでロードされるかを考慮する必要があります。
ロードするクラスローダを誤った場合、J2EEアプリケーションが正常に動作しない場合があります。このようなトラブル発生時の調査に役立てるために、トレース機能を提供しています。
トレース機能は、クラスがロードされた時にどのクラスローダ上でロードされたかを“コンテナログ”に出力します。“コンテナログ”では以下が確認できます。

出力形式

トレース情報の形式を以下に示します。

出力項目

項目

内容

タイムスタンプ

クラスをロードした日時

クラス名

ロードしたクラスのクラス名(パッケージ名を含む)

リポジトリ

ロードしたクラスの保管先ディレクトリ名またはjarファイル名

クラスローダの種別

クラスをロードしたクラスローダの名称

クラスローダ

表示名

システムクラスローダ

System

Interstageクラスローダ

Interstage

Catalinaクラスローダ
注) Interstageのシステムで使用します

Catalina

Applicationクラスローダ

Application

Webappクラスローダ

Webapp

注意

システムクラスローダでロードされたクラスから使用されるクラスのトレースは出力されません。システムクラスローダでロードされるクラスは“2.3.1 クラスローダの構成”を参照してください。
システムクラスローダでロードされたクラスから使用されるクラスのトレースを出力したい場合はワークユニットのJavaVMオプションに-verbose:classを指定してJavaVMのトレース情報を取得してください。

ログの出力イメージ

[24/02/2004 16:17:22:093 +0900] [Loaded com.xxx.ClassA by Interstage]
[24/02/2004 16:17:22:101 +0900] [Loaded com.xxx.ClassB from c:\Interstage\J2EE\lib\xxx.jar by Webapp]

設定方法

トレースを出力するには、ワークユニットのJavaVMオプションに以下のオプションを設定します。

-Dcom.fujitsu.interstage.j2ee.ijserver.loader.trace=true

注意

トレース機能は、開発時のデバッグのための機能です。運用環境では使用しないことを推奨します。

使用例

ここではクラスローダのトレース機能の使用例について説明します。

契機

以下の問題が発生した場合にクラスローダのトレース情報を採取してください。クラスローダのトレース情報は問題解決のための手助けとなります。

  • ServletからEJBアプリケーションの呼び出しに失敗。コンテナログの解析の結果、ClassAでClassCastExceptionが発生していることを検出。

解析手順

以下の手順で解析を行います。

  1. ワークユニットのJavaVMオプションに以下のオプションを設定。
    -Dcom.fujitsu.interstage.j2ee.ijserver.loader.trace=true

  2. 再現テストを実施。

  3. コンテナログに出力されたトレース情報をClassAで検索し、以下の2行を検出。

    Loaded ClassA C:\Interstage\J2EE\var\deployment\ijserver\kaz001\apps\j2eesample.ear\CartBean.jar by Application
    Loaded ClassA C:\Interstage\J2EE\var\deployment\ijserver\kaz001\apps\j2eesample.ear\j2eesample.war\WEB-INF\classes by Webapp

    上記からClassAがEJBアプリケーションとWebアプリケーションの2箇所に保管されていることが判明。

検討

クラスのバッティングが原因でServletからEJBアプリケーションの呼び出しに失敗しているため、以下の対応を検討してください。

  1. EJBアプリケーションとWebアプリケーションの両方に同じクラスが存在しないようにアプリケーションの構成を変更することができないか。

  2. クラスローダの検索順番を“親が先”に設定することで回避可能か。

  3. クラスローダの分離を“分離しない”に設定することで回避可能か。