...

Oracle9i Forms 診断テクニック

by user

on
Category: Documents
182

views

Report

Comments

Transcript

Oracle9i Forms 診断テクニック
Oracle9i Forms 診断テクニック
オラクル・テクニカル・ホワイト・ペーパー
2004 年 1 月
Oracle9i Forms 診断テクニック
概要 ...................................................................................................................... 4
目的................................................................................................................. 4
対象ユーザー................................................................................................. 4
問題解決のための診断アプローチ ............................................................. 4
インストールの確認 .......................................................................................... 6
Web Form Tester の使用................................................................................ 6
Appletviewer の使用 ...................................................................................... 8
FORMS の構成と配置...................................................................................... 10
Formsweb.cfg................................................................................................ 10
Default.env.................................................................................................... 11
Registry.dat ................................................................................................... 12
Oracle Jinitiator............................................................................................. 13
ポートの検出............................................................................................... 16
FORMS セッションのブロック図 .................................................................. 18
Forms Servlet と Forms Listener Servlet...................................................... 20
診断ツール ........................................................................................................ 21
アプレットからの情報............................................................................... 21
Jinitiator の Java コンソールからの情報................................................... 22
Forms Trace の使用...................................................................................... 23
サーブレット・ログの使用....................................................................... 25
FRM-92XXX ERRORS ..................................................................................... 26
FRM-92010................................................................................................... 27
FRM-92050................................................................................................... 28
FRM-92100................................................................................................... 31
FRM-92101................................................................................................... 32
FRM-92102................................................................................................... 33
FRM-92120................................................................................................... 34
FRM-92150/FRM-92160 .............................................................................. 35
他の問題 ............................................................................................................ 36
サーバーのクラッシュ............................................................................... 36
ダンプ・ファイルの例(Solaris) ...................................................... 36
ダンプ・ファイルの例(Windows) .................................................. 37
環境の検証 ............................................................................................. 38
ダンプ・ファイルの使用 ..................................................................... 39
クライアントのクラッシュ....................................................................... 39
ダンプ・ファイルの例 ......................................................................... 40
ダンプ・ファイルの使用 ..................................................................... 43
アプリケーションのハング状態 ............................................................... 44
Java スレッド・ダンプ ......................................................................... 44
ダンプの使用 ......................................................................................... 49
アプリケーションのハングの原因 ..................................................... 49
メモリーの問題........................................................................................... 50
JVM ランタイムのオプション設定 .................................................... 50
メモリー・リークとは ......................................................................... 51
Oracle9i Forms 診断テクニック
2
Oracle Corporation 発行「Oracle9i Forms Diagnostic Techniques」の翻訳版です。
Java のメモリー・リーク ..................................................................... 52
メモリー・リークの判別方法 ............................................................. 52
パフォーマンスの問題............................................................................... 53
キャッシングとは ................................................................................. 53
キャッシングの重要性 ......................................................................... 53
キャッシングの有効を確認する方法 ................................................. 54
OJDK のパフォーマンス向上 .............................................................. 54
用語 .................................................................................................................... 56
Oracle ホーム ............................................................................................... 56
サーブレット............................................................................................... 56
JInitiator ........................................................................................................ 56
その他の用語............................................................................................... 57
Oracle9i Forms 診断テクニック
3
Oracle Corporation 発行「Oracle9i Forms Diagnostic Techniques」の翻訳版です。
Oracle9i Forms 診断テクニック
概要
目的
このドキュメントは、Web 上で Oracle9i Forms を使用したアプリケーションの実
行時に発生する問題の解決に役立つ情報を提供します。具体的には、エラーの一
般的な原因、インストールの確認方法、問題の診断に提供されるツールとテクニッ
クです。
対象ユーザー
このドキュメントは、Oracle9i Application Server のコンポーネントである Oracle9i
Forms、特に Oracle9iAS Forms Services を使用した問題の診断および解決を担当す
るユーザーを対象とします。このホワイト・ペーパーでは診断のプロセスの説明、
情報収集、最終的には問題解決のために使用可能なテクニックとツールを紹介し
ます。
注意: Oracle Applications のシステム管理者は、このドキュメントの一部が Oracle
Applications に適用できないことを認識してください。Oracle Applications の環境
は、厳重に制御されています。そのため、実行する手順が Oracle Applications で
サポートされているかどうかを作業前にオラクル社カスタマ・サポート・センター
に確認してください。
問題解決のための診断アプローチ
問題への取組み方法は様々です。次のトラブルシューティング・リストは、完璧
な問題解決の指針や完全に保証された解決策を提供してはいませんが、複雑な問
題に取り組む場合に有用です。
トラブルシューティング・ヒントのリストを次に示します。
体系的に取り組む
•
問題の原因と思われる箇所を直感や推測で断定しないでください。まず、
他の可能性を消去します。陥りがちな落とし穴は、証拠が示す内容を詳
しく検証せずに、自分の理論を裏付ける証拠を見つけることだけに時間
を費やすことです。
•
Oracle9i Forms 診断テクニック
些細なことや当然と思われる事象が重要である場合があります。
4
Oracle Corporation 発行「Oracle9i Forms Diagnostic Techniques」の翻訳版です。
問題を分割する
•
問題を扱いやすいセクションに分割します。これにより、必要な領域の
みを検証対象とすることができます。1 つの領域を検証し、問題がないこ
とを確認したうえで次のセクションに進みます。効果的に問題を診断す
るには、対象を本質的な要素に絞ることが必要です。これは、オラクル
社カスタマ・サポート・センターに解決策を相談する場合にも重要です。
•
問題の内容、発生時期、発生頻度を特定します。同様に重要なことは、
何が正常に動作していないか、いつ動作しなかったかを確認することで
す。たとえば、常に午前 9 時から午前 10 時に同じビル内のユーザー全員
に同じ問題が発生するとします。この場合、他のビルや午後 10 時以降に
は問題が発生しないという事実も同様に重要です。9 時から 10 時まで、
ユーザーが特定な Form のみを使用している可能性があります。または、
9 時と 10 時の間にシステムの負荷が最大になることも考えられます。
エラーメッセージを読む
•
•
情報がエラーメッセージの中に含まれている場合があります。
このドキュメントは、ユーザーがエラーメッセージを理解して対処方法
を判断できるよう解説します。
可能なかぎり問題を再現する
•
問題を再現できれば、エンド・ユーザーが見落としていた動作を発見で
きる場合があります。特定の動作が常に発生する場合、ユーザーは、そ
れが当然の動作であると断定しているかもしれません。問題を再現する
ことで、解決への第一歩を踏み出せます。
使用するツールを習得する
•
診断ツールを使用する場合は、ツールの使用方法、およびツールにより
生成されるデータの解釈方法を必ず習得してください。問題が発生する
前に、どのようにツールを活用できるかを調べてください。ツールを習
得するための時間も必要です。
Oracle9i Forms 診断テクニック
5
Oracle Corporation 発行「Oracle9i Forms Diagnostic Techniques」の翻訳版です。
インストールの確認
インストールに失敗すると構成が不完全になり、Forms は正しく実行されません。
Oracle 9iAS/9iDS のインストールが成功したというメッセージの表示後、Forms
サービスが正しく構成されているかどうか確認できます。次に手順を説明します。
Web Form Tester の使用
これは、Oracle 9iAS/9iDS インストールに付属しています。Oracle 9iAS/9iDS のイ
ンストールと Forms Services の構成が正しいかどうかの検証には、中間層で Web
Form Tester を実行します。次の例では、これを Windows マシンで実行する方法を
示します。
•
HTTP Server を起動していない場合、「Start」 → 「Program Files」 →
「Oracle Application Server-IAS Home」 → 「Oracle HTTP Server」 →
「Start HTTP Server」の順に選択して起動します。Oracle 9iDS では、
「Start」→「Program Files」→「Oracle9i Developer Suite–Home for IDS」
→ 「Forms Developer」 → 「Start OC4J Instance」の順に選択して、OC4J
インスタンスを起動します(まだ起動していない場合)。
•
ブラウザのインスタンスを開きます。
URL に、<OracleHome>\tools\web90\html\runform.htm と入力して、
[ENTER]キーを押します。<OracleHome>を Oracle 9iAS/9iDS のために実
際に使用している Oracle ホームで置き換えます。
•
または、Oracle 9iAS の Start-up メニューで、「Start」 → 「Program Files」
→ 「Oracle9iAS–Home for IAS」 → 「Forms Developer」 → 「Oracle9iAS
Forms Services」 → 「Run a form on the web」の順に選択して、Web Form
Tester を実行することもできます。Oracle 9iDS の場合は、「Start-up」メ
ニューで、「Start」 → 「Program Files」 → 「Oracle9i Developer
Suite–Home for IDS」 → 「Forms Developer」 → 「Oracle9iAS Forms
Services」 → 「Run a form on the web」の順に選択します。
Oracle9i Forms 診断テクニック
6
Oracle Corporation 発行「Oracle9i Forms Diagnostic Techniques」の翻訳版です。
•
Web ポートを入力して、「Run form」ボタンをクリックします。ポート
の検出方法は、このドキュメントの「ポートの検出」の項を参照してく
ださい。
Oracle9i Forms 診断テクニック
7
Oracle Corporation 発行「Oracle9i Forms Diagnostic Techniques」の翻訳版です。
前述のようにフォームが表示されていれば、Oracle 9iAS/9iDS のインストールおよ
び構成は正常に完了しています。
また、インストーラによって中間層で Oracle 9iAS/9iDS の基本的なフォーム設定
が正しく行われたかどうかをクライアント・マシンからテストできます。ブラウ
ザを使用して、任意のクライアント・マシンからテストを実行します。URL は、
「http://myserver.com:NNNN/forms90/f90servlet?form=test.fmx」です。
Appletviewer の使用
Web Form Tester を使用たインストールの確認に表示されたフォームは、
<OracleHome>/forms90 に存在する test.fmx です。同じフォームを使用して(他の
フォームも使用可)、Forms Runtime(Windows では ifweb90.exe、Solaris では
f90webm)の状態を検証できます。それには、<OracleHome>/forms90/java ディレ
クトリに html ファイル(たとえば、test.html)を作成します。test.html の内容は次
のとおりです。
例では、Oracle 9iAS の Oracle ホームが
E:\Ora9iAS になっています。使用して
いる Oracle ホームに変更してください。
<HTML>
<APPLET CODEBASE="."
CODE="oracle.forms.engine.Main"
WIDTH="500"
HEIGHT="400">
<PARAM NAME="SERVERHOST" VALUE="incq139b.idc.oracle.com">
<PARAM NAME="ARCHIVE" VALUE="f90all.jar">
<PARAM NAME="SERVERPORT" VALUE="9000">
<PARAM NAME="SERVERARGS" VALUE="module=E:\Ora9iAS\forms90\
test.fmx">
</APPLET>
<HTML>
Oracle9i Forms 診断テクニック
8
Oracle Corporation 発行「Oracle9i Forms Diagnostic Techniques」の翻訳版です。
前述のファイルで強調されているタグについて簡単に説明します。
•
CODE:
アプレットを実行する初期の Java クラス。
•
CODEBASE:
アプレットの起動時に実行を開始する初期クラス(CODE で指定)の位
置。
•
ARCHIVE:
Jar ファイルの位置。前述の例では、Forms Java クラスを含む Jar ファイル
の位置になります。
•
SERVERHOST:
Forms web ランタイム(Windows では ifweb90.exe、Solaris では f90webm)
が実行されるホスト・マシンの名前。
•
SERVERPORT:
アプレットが Forms web ランタイムとの通信に使用するポート番号。
•
SERVERARGS:
forms web ランタイムに渡されるコマンドライン。ここでモジュールを指
定すると、このコマンドラインは forms web ランタイムが実行されるマシ
ン上のフォーム(.fmx ファイル)を参照します。
ファイルの作成後、コマンド・プロンプト画面を開き、次のコマンド(太字で表
示)を実行します。
例では、Oracle 9iAS の Oracle ホームが
E:\Ora9iAS になっています。使用して
いる Oracle ホームに変更してください。
Microsoft(R) Windows NT(TM)
(C) Copyright 1985-1996 Microsoft Corp.
C:\>e:
E:\>cd E:\ORA9iAS\forms90\java
E:\ORA9iAS\forms90\java>ifweb90 webfile=-9000
E:\ORA9iAS\forms90\java>E:\ORA9iAS\jdk\bin\appletviewer.exe
test.html
これにより、アプレット・ビューアでフォーム test.fmx が次のように起動されま
す。アプレット・ビューアにフォームが表示された場合は、Forms ランタイムが
正常に動作しています。このように、アプレット・ビューアを使用して、Forms
の動作を検証できます。
Oracle9i Forms 診断テクニック
9
Oracle Corporation 発行「Oracle9i Forms Diagnostic Techniques」の翻訳版です。
FORMS の構成と配置
インストール後すぐに Forms Services を使用できるよう、Oracle 9iAS/9iDS は自動
的に構成されます。アプリケーションの構成のみが必要です。
次の 3 つのファイルを構成すると、Forms Services は実行時に配置されます。ファ
イルはサーバー上の中央に常駐しているため、一箇所で構成できます。
•
<OracleHome>/forms90/server/formsweb.cfg
•
<OracleHome>/forms90/server/default.env
•
<OracleHome>/forms90/java/oracle/forms/registry/Registry.dat
ここではデフォルトのファイル名を使用していますが、これらのファイル名は設
定可能です。この 3 つのファイルを組み合せることで、複数の異なる実行時環境
が 1 回のインストールで可能になります。
Formsweb.cfg
Web 上で Oracle Forms を使用して、formsweb.cfg ファイルのランタイム・パラメー
タを指定します。このファイルは、Forms の各アプリケーションの設定を制御し
ます。デフォルト・セクションに加えて、各アプリケーションにデフォルト設定
に優先するオプション・セクションがあります。formsweb.cfg ファイルのエント
リの一部を次に示します。
Oracle9i Forms 診断テクニック
10
Oracle Corporation 発行「Oracle9i Forms Diagnostic Techniques」の翻訳版です。
userid =
form=test.fmx
background=
width= 640
height=480
[summit]
userid=summit/summit@forms1-pc
form=customers
background=summit.jpg
width=994
height=582
最初の設定は、デフォルト設定です。特に無効にしないかぎり、これらの設定は
すべての Forms アプリケーションに使用されます。[summit]は、アプリケーショ
ン固有の設定で、この場合は Summit アプリケーションでデフォルト設定に優先し
ます。たとえば、デフォルトではフォームにバックグラウンドがありません。ア
プリケーションを実行すると、バックグラウンドが summit.jpg のイメージになり
ます。
(ここでバックグラウンドは、Form 内のバックグラウンド・キャンパスではなく、
Forms Client Java アプレットのバックグラウンドを指します。同様に、width パラ
メータと height パラメータは、Forms ウィンドウの幅と高さではなく、Java アプ
レットの幅と高さを示します。)アプリケーションの実行には、このファイルか
ら config パラメータで使用するセクションを指定できます。次に例を示します。
http://myserver.com:NNNN/forms90/f90servlet?config=summit
NNNN は、Forms Services が実行されているポート番号です。formsweb.cfg のアプ
リケーション・セクション([summit])にアプリケーションと同じ名前(Summit)
を付けると便利ですが、必須ではありません。たとえば、複数の異なるアプリケー
ションが同じアプリケーション・セクションを使用する場合があります。
Default.env
ここで環境変数を指定します。一般的に、設定する変数には次に示すものがあり
ます。
•
ORACLE_HOME
•
FORMS90_PATH
•
CLASSPATH
デフォルトでは、ユーザーがアプリケーションを起動するたびに、default.env ファ
イルが確保されます。ただし、各アプリケーションは、次のような設定
(Formsweb.cfg ファイル内)の独自の ENV ファイルを使用できます。
Oracle9i Forms 診断テクニック
11
Oracle Corporation 発行「Oracle9i Forms Diagnostic Techniques」の翻訳版です。
userid =
form=test.fmx
background=
width= 640
height=480
envFile=default.env
[summit]
userid=summit/summit@forms1-pc
form=customers
background=summit.jpg
width=994
height=582
envFile=summit.env
Registry.dat
このファイルにより、実行時に Forms 内のアイコンとフォントを制御する設定を
指定できます。ここで、Forms が default.icons.iconpath 設定を持つアイコンを見つ
ける場所を指定します。
default.icons.iconpath=C:\MyApp\icons;C:\MyOtherApp\icons
次のように、各アプリケーションは formsweb.cfg ファイルの serverApp 設定を指定
することで、専用のレジストリ・ファイルを使用できます。
userid =
form=test.fmx
background=
width= 640
height=480
envFile=default.env
[summit]
userid=summit/summit@forms1-pc
form=customers
background=summit.jpg
width=994
height=582
envFile=summit.env
serverApp=/summitapp/summit_registry
serverApp は URL を使用して、拡張子のないレジストリ・ファイルを指定します。
この例では、相対的な URL、/summitapp/が Web サーバー構成ファイルの仮想ディ
レクトリとして定義されます。
Forms Services の構成が終わると、アプリケーションを実行できます。アプリケー
ションの実行には、ブラウザにアプリケーションの URL を入力します。URL は、
次のように表示されます。
Oracle9i Forms 診断テクニック
12
Oracle Corporation 発行「Oracle9i Forms Diagnostic Techniques」の翻訳版です。
http://myserver.com:NNNN/forms90/f90servlet?config=summit
NNNN は Forms Services のポート番号です。Oracle9i Application Server は、これら
のリクエストを Forms Servlet にルーティングするように構成されています。
"config=summit"は、Forms Servlet に対するパラメータで、それらの設定を[summit]
セクションを検索して使用するように指示します。このように Forms Services が実
行するフォーム、使用する userid などを認識します。
Oracle Forms 10g には、無視するパラ
メータを制限する機能があります。詳細
は、OTN の『Oracle Forms 10g New
Features』を参照してください。
config パラメータはオプションです。
省略されると、Forms Services は、formsweb.cfg
ファイルのデフォルト設定のパラメータを使用します。たとえば、セクション
“Formsweb.cfg”の例でわかるように、config パラメータが存在しない場合は、
test.fmx を実行できます。また、formsweb.cfg の設定の多くは、URL で無効にでき
ます。次に、有効な URL の例を示します。
„
http://myserver.com:NNNN/forms90/f90servlet?form=myform.fmx
ディフォルト設定を使用しますが、かわりにモジュール myform.fmx を実行します。
„
http://myserver.com:NNNN/forms90/f90servlet?config=summit&form=
summitTest.fmx
[summit]セクションで指定した設定を使用しますが、異なる summitTest.fmx
フォームを使用します。
„
http://myserver.com:NNNN/forms90/f90servlet?config=summit&form=
summitTest.fmx&usreid=scott/tiger@test
異なったデータベースに接続する以外は、前の例と同様です。
SSO が使用可能であれば、データベース
の資格証明は OID から抽出されます。
formsweb.cfg ファイルには、URL 上のユーザーが無効にできるパラメータに関す
るコメントが含まれています。それ以外のパラメータは、管理者のみが設定でき
るもので、URL 上で無効にできません。ファイル formsweb.cfg または URL で userid
が指定されていない場合は、ユーザーにユーザー名とパスワードの入力を求める
プロンプトが表示されます。
Oracle Jinitiator
Oracle JInitiator は、Oracle 9iAS/9iDS のインストール時に、Oracle Universal Installer
によってインストールおよび構成されます。Oracle の Metalink Web サイト
(http://metalink.oracle.com)からダウンロードできる JInitiator の新しいバージョン
を使用する場合、このセクションは便利です。
Oracle JInitiator(新しいバージョン)のインストール後、readme.htm ファイルと
jinit_tags.htm ファイルから有用な情報を取得できます。readme.htm ファイルには、
Oracle JInitiator とブラウザのバージョン互換性の詳細、サポートされる MIME タ
イプと classid が含まれています。jinit_tags.htm ファイルは、Oracle JInitiator を
Netscape と Internet Explorer の両方と使用するための HTML タグの使用方法を説明
します。
Oracle9i Forms 診断テクニック
13
Oracle Corporation 発行「Oracle9i Forms Diagnostic Techniques」の翻訳版です。
Oracle JInitiator をインストールすると、classid が登録され、Internet Explorer で使
用できます。
Oracle JInitiator を使用して Forms アプレットの実行が必要であることをブラウザ
に認識させるため、Oracle Jinitiator は、basejini.htm というファイルを探します。
<OracleHome>/forms90/server ディレクトリに存在するこの HTML ファイルには、
Oracle JInitiator を Netscape、Internet Explorer の両方と使用するために必要な情報
が含まれています。2 つのブラウザが異なる構文を使用して、JInitiator などのプラ
グインをロードするため、HTML ファイルの情報の一部は重複して存在します。
<EMBED>タグの内部に含まれる情報は Netscape に、<OBJECT>タグは Internet
Explorer に認識されます。このファイルには、パーセントの記号(%)で囲まれた
変数が含まれます。これらの変数の値は、サーブレット構成ファイル
(formsweb.cfg)で定義されます。
Internet explorer とともに使用する html ファイルのサンプルは次のとおりです。
<HTML>
<HEAD>
<TITLE>Oracle9iAS Forms Services</TITLE>
</HEAD>
<BODY>
<OBJECT classid="clsid:CAFECAFE-0013-0001-0013-ABCDEFABCDEF"
codebase="/forms90/jinitiator/jinit.exe#Version=1,3,1,13"
WIDTH="750"
HEIGHT="600"
<PARAM NAME="TYPE" VALUE="application/x-jinitapplet; version=1.3.1.13">
<PARAM NAME="CODEBASE" VALUE="/forms90/java">
<PARAM NAME="CODE" VALUE="oracle.forms.engine.Main" >
<PARAM NAME="ARCHIVE" VALUE="f90all_jinit.jar" >
<PARAM NAME="serverURL"
VALUE="/forms90/l90servlet?ifcfs=/forms90/f90servlet?accept
Language=en-us">
<PARAM NAME="serverArgs" VALUE="module=test.fmx">
</OBJECT>
</BODY>
</HTML>
formsweb.cfg で、基本的な設定に変更が必要な箇所は、強調表示されたセクショ
ンのみです。次に簡単に説明します。
•
classid:
これはロードされているアプリケーションの classid です。Explorer は、
この id を使用して、このアプリケーションのサポートに必要なプラグイ
ンを判断し、そのロードを試みます。その値はインストールされている
JInitiator のバージョンによって異なります。使用している JInitiator のリ
リースに対応する正確な値については、Oracle JInitiator readme.htm ファイ
ルを参照してください。
Oracle9i Forms 診断テクニック
14
Oracle Corporation 発行「Oracle9i Forms Diagnostic Techniques」の翻訳版です。
•
codebase:
Explorer が、このタイプのアプリケーションを扱えるプラグインを見つけ
られない場合、ユーザーはこの URL からプラグインのコピー(Oracle
JInitiator)をダウンロードできます。手作業で Oracle JInitiator をインストー
ルした場合、このエントリが無視されることがあります。これをエント
リ PARAM NAME=”CODEBASE”と混同しないでください。
•
PARAM NAME=“CODEBASE”:
このエントリは、サーバー上の Java クラス・ファイルのルート・ディレ
クトリを指しています。
•
PARAM NAME=“ARCHIVE”:
JAR ファイルの検索場所を JVM に指示します。また、これは HTTP サー
バーによって定義される仮想ディレクトリです。
•
PARAM NAME=“TYPE”:
ロードされているアプリケーションの MIME タイプ。
•
PARAM NAME=“serverArgs”:
Forms web ランタイムに渡されるコマンドライン。
Netscape と使用する html ファイルのサンプルは次のとおりです。
<HTML>
<HEAD><TITLE>Oracle9iAS Forms Services</TITLE></HEAD>
<BODY>
<EMBED SRC=""
PLUGINSPAGE="/forms90/jinitiator/us/jinit_download.htm"
TYPE="application/x-jinit-applet;version=1.3.1.13"
java_codebase="/forms90/java"
java_code="oracle.forms.engine.Main"
java_archive="f90all_jinit.jar"
WIDTH="750" HEIGHT="600"
serverURL="/forms90/l90servlet?ifcfs=/forms90/f90servlet?accept
Language=en-us"
serverArgs module=test.fmx >
<NOEMBED> </NOEMBED></EMBED>
</BODY>
</HTML>
formsweb.cfg で、基本的な設定に変更が必要な箇所は、強調表示された項目(タ
グ)のみです。次に簡単に説明します。
•
TYPE:
これはロードされているアプリケーションの MIME タイプです。Netscape
は、この MIME タイプをサポートできるプラグインのロードを試みます。
その値はインストールされている JInitiator のバージョンによって異なり
ます。正確な値については、\doc ディレクトリの readme.htm ファイル
を参照してください。この MIME タイプは、Oracle JInitiator のすべての
バージョンに使用できます。ただし、JInitiator の複数のバージョンをイン
ストールしている場合、必ずしも最新のバージョンが選択されるとはか
Oracle9i Forms 診断テクニック
15
Oracle Corporation 発行「Oracle9i Forms Diagnostic Techniques」の翻訳版です。
ぎりません。このため、JInitiator の必要なバージョンの指定を強くお薦め
します。
•
java_codebase:
このエントリは、サーバー上の Java クラス・ファイルのルート・ディレ
クトリを指しています。これは仮想ディレクトリです。
•
java_archive:
JAR ファイルの検索場所を JVM に指示します。これも仮想ディレクトリ
です。
•
PLUGINSPAGE:
Netscape が、この MIME タイプを扱うプラグインを見つけられない場合、
ユーザーはこの URL からプラグインのコピー(Oracle JInitiator)をダウ
ンロードできます。手作業で Oracle JInitiator をインストールした場合、
このエントリが無視されることがあります。
ポートの検出
インストール後に Forms の実行に使用するポート番号が不明な場合、またはそれ
が必要な場合は、<OracleHome>\install\portlist.ini ファイルでポート番号を検索
できます。適切なポート番号を使用してください。
インストール後、Oracle9iDS の portlist.ini は、次のようになります。
Oracle9iDS HTTP port = 8889
←このポートを使用して IDS の Forms を実行す
る。
Oracle9iDS JMS port = 9240
Oracle9iDS RMI port = 23910
Oracle HTTP Server Diagnostic port = 7201
…
Oracle9iAS の場合、インストール後、portlist.ini は次のようになります。
Oracle HTTP Server Jserv port = 8007
;OracleAS Components reserve the following ports at install time.
;As a post-installation step, you can reconfigure a component to use
a different port.
;Those changes will not be visible in this file.
[System]
Host Name = incq139b
Oracle9i Forms 診断テクニック
16
Oracle Corporation 発行「Oracle9i Forms Diagnostic Techniques」の翻訳版です。
[Ports]
Oracle HTTP Server port = 7777
←このポートを使用して IAS の Forms を実
行する。
Oracle HTTP Server Listen port = 7778
Oracle HTTP Server SSL port = 4443
Oracle HTTP Server Listen (SSL) port = 4444
Oracle HTTP Server Diagnostic port = 7200
Log Loader port = 44000
Java Object Cache port = 7000
Enterprise Manager Agent Port = 1830
Enterprise Manager Oracle9iAS Console RMI port = 1850
Oracle HTTP Server Listen port = 7778
Oracle HTTP Server Listen (SSL) port = 4444
Oracle Notification Server Request port = 6003
Oracle Notification Server Local port = 6100
Oracle Notification Server Remote port = 6200
DCM Java Object Cache port = 7100
Enterprise Manager Oracle9iAS Console port = 1812
Web Cache HTTP Listen port = 7777
Web Cache HTTP Listen (SSL) port = 4443
Web Cache Administration port = 4000
Web Cache Invalidation port = 4001
Web Cache Statistics port = 4002
Oracle9iAS Discoverer port = 7777
Osagent Port = 16002
Reports Services SQL*Net port = 1950
Reports Services Visigenics CORBA port = 14000
Oracle9i Forms 診断テクニック
17
Oracle Corporation 発行「Oracle9i Forms Diagnostic Techniques」の翻訳版です。
FORMS セッションのブロック図
Forms セッション中の動作を理解することで、Web forms の効果的なトラブル
シューティングが可能です。この項では、Forms セッションの構造を簡単に説明
します。
Forms アプリケーション配置のアーキテクチャを Oracle 9i Forms セッションのブ
ロック図に示します。これは、クライアント層、データベース層、アプリケーショ
ン層を持つ 3 層アークテクチャで、異なる 2 台のマシン上の Web Server および
Forms サービスで構成されています。(中間層は、必ずしも単一のマシンを意味
するわけではありません。)
ブロック図で示しているのは、1 例です。Web Server と同一マシン上への Forms
Services のインストール、複数のマシンへの Forms Services のインストール、それ
らの間のロード・バランシングなどの組合せも可能です。いずれの場合も、同一
のコンポーネントが存在する必要があります(HTTP サーバー、サーブレット・
エンジン、Forms サーブレット、Forms Listener Servlet、Forms ランタイム・プロ
セス)。ただし、存在するコンポーネントの数、およびコンポーネントを実行す
るマシンが異なります。
また、ブロック図で示されているとおり、ユーザーが中間層と同じイントラネッ
ト・ネットワークを使用している場合、またはファイアウォールやプロキシを介
して、インターネットで Forms にアクセスする場合があります。クライアントが
中間層にアクセスする方法は、Forms にとって重要ではありません。
Web 上で Form を実行した場合の動作概要を次に示します(Oracle 9i Forms
Architecture のブロック図を参照してください)。
1.
ユーザーがブラウザを起動して、Forms Application のアドバタイズ済 URL
にナビゲートします。通常の URL と同様に、リンクのクリック、お気に
入りリストからの選択、タイプ入力などの方法で URL を指定します。
Oracle9i Forms 診断テクニック
18
Oracle Corporation 発行「Oracle9i Forms Diagnostic Techniques」の翻訳版です。
2.
アプリケーション・サーバー(中間層)が、Java アプレットを含む HTML
ページを表示します。これが Forms クライアントです。1 つのアプレット
が、大きさとは無関係に、すべての Form を実行します。さらに、アプレッ
トはクライアントにキャッシュされるため、ダウンロードは 1 度のみ必
要です。
3.
Forms クライアントは、アプリケーション・サーバーを介してサーバーに
接続します。Forms のすべての通信は、他の Web アプリケーションと同
様、アプリケーション・サーバーを経由します。つまり、Forms は、イン
ターネット上でプロキシとファイアウォールを通過します。
4.
サーバーは、ユーザーがアプリケーションを起動していることを確認し、
サーブレット・セッションの作成、Forms ランタイム・プロセスの起動と
いう 2 つの処理を行います。
5.
Forms ランタイム・プロセスは、実際にアプリケーションを実行するエン
ジンです。各ユーザーが専用の Forms ランタイム・プロセスを持ちます。
セッションが終わると、Forms ランタイム・プロセスは終了します。
Forms Listener Servlet は、クライアントからの各リクエストが正しいラン
タイム・プロセスにルーティングされ、ランタイム・プロセスからのレ
スポンスが正しいクライアントに送信されることを確認します。
6.
サーバー上の Forms ランタイム・プロセスが、すべての Forms ロジック
を実行します。このように、Forms ランタイム・プロセスは適切な FMX
ファイルを開き、データベースに接続し、フォームの起動に必要なすべ
ての処理を行います。カーソルを最初のフィールドに置いて、クライア
ントに通知します。画面のレイアウトとカーソルの位置の情報がクライ
アントに送信されます。
7.
UI 情報のみがクライアントに送信されます。Web 上で Forms がどのよう
に動作するかを理解するうえで最も重要な鍵は、クライアント側ではロ
ジックが実行されないことです。最初のフィールドにカーソルが配置さ
れた画面がクライアントに表示され、ユーザーはフォームとの通信を開
始できます。
8.
ユーザーが値を入力して、次のフィールドにナビゲートするとします。
クライアントは、その値とユーザーによる処理が書き込まれたメッセー
ジをサーバーに送信します。サーバーは、これを処理し、クライアント
にレスポンスを送信して、次に表示する内容を通知します。
たとえば、最初のフィールドに失敗した WHEN-VALIDATE-ITEM トリ
ガーがある場合に、カーソルはこのフィールドにリダイレクトされます。
Forms ランタイム・プロセスは、この情報を伝えるメッセージをクライア
ントに送信します。クライアントは、Forms ロジックを実行しません。ク
ライアントは、ユーザーが操作したときに(フィールド内をクリックす
るなど)、画面上の関連する領域を更新して、Forms ランタイムに通知す
るだけです。これでユーザーは続行できます。
Oracle9i Forms 診断テクニック
19
Oracle Corporation 発行「Oracle9i Forms Diagnostic Techniques」の翻訳版です。
フィールド間のナビゲート、リストの項目の選択など、主要な操作がクライアン
トで行われると、ラウンドトリップでサーバーに送られ、Forms ランタイム・プ
ロセスに処理されます。
Forms Servlet と Forms Listener Servlet
名前が似ているため、Forms が提供する 2 つのサーブレットは混同されます。
Forms Servlet は、ユーザーが Forms アプリケーションを起動した際に、最初の接
続のみに使用されます。Forms Servlet は、クライアントに HTML ファイルを返し
ます。このファイルに含まれているアプレットが Forms Client です。
Java アプレットが起動してセッションが作成されると、すべての通信は Forms
Listener Servlet を経由します。
インストールの検証方法、Forms の構成と配置方法、および Forms セッションの
構造を説明しました。次に、セクション FRM-92XXX Errors で発生する可能性のあ
るエラーをいくつか説明します。
Oracle9i Forms 診断テクニック
20
Oracle Corporation 発行「Oracle9i Forms Diagnostic Techniques」の翻訳版です。
診断ツール
アプレットや、JInitiator’s Java Console などの簡単な診断ツールは、問題の解決に
有効な情報の取得に有用です。
アプレットからの情報
FRM エラーに関する簡潔なメッセージは、問題の基本的な原因の究明に有用です。
一般に、FRM エラーの原因の特定に必要な情報は、すべて Forms アプレットが通
知するエラーに含まれています。エラーが発生すると、エラー・ダイアログに
「Details」ボタンが表示されます。
このボタンを押すと、Java が表示されます。
「Details」ボタンを押すと、現行の Java スタックが表示されます。表示されるスタッ
クは、根本原因と Forms のリリースによって異なります。これは、リリースが異
なると、アプレット・クラス・ファイルに使用されるパッケージ構造も異なるた
めです。
次に、「Details」ボタンを押すと表示される可能性があるエラー・スタックの一
般的な例を示します。
Oracle9i Forms 診断テクニック
21
Oracle Corporation 発行「Oracle9i Forms Diagnostic Techniques」の翻訳版です。
Jinitiator の Java コンソールからの情報
JInitiator の使用中にエラーが発生すると、ブラウザのステータス行にエラーが書
き込まれます。ただし、完全な Java エラー・スタックは表示されません。JInitiator
の Java コンソールで検索が必要です。
Oracle9i Forms 診断テクニック
22
Oracle Corporation 発行「Oracle9i Forms Diagnostic Techniques」の翻訳版です。
Windows マシンで「JInitiator Control Panel Applet」オプションを選択して、Java
Console をオンにしている場合、ブラウザで Form を実行すると「JInitiator Console」
ウィンドウがポップアップします。JInitiator Control Panel Applet を見つけるには、
Windows マシンで、「Start」→「Settings」→「Control Panel」の順に選択します。
このオプション
を選択
これを有効にするには、場合によっては
ブラウザを再起動する必要があります。
JInitiator’s Java コンソールが表示されない場合は、タスクバー・トレーのアイコン
をダブルクリックすることによって、いつでも手作業で起動できます。
ここをダブルクリックして、
Jinitiator の Java コンソールを起動
Forms Trace は、Forms の以前のリリースで提供された Forms Runtime Diagnostics
Forms Trace の使用
(FRD)および Performance Event Collection Services(PECS)に替わるツールです。
Forms Trace により、たとえば、フォームを使用している間のユーザーの各手順な
どの実行パスをフォームを介してトレースできます。
Forms Trace により、forms の機能が定義された部分またはユーザー・アクション
のクラスに関する情報を記録できます。これは、トレース情報を収集するイベン
トを定義して実行します。イベントは、ユーザーの直接または間接的アクション
Oracle9i Forms 診断テクニック
23
Oracle Corporation 発行「Oracle9i Forms Diagnostic Techniques」の翻訳版です。
の結果として Oracle9i Forms 内で発生します。たとえば、トリガーの実行、マウ
スのクリックまたは両方に関する情報を記録します。
トレースを開始する場合、ftrace.cfg ファイルまたは URL でトレースするイベント
を定義します。ftrace.cfg ファイルは、デフォルトで<OracleHome>/forms90/server
ディレクトリにインストールされます。環境変数 FORMS90_TRACE_PATH は、
ftrace.cfg ファイルの位置およびトレース出力ファイルの位置を指定します。環境
変数 FORMS90_TRACE_PATH は、default.env ファイルで設定されます。
次のコマンドライン・パラメータは(formsweb.cfg で設定される)、Forms Trace
の構成に使用されます。
•
Record = forms
Forms trace を有効にします。
•
Tracegroup =<keyword>
<keyword>は、ftrace.cfg でイベントのために指定されます。
Tracegroup は、
記録しログを作成するイベントを示します。
Tracegroup が指定されない場合、エラー・メッセージのみが収集されます。
Forms Trace をコマンドラインでオンにしない場合、Tracegroup は無視さ
れます。
トレース出力は、ログ・ファイルに格納され、環境変数 FORMS90_TRACE_PATH
により指定されたディレクトリに保存されます。(この変数を設定しない場合、
その出力は現在の作業ディレクトリに書き込まれます。)ファイルは、
forms_<pid>.trc という名前がつけられます。この<pid>はサーバーのプロセス ID
です。
URL または Forms 構成ファイルの formsweb.cfg ファイルで、トレース・エントリ
を指定してトレースを開始します。
トレース・データは、*.trc の拡張子が付いたバイナリ・ファイルに保存されます。
トレース・データの表示には、次のいずれかを行う必要があります。
•
Upload/Translate ユーティリティを使用して*.trc ファイルのデータを XML
フォーマットに変換し、XML ビューアを使用してデータを表示します。
•
Upload/Translate ユーティリティを使用して*.trc ファイルのデータをデー
タベース表にアップロードします。
トレースのために定義できるイベントのリスト、およびトレースに関する他の詳
細は、OTN でドキュメント『Oracle 9iAS Forms Services – Trace and Diagnostics』を
参照してください。
Oracle9i Forms 診断テクニック
24
Oracle Corporation 発行「Oracle9i Forms Diagnostic Techniques」の翻訳版です。
サーブレット・ログの使用
サイト管理者は、サーブレット・ロギング・ツールを使用すると、すべての Oracle9i
Forms セッションを記録し、Oracle9i Forms に関連するネットワークの通信量を監
視して、サイトの構成をデバッグできます。
Forms Servlet と Forms Listener Servlet
の相違点については、「Forms Servlet と
Forms Listener Servlet」の項を参照して
ください。
サーブレット・ロギングは、Forms Servlet、Forms Listener Servlet のいずれでも実
行できます。Forms Servlet で使用された場合、サーブレット・ロギング機能は、
実行時セッションに接続されている間、情報を収集します。Forms Listener Servlet
とともにサーブレット・ロギングを使用すると、セッション実行中に情報が提供
されます。
Forms Listener Servlet のロギングを指定するために、フォームを起動する URL の
serverURL パラメータに次の文字列の 1 つが追加されます。または、formsweb.cfg
ファイルの serverURL クライアント・パラメータに文字列を追加します。Forms
Servlet のロギングを指定するために、フォームを起動する URL に文字列の 1 つが
追加されます。
•
(none):
ログ・メッセージは作成されません。Forms Servlet の初期化中、使用中の
構成ファイルの名前とパスを記載したメッセージがログ・ファイルに書
き込まれます。
•
/session:
Forms セッションの開始時または終了時、常にログ・メッセージが書き込
まれます。このメッセージは、ホスト名およびクライアント(ユーザー
の Web ブラウザが実行中のマシン)の IP アドレス、ランタイム・プロセ
ス ID および一意の内部セッション ID 番号を示します。
•
/sessionperf:
パフォーマンス・サマリー統計は、セッション終了メッセージに含まれ
ます。
•
/perf:
パフォーマンス・メッセージは、クライアントからのすべてのリクエス
トに対し書き込まれます。
•
/debug:
フル・デバッグ・メッセージ前述のメッセージの他に、他のデバッグ・
メッセージが書き込まれます。このロギング・レベルは、非常に冗長で
あり、主にデバッグとサポートを目的としています。
サーブレット・ログは、application.log ファイルにあります。このファイルは、Forms
が配置されている OC4J インスタンスの application-deployments/forms90app ディレ
クトリにあります。
Oracle9iAS のフル・パスは、次のとおりです。
<ORACLE_HOME>/j2ee/ProductGroup2/applicationdeployments/forms90app/1_default
_island/application.log
Oracle9iDS のフル・パスは、次のとおりです。
<ORACLE_HOME>/j2ee/iDS/applicationdeployments/forms90app/application.log
Oracle9i Forms 診断テクニック
25
Oracle Corporation 発行「Oracle9i Forms Diagnostic Techniques」の翻訳版です。
サーブレット・ロギングの詳細は、OTN でドキュメント『Oracle 9iAS Forms Services
– Trace and Diagnostics』を参照してください。
FRM-92XXX ERRORS
Forms アプリケーションの実行中に、様々な FRM エラーが発生することがありま
す。エラーは様々な条件によって引き起こされます。エラーを受け取った場合、
解決には詳しい情報の取得が必要です。この項では、発生の可能性がある一般的
なエラーと解決方法について説明します。
一般的に、FRM エラーは次の原因で発生します。
•
構成の問題
FRM エラーには構成が原因で発生するものがあります。たとえば、Forms
Service が起動していない場合、または HTML ファイルで指定されたポー
ト以外をリスニングしている場合などです。通常、このようなエラーは
繰り返し発生します。
•
Forms サーバー・プロセスのクラッシュ
接続が確立され、フォームの起動後に発生するほとんどの FRM エラーは、
サーバーのクラッシュが原因です。サーバー・プロセスが停止すると、
クライアントは処理を続行できません。アプレットは独立した機能では
ないため、サーバー・プロセスと通信できない状態では引き続いて動作
できません。
このようなエラーでは診断が困難です。問題が繰り返し発生しない場合
もあります。また、ユーザーがクラッシュの原因となったイベント・シー
ケンスを認識していないこともあります。
•
ネットワークの問題
アプレットと Forms Server プロセス間の通信にネットワークの問題が発
生し、通信が切断されています。
次の表に、前述の理由によって発生する FRM -92xxx エラーを示します。また、エ
ラーの意味を簡単に説明します。
FRM-92000
これは、ユーザーがクラス・ファイルのロードを試みて、Java 言語が
IllegalAccessException をスローした場合に発生する内部エラーです。通常、
システムに不適切な構成があることを示します。通常、詳細なメッセージ
を読むことで原因を分析できます。
FRM-92010
これは、クライアントの不適切な構成が原因のエラーで、アプレットのパ
ラメータ serverArgs が存在しない場合、または null 値を持つ場合に発生し
ます。
FRM -92020
リクエストされた URL またはブラウザ・ターゲットがブラウザによって
拒否されたことを示します。
FRM-92030
Java クラス・ファイルの欠落、またはレジストリの不適切な構成が原因の
クライアントの構成ミスのエラー。このエラーは、サーバーが数値
handlerClassId で Java クラスをリクエストしたときに発生します。この数
値がレジストリにないため、クライアントにより処理されません。
Oracle9i Forms 診断テクニック
26
Oracle Corporation 発行「Oracle9i Forms Diagnostic Techniques」の翻訳版です。
FRM-92040
Java クラス・ファイル欠落によるサーバーの構成ミスのエラー。
このエラー
は、クライアントがリクエストした Java クラスが、サーバー上で見つから
ないときに発生します。
FRM-92050
指定されたソケット(ポート)で、クライアントがサーバー・マシン(ホ
スト)への接続を確立できません。
FRM-92060
ホストとポートの組合せが無効なため、クライアントはサーバーへの接続
を確立できません。
FRM-92070
なんらかの理由で、クライアントが新しいオブジェクトを作成できませ
ん。詳細を調べることで、エラーの発生原因がわかる場合があります。
(フォームの動作は停止しません。このエラーはログ・ファイルにのみ記
録されます。)
FRM-92080
外部のブラウザ・モジュールを起動しようとして、オペレーティング・シ
ステム・コマンドを実行した結果、問題が発生しました。
FRM-92090
予期しないエラーが発生しました。
FRM-93000
一般的な内部の例外メッセージ。予期しないコード・エラーが発生したと
きに使用されます。
FRM-92095
使用中の JInitiator のバージョンが低いために、リクエストされた機能をサ
ポートできません(例: Listener Servlet に対して実行する)。指定された
バージョン(またはそれ以上)のインストールが必要です。
FRM-92100
予期しないネットワーク・エラーまたはサーバーの障害が発生しました。
FRM-92101
サーバー側の誤った構成による、予期しないサーバーの障害が発生しまし
た。
FRM-92102
Forms が指定する回数まで繰り返して再接続を試行した後、予期しない
ネットワーク・エラーが発生しました。
FRM-92120
サーバー構成エラーで、クライアントが重要なファイル(レジストリ)を
検索できないことを示します。
FRM-92150
クライアントのバージョンがサーバーのバージョンより新しいバージョ
ンです。
FRM-92160
クライアントのバージョンがサーバーのバージョンよりも古いバージョ
ンです。
FRM-92145
SSO 認証の記述に使用されるテキストに障害が発生しました。
前述のほとんどの FRM エラーは、簡単なメッセージが付いて表示されるため追加
の説明が必要ありません。ただし、異なる理由で発生する診断の難しいエラーも
あります。そのような FRM エラーの一般的な原因および解決策を次に説明します。
FRM-92010
原因:
このエラーは、JInitiator がブラウザのプロキシ設定を使用するときに発生します。
解決策:
「Goto Control Panel」 → 「JInitiator 1.3.x.x」 → 「Proxies」 →
ブラウザ使用の設定を選択解除し、プロキシ設定の詳細を入力します。
Oracle9i Forms 診断テクニック
27
Oracle Corporation 発行「Oracle9i Forms Diagnostic Techniques」の翻訳版です。
FRM-92050
サーバーの重負荷
原因:
多数のリクエストを同時に受けた場合、サーバーは処理できません。これは、主
にサーバー・マシンのパフォーマンスと構成によって異なります。
解決策:
•
このような状況では、Forms 10g の Forms 実行時プレスタート機能が便利
です。この機能は、到着するクライアントのリクエストに応える、構成
可能な数の実行時エンジンを事前に準備し、重負荷が原因の停止を防ぎ
ます。
•
サーバー・マシンのハードウェアをアップグレードして、多数のリクエ
ストを同時に処理できるようにします。
serverURL パラメータの欠落
原因:
構成ファイル(formsweb.cfg)で、serverURL パラメータが欠落しているか、不適
切です。
解決策:
フォームの構成ファイルを編集して、有効な serverURL パラメータの値を入力し
ます。
Oracle9i Forms 診断テクニック
28
Oracle Corporation 発行「Oracle9i Forms Diagnostic Techniques」の翻訳版です。
不適切な FORMS90_TIMEOUT
原因:
FORMS90_TIMEOUT パラメータの値が誤って入力されています。
解決策:
envfile(default.env)および FORMS90_TIMEOUT パラメータ値のレジストリを検
証します。値には正しい整数を使用します。値は引用符で囲まないでください。
例を示します。
FORMS90_TIMEOUT=”10”
→ このエントリは不適切です。
FORMS90_TIMEOUT=10
→ これが正しいエントリです。
RUN_PRODUCT の不適切な使用
原因:
Oracle 9i Forms では、Oracle Graphics 6i と統合する目的で、RUN_PRODUCT を 1
度のみ使用します。
解決策:
Forms を Oracle 9i Reports との統合に使用する RUN_PRODUCT の組込みのコール
を新しい RUN_REPORT_OBJECT に替えます。
Oracle9i Forms 診断テクニック
29
Oracle Corporation 発行「Oracle9i Forms Diagnostic Techniques」の翻訳版です。
ServerArgs パラメータの欠落
原因:
アプレットをロードする HTML からの serverArgs パラメータが欠落しています。
解決策:
フォームのアプレットをロードするために使用する HTML ファイルに serverArgs
パラメータがあることを確認します。
serverArgs の値が null でないことを確認します。serverArgs ではフォーム名が必要
です。これらのパラメータは、フォームの構成ファイル(formsweb.cfg)で定義で
きます。かわりに、フォームの実行に使用する URL で直接渡すこともできます。
Oracle9i Forms 診断テクニック
30
Oracle Corporation 発行「Oracle9i Forms Diagnostic Techniques」の翻訳版です。
jvm.dll の欠落
原因:
Forms Web の実行可能ファイル ifweb90.exe が jvm.dll を検出できません。
解決策:
PATH 環境変数で指定されるディレクトリに jvm.dll があることを確認します。
jvm.dll の位置を指すように、PATH 環境変数を envFile(通常、
ORACLE_HOME/forms60/server/default.env)で設定します。
FRM-92100
原因:
ユーザーがアプリケーションにアクセスしていて、Web サーバーが停止すると、
このエラーが発生します。
解決策:
Web サーバーが起動および稼働しているかどうか確認します。
http://servermachine:portno を試します。
oc4j ホームページが表示されない場合は、Web サーバーがダウンしています。
アプリケーション管理者に連絡して、Web サーバーの起動を依頼します。
Oracle9i Forms 診断テクニック
31
Oracle Corporation 発行「Oracle9i Forms Diagnostic Techniques」の翻訳版です。
FRM-92101
不適切な作業ディレクトリ
原因:
このエラーは、指定された作業ディレクトリが存在しない場合に発生します。
解決策:
これは、application.log ファイルで、「Unable to switch to Working
Directory:<workingDirectory>」のようなログ・メッセージの検索により、確認でき
ます。
(application.log ファイルは、Forms が配置されている OC4J インスタンスの
application-deployments/forms90app ディレクトリにあります。)
Forms の構成ファイルを編集して作業ディレクトリを訂正します。
FORMS90_TIMEOUT とハートビート
原因:
このエラーは、Forms アプレットのパラメータ‘heartbeat’の値が
FORMS90_TIMOUT の値よりも高く設定されている場合に発生します。
解決策:
一般に、非アクティブの状態が一定期間続いた後で、アプリケーションのタイム
アウトが必要な場合のみ、heartbeat は FORMS90_TIMEOUT よりも高い値に設定
されます。この場合、FRM-92120 が表示されます。
特定のアプリケーションにタイムアウトが必要ない場合は、heartbeat の値が
FORMS90_TIMEOUT の値よりも低いことを確認します。
Oracle9i Forms 診断テクニック
32
Oracle Corporation 発行「Oracle9i Forms Diagnostic Techniques」の翻訳版です。
FRM-92102
原因:
このエラーは、Web サーバーとクライアント間のネットワークの問題が原因で発
生します。クライアントは、指定されたポートでサーバーと通信できません。
解決策:
Forms の構成ファイルにパラメータ networkRetries を追加します。ネットワークの
特性と必要に応じて、値を適切な数値に設定します。
例:networkRetries=30
このパラメータは、最終的なタイムアウトの前に、Forms クライアントが中間層
に再接続を試みる回数を指定します。
ブロックされたポート
原因:
networkRetries に適切な値を設定した後でエラーが発生する場合は、サーバーの
ポートが TCP/IP レベルでブロックされていることが原因の可能性があります。
解決策:
ソケットの接続には、各終端にポートが必要です。ポートが閉じていると、通信
が停止します。ファイアウォールとプロキシを使用して、ポートを保護します。
Web サーバー上のポートのブロックを除去してエラーを解決できます。
Oracle9i Forms 診断テクニック
33
Oracle Corporation 発行「Oracle9i Forms Diagnostic Techniques」の翻訳版です。
FRM-92120
原因:
これはサーバーの構成エラーで、クライアントが中間層でファイル Registry.dat を
検索できない場合に発生します。
解決策:
このエラーが発生した場合は、ディレクトリ
<OracleHome>/forms90/java/oracle/forms/registry の中間層にファイル Registry.dat が
存在するかどうか確認します。ファイルが存在しない場合は、中間層に置く必要
があります。
アプリケーションの実行中に、突然このエラーが起きた場合は、HTTP サーバー
が停止している可能性があります。ブラウザに http://myserver.com:NNNN という
URL を入力することで検証できます。その場合、myserver.com をホスト名で、
NNNN をサーバーのポート番号で置き換える必要があります。サーバーに接続で
きないことがブラウザに表示された場合は、HTTP サーバーが停止しているため、
システム管理者に連絡して起動させます。
HTTP サーバーが起動しているときに、http://myserver.com:NNNN という URL を
入力すると、次の「Oracle 9iAS welcome」ページがブラウザに表示されます。
Oracle9i Forms 診断テクニック
34
Oracle Corporation 発行「Oracle9i Forms Diagnostic Techniques」の翻訳版です。
FRM-92150/FRM-92160
原因:
不適切なパスまたはコードベース設定
解決策:
システム・パスの始めに、正しい ORACLE_HOME/bin を設定します。
クライアント・マシンのユーザー・プロ
ファイル・ディレクトリにある Oracle jar
キャッシュをクリアすると、Forms jar
ファイルが新規にダウンロードされるこ
とが確認されます。
Oracle9i Forms 診断テクニック
HTML ファイルまたは forms 構成ファイルの CODEBASE エントリは、JAR ファ
イルの古いバージョンを指すことがあります。構成ファイルのコードベース・エ
ントリを変更するか、コードベース・パス内の jar ファイルを適切な jar ファイル
で置き換えます。
35
Oracle Corporation 発行「Oracle9i Forms Diagnostic Techniques」の翻訳版です。
他の問題
サーバーのクラッシュ
突然、Forms web ランタイムが停止した場合、ディレクトリ<OracleHome>\forms90
\trace にスタック・トレースが書き込まれます。ファイル名のフォーマットは、
<forms_runtime_process>_dump_<process id>です。
ダンプ・ファイルには実行中のプロセスのスタック・トレースが含まれ、Forms
が実行した最後の正常な操作を示します。
ダンプ・ファイルの例(Solaris)
Solaris でのダンプ・ファイルの例を示します。
[Sat Sep 20 15:13:11 2003 PDT]::Client Status [ConnId=0, PID=2220]
>> ERROR: Abnormal termination of connection, Error Code: 11
FORM/BLOCK/FIELD: X:BLOCK3.STATUS
Last Trigger: WHEN-BUTTON-PRESSED - (In Progress)
Msg: <NULL>
Last Builtin: REPORT_OBJECT_STATUS - (In Progress)
------------- Call Stack Trace [ConnId = 0, ProcId = 2220] ------------calling
call
entry
location
type
point
argument values in hex
(? means dubious value)
-------------------- -------
-------------------
---------------------------
siehjmpterm()+412
CALL
siehdst()+0
BA1958 ? A8CDB8 ? A8CC4C ?
sigacthandler()+40
PTR_CALL
zrcctcx_CheckAuthRe
CALL
zrcctcc_ClientCommo
B ? 0 ? EFFF4758 ? 0 ? 50 ?
zrcctco_Connect
CALL
zrcctcx_CheckAuthRe
DAE5B8 ? 0 ? 0 ? 0 ?
ibfnjurJobUpdate
CALL
zrcctco_Connect()+0
DAE5B8 ? EFFF4B40 ?
A8CDA4 ? A8CD88 ? EFFF3BA4 ?
B ? B6A95C ? B6AB44 ?
AE7DEC ? 0 ? E ?
DB2112 ?
FFFFFFC0 ? FFFFFFF0 ?
EFFF4B38 ? 0 ? 76 ?
EFFF4B40 ?
ibfrun()+5940
CALL
ibfnjurJobUpdate
BE8198 ? BE7BB0 ? BDF328 ?
EFFF56A4 ? AE7DEC ?
EFFF4B40 ?
pfrrun()+23596
PTR_CALL
peicnt()+248
CALL
CC4E40 ? AE7DEC ? 0 ? 0 ?
BE8198 ? CBC6A8 ?
pfrrun()+0
CC5720 ? CC4E40 ? 0 ? 1 ?
25 ? BF1858 ?
CALL
BF1858 ? CC4E40 ? CC4E40 ?
ipkxcr()+32
CALL
191F7000 ? D396F8 ? 0 ? 0 ?
ipfrun()+916
CALL
ipkxcr()+0
BE8198 ? CBC6A8 ? BE8198 ?
ifzmgt()+3260
CALL
ipfrun()+0
BE8198 ? 0 ? D396F8 ?
ifzmky()+64
CALL
ifzmgt()+0
BE7BB0 ? EE7432A0 ? AE7DEC ?
BF1858 ? EFFF7B64 ? CBD0C0 ?
0 ? FFBF ?
0 ? 0 ? BEEE20 ?
D291C8 ? EE7427EC ? 0 ?
BED6D8 ? EE7427EC ? 2000000 ?
Oracle9i Forms 診断テクニック
36
Oracle Corporation 発行「Oracle9i Forms Diagnostic Techniques」の翻訳版です。
ifzevl()+80
CALL
ifzmky()+0
BE7BB0 ? BE7BB0 ? A8395C ?
AE7DEC ? 7FFFFFFF ?
EE7427EC ?
ifzefi()+176
CALL
ifzevl()+0
BE7BB0 ? BE7BB0 ? AE7DEC ?
80000000 ? B3B460 ? BDC8C8 ?
ifzevf()+900
CALL
ifzefi()+0
BE7BB0 ? BE7BB0 ? AE7DEC ?
ifzerc()+2244
CALL
ifzevf()+0
4000 ? FFFFBFFF ? BE7BB0 ?
ifzebk()+1976
CALL
ifzerc()+0
0 ? AE7DEC ? BE7BB0 ?
ifzefm()+316
CALL
ifzebk()+0
0 ? AE7DEC ? BE7BB0 ? 4000 ?
Ifzeif()+844
CALL
ifzefm()+0
BE7BB0 ? BE9F08 ? BE7BB0 ?
Ifzexf()+1188
CALL
ifzeif()+0
BE7BB0 ? 0 ? 0 ? 1 ? BED6D8 ?
Ifzexe()+164
CALL
ifzexf()+0
BE7BB0 ? 1 ? 0 ? BE8198 ?
Ifzman()+5276
CALL
ifzexe()+0
0 ? BEAD68 ? 2 ? BEAB48 ?
if4mmo()+40
CALL
ifzman()+0
10000000 ? 0 ? 1 ? 0 ?
1 ? D29250 ? EE743184 ?
4000 ? EE743184 ? EE742B28 ?
BDC8C8 ? BED6D8 ? EE7427EC ?
FFFEFFFF ? 10000 ?
AE7DEC ? 0 ? BDC8C8 ?
2000000 ?
BDC8C8 ? 0 ?
BE7BB0 ? AE7DEC ?
BB2C30 ? 0 ?
PTR_CALL
0 ? 0 ? 0 ? 3 ? BB2250 ?
PTR_CALL
BB12CC ? EFFFA42C ? 0 ? 2 ?
main()+168
CALL
0 ? EFFF9918 ? 3 ? EFFF99CC ?
_start()+220
CALL
CC57C ?
EFFF99D0 ? 0 ?
EFFF986C ? EFFF992C ?
main()+0
3 ? EFFF99CC ? EFFF99CC ?
B12400 ? 0 ? 0 ?
------------- End of Call Stack Trace -------------
このスタック・トレースで、最初の 2 つの関数 siehjmpterm()と sigacthandler()は、
信号処理コードです。通常、これらの関数はスタック・トレースに存在します。
エラーが発生したときに、プログラムが使用していた関数の確認には、スタック
の下部を読むことが必要です。
ダンプ・ファイルの例(Windows)
Unix と Windows NT では、スタック・トレースの動作が異なります。Unix の場合、
記号情報は実行ファイルと共有ライブラリに含まれます。Windows の場合、この
情報はリンク時間に取り除かれます。形式は、binary .sym ファイルです。すべて
の Forms 実行可能ファイルまたは DLL に 1 つの.sym ファイルが必要です。
Windows プラットフォームでは、クラッシュが発生した場合、メモリーにロード
された実行可能ファイルに対応するすべての.sym ファイルを Forms ランタイム・
プロセスが読む込みます。次に.sym ファイルの情報を使用して記号名を検索しま
す。Windows の場合、スタック・トレースは次のようになります。
Oracle9i Forms 診断テクニック
37
Oracle Corporation 発行「Oracle9i Forms Diagnostic Techniques」の翻訳版です。
[09/21/03
12:11:16
India
Standard
Time]::Client
Status
[ConnId=0,
PID=289]
>> ERROR: Abnormal termination, Error Code C0000005
ACCESS_VIOLATION
======================= STACK DUMP =======================
Fault address:
65CE63BE 01:000553BE
Module: E:\ORA9iAS_904\bin\ifwcm90.dll
System Information:
Operating System: Windows NT Version 4.0 Build 1381 Service Pack 6
Command line: ifweb90 server webfile=HTTP-0,0,0,default
Crash caused because FORMS90_DELIBERATECRASH was set to 2
FORM/BLOCK/FIELD: TEST:TEST.OK
Last Trigger: WHEN-NEW-FORM-INSTANCE - (Successfully Completed)
Msg: <NULL>
Last Builtin: GET_APPLICATION_PROPERTY - (Successfully Completed)
Registers:
EAX:00000002
EBX:032BF3FC
ECX:00000005
EDX:034820FC
ESI:65D3E840
EDI:00000000
CS:EIP:001B:65CE63BE
SS:ESP:0023:0012E6E4 EBP:03262070
DS:0023
ES:0023
FS:0038
GS:0000
Flags:00010246
------------------- Call Stack Trace --------------------Frameptr
RetAddr
Param#1
Param#2
Param#3
Param#4
Function Name
0x03262070 01df1fc8 00000000 03262964 03262664 004141e0 0x65ce63be
------------------- End of Stack Trace -------------------
環境の検証
Windows(または UNIX)でスタック・トレースをテストするには、環境変数
FORMS90_DELIBERATECRASH を設定します。名前のとおり、この環境変数を設
定すると、Forms ランタイム・プロセスがクラッシュします。Oracle Forms では現
在、1 と 2 の 2 通りの設定が認識されています。実行時に
FORMS90_DELIBERATECRASH が 1 に設定されていると、forms は、組込みの
BELL が実行されるたびにクラッシュします。2 に設定されていると、forms は、
when-button-pressed トリガーが実行されるたびにクラッシュします。前述のスタッ
クは、FORMS90_DELIBERATECRASH を 2 に設定して生成されました。この環境
変数は、envfile(たとえば、default.env)ファイルで設定できます。
Oracle9i Forms 診断テクニック
38
Oracle Corporation 発行「Oracle9i Forms Diagnostic Techniques」の翻訳版です。
環境変数 FORMS90_DELIBERATECRASH を 2 に設定して、生成されたスタック・
トレースをこのドキュメントのスタック・トレースと照合することにより、記号
ファイルが正しくインストールされているかどうか確認できます。すべて正常に
動作していることを確認した後にサーバー・クラッシュの問題が発生した場合、
問題の解決にスタック・トレースが有効です。
ダンプ・ファイルの使用
スタック・トレースは、2 つの異なるレベルで有効です。
•
既知の問題を識別するためにスタックの情報が使用できます。100%の信
頼性はありませんが、スタック・トレースが同一であれば、同一の問題
であると考えられます。スタック・トレースが同一でない場合でも、テ
スト可能な既存のバグに対する回避策またはパッチもあります。
•
問題が未知のバグの場合、原因を突き止める作業に有用な情報が、スタッ
クによって提供されることもあります。
クライアントのクラッシュ
突然 Forms アプレットが消失し、致命的エラーを示すダイアログが表示された場
合は、Forms アプレットがクラッシュしたことが原因です。Windows の場合は、
クラッシュの結果、「illegal operation」ダイアログが表示されます。Dr. Watson が
エラーを報告することもあります。
クラッシュの検証には、クライアントのスタック・トレース・ファイルを調べま
す。クライアントがクラッシュした場合、実行可能ファイルと同じディレクトリ
に、拡張子.rpt が付くファイルが作成されます。ファイル名のルートは、実行可能
ファイルの名前です。
例を示します。
ディレクトリ c:\jdk\1_3_1\bin で始まる Appletviewer を使用すると、クライア
ントのスタック・ファイルは c:\jdk\1_3_1\bin\appletviewer.rpt です。
JInitiator を使用すると、実行可能ファイルはブラウザと見なされます。
ブラウザが Netscape の場合、クライアントのスタック・トレース・ファイルは
netscape.rpt ですが、Internet Explorer の場合は、iexplore.rpt です。
アプレットがクラッシュしたように見えても、対応する.rpt ファイルが見つからな
いことがあります。この場合、Forms Server プロセスが突然クライアントを切断し
た可能性があります。アプレットは動作を続けますが、すべての Forms ウィンド
ウが閉じて、クライアントがクラッシュしたように見えます。
Oracle9i Forms 診断テクニック
39
Oracle Corporation 発行「Oracle9i Forms Diagnostic Techniques」の翻訳版です。
ダンプ・ファイルの例
次に、クライアントのスタック・トレース・ファイル(iexplore.rpt)の例を示しま
す。
======================================================================
=========
Exception code: C0000005 ACCESS_VIOLATION
Fault address: 0F521F00 01:00000F00
Module: D:\Oracle\JInitiator 1.3.1.8\bin\jpishare.dll
System Information:
Operating System: Windows NT Version 4.0 Build 1381 Service Pack 6
Date and Time: 1/7/2003, 18:44
Command line: "C:\PROGRA~1\INTERN~1\iexplore.exe"
Registers:
EAX:00000008
EBX:0F520000
ECX:007C81F0
EDX:0EFB1D7C
ESI:00000000
EDI:0EFB1D7C
CS:EIP:001B:0F521F00
SS:ESP:0023:0006ED50
DS:0023
ES:0023
EBP:0006ED8C
FS:003B
GS:0000
Flags:00010202
Call stack:
Address
0F521F00
Frame
0006ED8C
0001:00000F00
D:\Oracle\Jinitiator
1.3.1.8\bin\jpishare.dll
77F69E0A
0006EDD8
LdrShutdownProcess
77F19FDB
0006EE98
ExitProcess
715160A3
0006FF00
Ordinal101
0040168A
0006FF60
0001:0000068A
C:\PROGRA~1\INTERN~1\iexplore.exe
00401726
0006FFC0
0001:00000726
C:\PROGRA~1\INTERN~1\iexplore.exe
77F1B9EA
0006FFF0
GetProcessPriorityBoost
======================================================================
=========
Oracle9i Forms 診断テクニック
40
Oracle Corporation 発行「Oracle9i Forms Diagnostic Techniques」の翻訳版です。
Exception code: C0000005 ACCESS_VIOLATION
Fault address: 0F951F00 01:00000F00
Module: D:\Oracle\JInitiator 1.3.1.9\bin\jpishare.dll
System Information:
Operating System: Windows NT Version 4.0 Build 1381 Service Pack 6
Date and Time: 1/7/2003, 18:50
Command line: "C:\Program Files\Internet Explorer\IEXPLORE.EXE"
Registers:
EAX:00000002
EBX:0F950000
ECX:007C6910
EDX:027CBD7C
ESI:00000000
EDI:027CBD7C
CS:EIP:001B:0F951F00
SS:ESP:0023:0006ED50
DS:0023
ES:0023
EBP:0006ED8C
FS:003B
GS:0000
Flags:00010202
Call stack:
Address
0F951F00
Frame
0006ED8C
0001:00000F00
D:\Oracle\Jinitiator
1.3.1.9\bin\jpishare.dll
77F69E0A
0006EDD8
LdrShutdownProcess
77F19FDB
0006EE98
ExitProcess
715160A3
0006FF00
Ordinal101
0040168A
0006FF60
0001:0000068A
C:\PROGRA~1\INTERN~1\IEXPLORE.EXE
00401726
0006FFC0
0001:00000726
C:\PROGRA~1\INTERN~1\IEXPLORE.EXE
77F1B9EA
0006FFF0
GetProcessPriorityBoost
======================================================================
=========
Exception code: C0000005 ACCESS_VIOLATION
Fault address: 1A4142DE 01:000132DE
Module: C:\WINNT\System32\URLMON.DLL
System Information:
Oracle9i Forms 診断テクニック
41
Oracle Corporation 発行「Oracle9i Forms Diagnostic Techniques」の翻訳版です。
Operating System: Windows NT Version 4.0 Build 1381 Service Pack 6
Date and Time: 1/7/2003, 19:03
Command line: "C:\PROGRA~1\INTERN~1\iexplore.exe"
Registers:
EAX:0000000C
EBX:00069144
ECX:0006806C
EDX:1A4555D8
ESI:00134320
EDI:00067DC8
CS:EIP:001B:1A4142DE
SS:ESP:0023:00067DD0
DS:0023
ES:0023
EBP:0006808C
FS:003B
GS:0000
Flags:00010246
Call stack:
Address
Frame
1A4142DE
0006808C
CoGetClassObjectFromURL
1A413F34
000680C0
CoGetClassObjectFromURL
1A413C43
00069178
CoGetClassObjectFromURL
700994C8
000691A8
DllCanUnloadNow
700993D4
00069428
DllCanUnloadNow
700992CD
00069448
DllCanUnloadNow
700990D2
00069894
DllCanUnloadNow
70099C82
0006DA20
DllCanUnloadNow
======================================================================
=========
Exception code: C0000005 ACCESS_VIOLATION
Fault address: 0F991F00 01:00000F00
Module: D:\Oracle\JInitiator 1.3.1.8\bin\jpishare.dll
System Information:
Operating System: Windows NT Version 4.0 Build 1381 Service Pack 6
Date and Time: 1/7/2003, 19:03
Command line: "C:\PROGRA~1\INTERN~1\iexplore.exe"
Oracle9i Forms 診断テクニック
42
Oracle Corporation 発行「Oracle9i Forms Diagnostic Techniques」の翻訳版です。
Registers:
EAX:00000002
EBX:0F990000
ECX:007BE6C0
EDX:027E1D7C
ESI:00000000
EDI:027E1D7C
CS:EIP:001B:0F991F00
SS:ESP:0023:0006ED50
DS:0023
ES:0023
EBP:0006ED8C
FS:003B
GS:0000
Flags:00010202
SymInitialize failed, error code -1073741819
Call stack:
Address
Frame
0F991F00
Logical addr
0006ED8C
Module
0001:00000F00
D:\Oracle\Jinitiator
1.3.1.8\bin\jpishare.dll
77F69E0A
0006EDD8
0001:00008E0A C:\WINNT\System32\ntdll.dll
77F19FDB
0006EE98
0001:00018FDB C:\WINNT\system32\KERNEL32.dll
715160A3
0006FF00
0001:000150A3 C:\WINNT\System32\shdocvw.dll
0040168A
0006FF60
0001:0000068A C:\PROGRA~1\INTERN~1\iexplore.exe
00401726
0006FFC0
0001:00000726 C:\PROGRA~1\INTERN~1\iexplore.exe
77F1B9EA
0006FFF0
0001:0001A9EA C:\WINNT\system32\KERNEL32.dll
ダンプ・ファイルの使用
ダンプ・ファイルに含まれる情報は、Oracle 開発にとって非常に有益です。問題
を報告するバグのファイルにはこの情報を含むことが必要です。
Oracle9i Forms 診断テクニック
43
Oracle Corporation 発行「Oracle9i Forms Diagnostic Techniques」の翻訳版です。
アプリケーションのハング状態
クライアントが停止したように見える場合、サーバー・プロセスが活動状態であ
ることを検証します。
アプリケーションがハング状態になると、サーバー・プロセスがクラッシュして
いなくても、クライアントがユーザーの通信に反応しません。
このような場合、スレッド・ダンプによりデッドロックが指摘されます。
Java スレッド・ダンプ
スタック・ダンプは、アプレット・ビューアから取得できます。アプレット・ビュー
アを起動したコマンド・プロンプト(または DOS セッション)で[CTRL]+[BREAK]
を押します。
E:\ORA9iDS_904\forms90\java>appletviewer dve.html
connectMode=Socket
serverHost=incq139b.idc.oracle.com
serverPort=9001
Forms Applet version is : 9.0.4.0
Full thread dump:
"Flush Queue" prio=4 tid=0x7de0f0 nid=0x180 waiting on monitor [0x966f000..0x966fdc0]
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:420)
at oracle.forms.engine.FlushQueue.run(Unknown Source)
at java.lang.Thread.run(Thread.java:484)
"HeartBeat" prio=4 tid=0x7be0a0 nid=0x227 waiting on monitor [0x91df000..0x91dfdc0]
at java.lang.Object.wait(Native Method)
at oracle.forms.engine.Heartbeat.run(Unknown Source)
at java.lang.Thread.run(Thread.java:484)
"Forms-StreamMessageWriter" prio=4 tid=0x7bda10 nid=0x106 waiting on monitor
[0x919f000..0x919fdc0]
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:420)
at oracle.forms.net.SingleAccessorQueue.get(Unknown Source)
at oracle.forms.net.StreamMessageWriter.run(Unknown Source)
"Forms-StreamMessageReader" prio=4 tid=0x7bb280 nid=0x1ca runnable
[0x915f000..0x915fdc0]
at java.net.SocketInputStream.socketRead(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:86)
Oracle9i Forms 診断テクニック
44
Oracle Corporation 発行「Oracle9i Forms Diagnostic Techniques」の翻訳版です。
at oracle.forms.net.EncryptedInputStream.fill(Unknown Source)
at oracle.forms.net.EncryptedInputStream.read(Unknown Source)
at java.io.DataInputStream.readUnsignedByte(DataInputStream.java:243)
at oracle.forms.engine.Message.readDetails(Unknown Source)
at oracle.forms.engine.Message.readDetails(Unknown Source)
at oracle.forms.net.StreamMessageReader.run(Unknown Source)
"Screen Updater" prio=5 tid=0x7ad9e0 nid=0x4e waiting on monitor [0x90cf000..0x90cfdc0]
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:420)
at sun.awt.ScreenUpdater.nextEntry(ScreenUpdater.java:76)
at sun.awt.ScreenUpdater.run(ScreenUpdater.java:95)
"Thread-1" prio=5 tid=0x7879f0 nid=0x201 waiting on monitor [0..0x6fb30]
"thread applet-oracle.forms.engine.Main" prio=4 tid=0x77d0a0 nid=0x1c7 waiting on
monitor [0x908f000..0x908fdc0]
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:420)
at sun.applet.AppletPanel.getNextEvent(AppletPanel.java:269)
at sun.applet.AppletPanel.run(AppletPanel.java:301)
at java.lang.Thread.run(Thread.java:484)
"SunToolkit.PostEventQueue-1" prio=4 tid=0x77c080 nid=0x31 waiting on monitor
[0x904f000..0x904fdc0]
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:420)
at sun.awt.PostEventQueue.run(SunToolkit.java:491)
"AWT-EventQueue-1" prio=4 tid=0x77c300 nid=0x20c waiting on monitor
[0x900f000..0x900fdc0]
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:420)
at java.awt.EventQueue.getNextEvent(EventQueue.java:260)
at
java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:106)
at
java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:98)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:85)
Oracle9i Forms 診断テクニック
45
Oracle Corporation 発行「Oracle9i Forms Diagnostic Techniques」の翻訳版です。
"AWT-Windows" prio=7 tid=0x779ad0 nid=0x1ef runnable [0x8f8f000..0x8f8fdc0]
at sun.awt.windows.WToolkit.eventLoop(Native Method)
at sun.awt.windows.WToolkit.run(WToolkit.java:188)
at java.lang.Thread.run(Thread.java:484)
"SunToolkit.PostEventQueue-0" prio=7 tid=0x7786f0 nid=0x1cd waiting on monitor
[0x8f4f000..0x8f4fdc0]
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:420)
at sun.awt.PostEventQueue.run(SunToolkit.java:491)
"AWT-EventQueue-0" prio=7 tid=0x778db0 nid=0x48 waiting on monitor
[0x8f0f000..0x8f0fdc0]
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:420)
at java.awt.EventQueue.getNextEvent(EventQueue.java:260)
at oracle.forms.engine.Main.dispatchEvents(Unknown Source)
at oracle.forms.engine.Main.tryDispatching(Unknown Source)
at oracle.forms.engine.Main.componentResized(Unknown Source)
at java.awt.Component.processComponentEvent(Component.java:3598)
at java.awt.Component.processEvent(Component.java:3556)
at java.awt.Container.processEvent(Container.java:1164)
at java.awt.Window.processEvent(Window.java:779)
at java.awt.Component.dispatchEventImpl(Component.java:2593)
at java.awt.Container.dispatchEventImpl(Container.java:1213)
at java.awt.Window.dispatchEventImpl(Window.java:914)
at java.awt.Component.dispatchEvent(Component.java:2497)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:339)
at
java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:131)
at
java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:98)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:85)
"Signal
Dispatcher" daemon prio=10 tid=0x769240 nid=0x1b7 waiting on monitor [0..0]
"Finalizer" daemon prio=9 tid=0x767ed0 nid=0x1a1 waiting on monitor
[0x8dbf000..0x8dbfdc0]
at java.lang.Object.wait(Native Method)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:108)
Oracle9i Forms 診断テクニック
46
Oracle Corporation 発行「Oracle9i Forms Diagnostic Techniques」の翻訳版です。
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:123)
at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:162)
"Reference
Handler" daemon prio=10 tid=0x766c20 nid=0x214 waiting on monitor
[0x8d7f000..0x8d7fdc0]
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:420)
at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:110)
"VM Thread" prio=5 tid=0x765e70 nid=0x1a9 runnable
"VM Periodic Task Thread" prio=10 tid=0x7682a0 nid=0x17f waiting on monitor
"Suspend Checker Thread" prio=10 tid=0x768100 nid=0x1ba runnable
E:\ORA9iDS_904\forms90\java>
JInitiator の場合は、Java コンソールにダンプ情報の出力方法が表示されます。
Oracle9i Forms 診断テクニック
47
Oracle Corporation 発行「Oracle9i Forms Diagnostic Techniques」の翻訳版です。
Java ダンプ情報の
出力方法
「t」を押すと、次のようなスレッド・リストのダンプを取得できます。
Oracle9i Forms 診断テクニック
48
Oracle Corporation 発行「Oracle9i Forms Diagnostic Techniques」の翻訳版です。
ダンプの使用
スレッド・ダンプに含まれる情報は、Oracle の開発でコード内の問題を特定する
場合に有効です。問題を報告するバグのファイルにはスレッド・ダンプを含むこ
とが必要です。
アプリケーションのハングの原因
•
Java クラス・ファイルと Forms サーバーのバージョンの不一致が考えら
れます。アプレットとサーバー・プロセス間の通信はメッセージ id をベー
スにしています。メッセージ id が旧式な場合、アプレットとサーバーが
相互の指示を理解できません。jar ファイルを使用する場合は、ARCHIVE
タグを削除して試します。問題が修正されない場合は、インストール CD
またはパッチ CD から正しいクラス・ファイルを取り出します。
•
Forms ランタイムが停止した可能性があります。サーバー上の Forms ラン
タイム・プロセスが活動状態であるかどうか確認します。
FORMS90_TIMEOUT パラメータが設定されているかどうか確認します。
タイムアウト機能は heartbeat として動作し、指定した時間にわたって動
作がない場合に Forms サーバー・プロセスのクリーン・アップのみを行
い、Forms クライアントが定期的にサーバーを ping することを要求しま
Oracle9i Forms 診断テクニック
49
Oracle Corporation 発行「Oracle9i Forms Diagnostic Techniques」の翻訳版です。
す。これは主に、サーバー・プロセスの孤立を防ぐことを目的としてい
ますが、途中でサーバー・プロセスが不必要にクリーンアップされるこ
とも回避します。
メモリーの問題
他のソフトウェア・プログラムと同様、Java アプレットもメモリーを使用します。
Java の場合、言語仕様にガベージ・コレクタが必要です。これは、Java 仮想マシ
ン(JVM)の内蔵メモリー・マネージャの中にあります。Java プログラムは、メ
モリーが必要なときに、JVM にメモリーをリクエストします。使用可能なメモリー
がない場合、JVM は、ガベージ・コレクタを使用することによって、メモリーを
解放します。ガベージ・コレクタは、プログラムの実行に必要なくなったメモリー
を JVM に開放します。それでも、メモリーが不十分なために必要な処理を実行で
きない場合、JVM はオペレーティング・システムからのメモリーの取得を試みま
す。このメモリー割当てに障害が発生した場合、Java プログラムは継続できませ
ん。
たとえば、次の出力では、通常のメモリー不足エラーが示されています。
E:\ORA9iDS_904\forms90\java>appletviewer -J-mx4M dve.html
java.lang.OutOfMemoryError
<<no stack trace available>>
JVM ランタイムのオプション設定
たとえば、次のコマンドは、初期の Java ヒープ(JVM によって使用されるメモリー)
を 20MB に、JVM によって使用されるメモリーの最大量を 32MB にセットします。
appletviewer -J-ms20m -J-mx32Mb dve.html
Appletviewer のデフォルトの初期サイズと最大サイズは、それぞれ 16MB と 20MB
です。
JInitiator を使用する場合、JInitiator のコントロール・パネルで実行時オプション
を設定します。
Oracle9i Forms 診断テクニック
50
Oracle Corporation 発行「Oracle9i Forms Diagnostic Techniques」の翻訳版です。
注意: JVM は、使用を許可されているメモリーのみを使用します。オペレーティ
ング・システムに使用可能なメモリーがある場合でも、JVM はそれを使用しませ
ん。
メモリー・リークとは
メモリー・リークは、プログラムの動的ストアの割当てロジックに発生するエラー
です。このエラーにより、破棄されたメモリーが回収できなくなり、メモリーが
完全に消耗し、最終的には失敗につながります。
したがって、プログラムの実行時に、特定なタスクを実行するメモリーの割当て
が必要になります。プログラムが、これ以降使用済メモリーを使用しなくても、
同一マシンで実行される他のプログラムにそのメモリーを解放できない場合、こ
のプログラムはメモリーをリークしたと判断されます。
メモリー・リークを見分ける一般的な方法は、一連の手順を繰り返して、アプリ
ケーションが使用するメモリーを観察することです。繰り返すたびに、メモリー
使用量が増え続ける場合は、通常プログラムにメモリー・リークがあると診断さ
れます。
ただし、このように簡単ではない場合があります。一部の複雑なソフトウェアは、
後で再利用できるよう、割り当てられているメモリーの制御を保持します。メモ
リー割当てには大きな負荷がかかるため、後でメモリーの必要性が予測される場
合、未使用のメモリーを再利用のために保持するほうが効率的です。
Oracle9i Forms 診断テクニック
51
Oracle Corporation 発行「Oracle9i Forms Diagnostic Techniques」の翻訳版です。
Java のメモリー・リーク
Java 言語仕様は、JVM にガベージ・コレクタ(GC)を要求します。Java では、プ
ログラマが、新しいオブジェクトを作成してメモリーを割り当てます。このメモ
リーは、割当て解除できません。ガベージ・コレクタは、プログラムに割り当て
られているメモリーを定期的に確認し、安全に破棄できるオブジェクトを確認し
てメモリーを解放します。
安全に破棄できるオブジェクトを確認するために、ガベージ・コレクタは、mark
and sweep アルゴリズムを使用します。ガベージ・コレクタは、オブジェクトに動
的に割り当てられたメモリーをスキャンして印を付けます。この時点でオブジェ
クトへの参照は依然アクティブです。オブジェクトへのすべてのパスの確認後、
現在不要で印のないオブジェクトは、ガベージ・コレクタに収集されます。
ガベージ・コレクタが存在するため、メモリー・リークが起きないというのは、
Java プログラミングに関する神話ですが、これは真実ではありません。ガベージ・
コレクタは、アクティブな参照を持つオブジェクトに印を付けて、印のないオブ
ジェクトを破棄するだけです。不要なオブジェクトにアクティブな参照がある可
能性があります。これが Java のメモリー・リークです。このようなリークの解決
策は、不要なオブジェクトへの参照を破棄することです。それにより、ガベージ・
コレクタは、このオブジェクトを安全に破棄できるものと識別できます。Java プ
ログラムにメモリー・リークが存在する場合は、頻繁にガベージ・コレクタをコー
ルしても問題を解決できません。
さらに、JVM が使用していないメモリーをオペレーティング・システムに解放し
ない場合があります。現実に、ほとんどのプログラムは、将来のある時点でより
多くのメモリーを必要とし、JVM の空きメモリーを再使用できるため、これが問
題になることはほとんどありません。ただし、JVM に割り当てられるメモリーを
すべて JVM で実行されるプログラムが使用しないことに留意してください。
メモリー・リークの判別方法
特定の連続操作によりメモリー使用量が増加する場合、通常これはメモリー・リー
クです。適切な判別方法を次に示します。
1.
フォームを初期の基本状態にしてメモリー使用量を記録します。
2.
一連の手順を実行して問題を明らかにします。
3.
初期の基本状態に戻してメモリーの使用量を記録します。
手順 2 と 3 を繰り返すことにより、常にメモリーがリークしているかどうか確認
できます。反復の回数に対してメモリーの増加量が小さければ、リークではない
可能性があります。この場合、JVM が使用していないメモリーを保持しているか、
ガベージ・コレクタが不適切な頻度で起動されていることが考えられます。
Oracle9i Forms 診断テクニック
52
Oracle Corporation 発行「Oracle9i Forms Diagnostic Techniques」の翻訳版です。
パフォーマンスの問題
Java プログラムが実行されると、Java 仮想マシンはクラス・ファイルのロードが
必要になります。インターネットを介した実行の場合、プログラムが実行される
たびにクラス・ファイルのダウンロードにかかる時間が原因で、パフォーマンス
に問題が発生することがあります。このようなダウンロードの問題を解決するた
めに、JDK は Java Archive(JAR)ファイルをサポートします。jar ファイルは、一
連のクラス・ファイルを 1 つの圧縮ファイルにまとめたものです。一般的に、jar
ファイルのサイズは、内包するクラス・ファイルのサイズ合計よりも非常に小さ
くなります。
転送するデータ量の削減だけでなく、jar ファイルは、JInitiator と Oracle
の JDK がキャッシングと呼ばれるプロセスを使用できるようになります。
OJDK 1.1.7.15 以降、キャッシング・プロセスのパフォーマンスが向上しました。
キャッシングとは
JVM は、初めてクラスを参照するときに、ローカル・マシンを調べて、以前キャッ
シュされた jar ファイルにこのクラスが含まれていないか確認します。クラスが事
前にキャッシュされたファイルに存在する場合、JVM は、この jar ファイルの新
しいバージョンがアプリケーション・サーバーにあるかどうか確認します。新し
い jar ファイルがあれば、そのコピーがクライアントのキャッシュにダウンロード
されます。キャッシュされている jar ファイルが最新バージョンであれば、クラ
ス・ファイルは、ネットワークを経由せずに、キャッシュされている jar ファイル
からロードされます。
キャッシングの重要性
アプリケーションの jar ファイルが変更されないかぎり、アプリケーションが 1 度
実行され、すべての必要な jar ファイルがクライアントにキャッシュされると、そ
れ以降、アプリケーションの起動ごとにクラスはローカルにキャッシュされた jar
ファイルのコピーからロードされます。これにより、アプリケーション起動時の
パフォーマンスが大幅に向上します。アプリケーションの特定な部分の実行に新
しいクラスが必要な場合は、必要に応じてダウンロードされます。
Oracle9i Forms 診断テクニック
53
Oracle Corporation 発行「Oracle9i Forms Diagnostic Techniques」の翻訳版です。
キャッシングの有効を確認する方法
ここを
選択します。
OJDK のパフォーマンス向上
キャッシングにより、アプリケーションの起動ごとに jar ファイルがサーバーから
ダウンロードされなくなりますが、それでもパフォーマンスに影響を与える問題
があります。
JAR ファイルには圧縮されたデータが含まれます。より少ないデータをネット
ワークからダウンロードするより、キャッシュされた jar ファイルに含まれる圧縮
データを解凍するほうが時間がかかります。
JAR ファイルがネットワークを移動中に変更されなかったことを保証するために、
JAR ファイルのデジタル署名で認証が行われます。このプロシージャには、面倒
な数式が伴います。
OJDK で導入された新しいキャッシングのメカニズムは、これらの問題に次のよ
うに対処します。
JAR ファイルが初めてダウンロードされる際、2 つのファイルが作成されます。
•
データ・ファイル: JAR ファイルから解凍されたすべてのデータを含みま
す。データ・ファイルには拡張子.dxx が付きます。xx は 00 から 99 まで
の数字です。例:10f756b8.d00
•
インデックス・ファイル: JAR ファイルのダウンロード元となった URL、
サーバー上での最終変更日、目次などの JAR ファイルに関する情報を含
みます。目次にはファイルのすべてのエントリ、データ・ファイルのオ
フセット、各エントリの認証ステータスがリストされます。インデック
ス・ファイルには拡張子.ixx が付きます。xx は 00 から 99 までの数字で
す。例:10f756b8.i00
これらのファイル内の情報は、バイナリ形式で保存されます。ファイルを読むの
が困難なうえ、ほとんど読む価値もありません。
Oracle9i Forms 診断テクニック
54
Oracle Corporation 発行「Oracle9i Forms Diagnostic Techniques」の翻訳版です。
すべてのキャッシュ・ファイルの最初の 8 文字は、JAR ファイルをダウンロード
した URL を表します。そのため、対応する 8 文字の表現に URL をマッピングし、
その名前を持つファイルを検索することにより、キャッシング・メカニズムは
キャッシュにある URL をすぐに見つけることができます。
アプレットの実行に JAR ファイルが必要な場合、次のロジックが使用されます。
ハッシング・アルゴリズムを使用し
て、ファイルの URL を 8 文字のファ
イル名にマッピングします。
この 8 文字のファイル名にマッチす
るインデックス・ファイルのキャッ
シュ・ディレクトリを調べます。
マッチが
見つかりましたか?
いいえ
はい
jar ファイルのダウ
ンロードが必要で
す。
URL に接続して、キャッシュされて
いる URL のコピーが最新かを確認し
ます。
サーバーから jar
ファイルをダウン
ロードします。
キャッシュされている
コピーは最新ですか?
いいえ
はい
キャッシュ・ヒット。目次をインデッ
クス・ファイルからメモリーに読み
込みます。
Oracle9i Forms 診断テクニック
55
Oracle Corporation 発行「Oracle9i Forms Diagnostic Techniques」の翻訳版です。
アプリケーションにクラス・ファイルが必要な場合、OJDK は目次の情報を使用
してデータ・キャッシュでクラス・ファイルを探します。データにデジタル署名
がされている場合は、データ・ファイルから認証された署名者のリストが読み込
まれます。
用語
ここでは、このホワイト・ペーパーで使用された用語の一部を簡単に説明します。
Oracle ホーム
Oracle ホームは、Oracle 9iAS または Oracle 9iDs がインストールされているマシン
上のディレクトリのことです。
例を示します。
Windows マシンのディレクトリ D:\Ora9iAS に Oracle 9iAS をインストールする場
合、Oracle ホームは D:\Ora9iAS です。
同様に、Solaris マシンのディレクトリ/oracle/ora9ids に Oracle 9iDS をインストー
ルすると、Oracle ホームは/oracle/ora9ids になります。
サーブレット
サーブレットは、Java コードのモジュールで、クライアントのリクエストに応え
るためにアプリケーション・サーバーで実行されます。移植性の高い Java 言語で
記述され、標準のフレームワークに準拠しているため、サーブレットは、サーバー
およびオペレーティング・システムにおいて、独立した方法により高度なサーバー
拡張機能を作成する手段を提供します。JavaScript が HTML ページに機能を追加
するのと同様の方法で、サーブレットはアプリケーションに機能を追加します。
HTTP サーブレットの使用例:
•
HTML フォームから送られたデータの処理または格納(あるいはその両
方)。
•
動的コンテンツの提供。例:データベース問合せの結果をクライアント
に返す。
•
ステートレスな HTTP での状況情報の管理。たとえば、多数の顧客が同
時に使用するショッピング・カートを管理し、すべてのリクエストを正
しい顧客にマッピングする、オンライン・ショッピングのカート・シス
テム。
JInitiator
Oracle JInitiator は、Oracle 製品で Sun Microsystem 社 JavaSoft 部の Java Plug-in をベー
スとし、Win32 プラットフォームで Microsoft Internet Explorer または Netscape
Navigator 内部の Oracle の Java Virtual Machine(JVM)を使用して、HTML ページ
で Java アプレットまたは JavaBeans を実行します。Oracle JInitiator は、Sun の JRE
の Oracle バージョンである Oracle JRE に同梱されています。Oracle JRE は Sun の
JRE に完全に準拠し、Java をベースとする Oracle 基幹業務アプリケーションの安
Oracle9i Forms 診断テクニック
56
Oracle Corporation 発行「Oracle9i Forms Diagnostic Techniques」の翻訳版です。
定性とパフォーマンスを向上するために設計されたバグ修正と機能を含んでいま
す。
その他の用語
JDK
Java Development Kit
Javasoft 提供の JDK により、開発者は Java プログラムを構築および実行で
きます。
OJDK
Oracle Java Development Kit
JDK のバージョンで、オラクル社が作成した独自のバグ修正機能を含みま
す。
JVM
Java 仮想マシン
Java 仮想マシンは、Java コンパイラが生成するコードを解釈および実行し
ます。
Appletviewer
あらゆる Java アプレットを実行できる簡単なアプリケーションです。
Appletviewer は JDK の一部です。
Java
Java は、プログラミング言語であり、プラットフォームでもあります。
Java 言語は、オブジェクト指向、インタプリタ型の高度な言語です。Java
言語に関する完全な解説は、http://java.sun.com/でホワイト・ペーパー『The
Java Language Environment』を参照してください。
Java プラットフォームは、ハードウェアのプラットフォーム上に存在する
唯一のプラットフォームです。このプラットフォームは、JVM および Java
Application Programming Interface(API)の 2 つのコンポーネントで構成さ
れます。
Forms
Forms ランタイム・エンジンは、リクエストされた Form を実行する Forms
ランタイム・
のプロセスです。要求された Forms Listener Servlet への接続が確立したと
エンジン
きに起動します。
Web サーバー Web サーバーは、http リクエストに対応し、リクエストの送信者にファイ
ルを配信します。
Oracle9i Forms 診断テクニック
57
Oracle Corporation 発行「Oracle9i Forms Diagnostic Techniques」の翻訳版です。
Oracle Corporation
World Headquarters
500 Oracle Parkway
Redwood Shores, CA 94065
U.S.A.
海外からのお問合せ窓口:
電話: +1.650.506.7000
ファックス: +1.650.506.7200
http://www.oracle.com/
Oracle9i Forms 診断テクニック
Version: 1.0.0
2004 年 1 月
著書: Gururaja Padakandla、Sudarshan Upadhya
編集者: Grant Ronald
貢献者: Chris Lewis、Nick Triggs、Ros Rason、Matt Hawkins、Steve Noton
Copyright © Oracle Corporation 1999, 2000, 2003,2005
All Rights Reserved.
この文書はあくまで参考資料であり、掲載されている情報は予告なしに変更されることがあります。万一、誤植などにお気づきの場合は、
オラクル社までお知らせください。オラクル社は、本書に関する保証を行うものでなく、また本ドキュメントに関しいかなる責任も負いません。
Oracle は登録商標であり、Oracle8i、Oracle8 および PL/SQL は、オラクル社の商標です。その他のすべての企業名および製品名は、
あくまでその製品および会社を識別する目的にのみ使用されており、それぞれの所有者の商標または登録商標です。
Fly UP