スタック・トレースの解釈
ORB がミドルウェア・アプリケーションの一部であるか、Java™ スタンドアロン・アプリケーション (またはアプレット) を使用しているかにかかわらず、障害発生時に生成されるスタック・トレースを取得する必要があります。 このトレースはログ・ファイル、あるいは端末またはブラウザー・ウィンドウに示される場合があり、複数のスタック・トレース・チャンクで構成されている場合があります。
以下の例では、 WebSphere® Application Serverで実行されているサーバー ORB によって生成されたスタック・トレースについて説明します。
org.omg.CORBA.MARSHAL: com.ibm.ws.pmi.server.DataDescriptor; IllegalAccessException minor code: 4942F23E
completed: No
at com.ibm.rmi.io.ValueHandlerImpl.readValue(ValueHandlerImpl.java:199)
at com.ibm.rmi.iiop.CDRInputStream.read_value(CDRInputStream.java:1429)
at com.ibm.rmi.io.ValueHandlerImpl.read_Array(ValueHandlerImpl.java:625)
at com.ibm.rmi.io.ValueHandlerImpl.readValueInternal(ValueHandlerImpl.java:273)
at com.ibm.rmi.io.ValueHandlerImpl.readValue(ValueHandlerImpl.java:189)
at com.ibm.rmi.iiop.CDRInputStream.read_value(CDRInputStream.java:1429)
at com.ibm.ejs.sm.beans._EJSRemoteStatelessPmiService_Tie._invoke(_EJSRemoteStatelessPmiService_
Tie.java:613)
at com.ibm.CORBA.iiop.ExtendedServerDelegate.dispatch(ExtendedServerDelegate.java:515)
at com.ibm.CORBA.iiop.ORB.process(ORB.java:2377)
at com.ibm.CORBA.iiop.OrbWorker.run(OrbWorker.java:186)
at com.ibm.ejs.oa.pool.ThreadPool$PooledWorker.run(ThreadPool.java:104)
at com.ibm.ws.util.CachedThread.run(ThreadPool.java:137)
この例では、ORB は Java 例外を CORBA 例外にマップしました。 この例外は、応答メッセージの一部として、後からクライアントに送り返されています。 クライアント ORB は応答からこの例外を読み取ります。 CORBA 仕様に従って Java 例外 (java.rmi.RemoteException ) にマップし、この新しい例外をクライアント・アプリケーションにスローして戻します。
このイベント・チェーンにより、多くの場合、スタック・トレースと同様、元の例外はどこにあるのか分からなくなります。 初期バージョン (1.2.x、1.3.0 など) の ORB で元の例外のスタック・トレースを取得する唯一の方法は、いくつかの ORB デバッグ・プロパティーを設定することです。 新しいバージョンには、ネストされたすべてのスタック・トレースをメッセージ・ストリングに記録またはコピーするメカニズムが組み込まれています。 古い ORB リリース (1.3.0 以前) で処理する場合は、新しいバージョンで問題をテストすることをお勧めします。 問題が再現できない場合 (既知のバグで解決済みの場合) もあります。また、取得したデバッグ情報の方がはるかに有用です。