ヘッダーをスキップ
Oracle Application Development Framework開発ガイドライン・マニュアル
10gリリース2(10.1.2) 
B15737-02
  目次
目次

戻る
戻る
次へ
次へ
 

A JDeveloper実行時の問題のトラブルシューティング

この付録では、JDeveloperを使用して開発したアプリケーションの実行時に発生する可能性のある代表的な問題と、その解決方法について説明します。次のトピックが含まれます。

A.1 問題点と解決方法

この項では、代表的な問題点とその解決方法について説明します。次のトピックが含まれます。

A.1.1 「HTTP 404-Page Not Found」エラーでJSPページを開けない

JSPファイルを含むADF WebアプリケーションをWARファイルで問題なくデプロイしたにもかかわらず、アプリケーションを実行しようとするとブラウザに「HTTP 404-Page Not Found」というエラーが表示されます。

問題点

WebページのURLが、アプリケーション・サーバーに対して構成されているコンテキスト・ルートと一致していません。アプリケーションのコンテキスト・ルートが違っている原因として、JDeveloperでデフォルトが使用されている可能性があります。これはオーバーライドする必要があります。Enterprise Managerを使用してWARファイルをデプロイすると、Oracle Application Serverで選択されたコンテキスト・ルートが指定されます。

解決方法

WebページのURLが次の書式になっていることを確認します。

http://<host>:<http port for iAS>/context-root/<sub-directory structure within public_html>/<the page>.jsp

アプリケーションのコンテキスト・ルートは、Oracle Application Serverインストールの<mypath>/j2ee/home/configにある、http-web-site.xmlファイルまたはdefault-web-site.xmlファイルに記載されています。

たとえば、コンテキスト・ルートが/war1の場合、Oracle Application Serverインストールのmod_oc4j.confファイルには、次のエントリが含まれます。

Oc4jMount /war1 home
Oc4jMount /war1/* home

つまり、表示されるURLのコンテキスト・ルートは1つのみで、その後にサブディレクトリが続いている必要があります。

JDeveloperでWARファイルのコンテキスト・ルートを変更するには、次のようにします。

  1. ナビゲータでwebappx.deployをダブルクリックし、「WARデプロイメント・プロファイルのプロパティ」ダイアログの「一般」を選択します。

  2. 「J2EE Webコンテキスト・ルートを指定」を選択し、フィールドに値を入力します。

  3. Oracle Application ServerインストールにWARファイルを再度デプロイします。

A.1.2 JSPページのコンパイルでエラーが返される

JSTLタグを含むJSPをコンパイルしようとすると、次のエラーが発生してコンパイルに失敗します。

Error(1): "http://java.sun.com/jstl/core" is not a registered TLD namespace.

Error(1): Unable to load tag handler class: http://java.sun.com/jstl/core

問題点

プロジェクトのWEB-INF/libディレクトリにstandard.jarファイルがありません。JSTLライブラリを手動で含める場合でも、コンポーネント・パレットを使用せずにJSPページにJSTLタグを手動で挿入すると、この問題が発生する可能性があります。

解決方法

プロジェクトのlibディレクトリにstandard.jarファイルを追加します。

ファイルを追加するには、次のようにします。

  1. <JDEV_HOME>/jakarta-taglibs/jstl-1.0/lib/ディレクトリを開きます。

  2. standard.jarファイルをコピーします。

  3. プロジェクトの.../public_html/WEB-INF/lib/ディレクトリにstandard.jarファイルを貼り付けます。

  4. JSPページをコンパイルします。

A.1.3 ブラウザにJSPファイルは表示されるがコンテンツがレンダリングされない

JSPファイルおよびStruts-Config.xmlファイルを含むADF Webアプリケーションを問題なくデプロイしたにもかかわらず、アプリケーションを実行しようとすると空のページが表示されます。この場合、WebページのURLは間違っておらず、ブラウザにはHTTPエラーは表示されません。

問題点

問題のWebアプリケーションは、Strutsコントローラを使用してStrutsアクションからページへのフォワードを行っています。Strutsアクション・クラスは、レンダリングの前にページ用のデータを準備するためにアプリケーションに実装されています。適切なStrutsアクション・クラスを実行しないまま、Webページを実行しようとしました。

解決方法その1

StrutsベースのWebアプリケーションは、JSPページのURLを指定して実行しないでください。Strutsアクションを起動してアプリケーションを実行する必要があります。そのためには、通常、<action name>.doという名前のリンクを含むWebページを表示します。拡張子 .doはリンクをStrutsコントローラへリダイレクトし、コントローラがStruts-Config.xmlファイルから該当するアクションを実行します。ブラウザは、Struts-Config.xmlファイルでこのアクションにマップされているWebページを表示します。

解決方法その2

JDeveloper内でWebアプリケーションを実行する場合、JSPを直接実行しないでください。JDeveloperでは、Strutsベースのアプリケーション内のJSPファイルにも「実行」を選択できますが、実際にはStruts-Config.xmlファイルからWebページを起動する必要があります。ナビゲータでStruts-Config.xmlを右クリックし、必要なアクションに対応する「実行」を選択してください。選択したアクションによって、Strutsコントローラでは、対応するマップされたJSPファイルの実行が可能になります。

A.1.4 サイズの大きいJSPを実行するとエラーが発生する

サイズの大きいJSPページを実行しようとすると、次のエラーが返されます。

java.lan.VerifyError: "Illegal target of jump or branch"

問題点

Sun JDKには、生成済のページ実装クラスのサービス・メソッドに64KBのサイズ制限があります。JSPページのサイズが64KB未満でも、サービス・メソッドにソースJSPページの生成済コードが含まれることにより、対応するクラス・ファイルのサイズが64KBを超える可能性があります。したがって、静的HTML、静的インクルードおよびタグ・ライブラリが原因で、クラス・ファイルのサイズが大きくなる場合があります。

解決方法

次の対応策を検討してください。

  • JSPページをより小さいサイズのページに分割します。次に、動的インクルード・コマンド(jsp:include)を使用して、一方のJSPページを他方のページに挿入します。実行時にはコンテンツ全体が表示されます。

  • JSPページに静的インクルードが含まれる場合、静的HTMLを個別のファイルに配置します。次に、動的インクルード・コマンド(jsp:include)を使用して、実行時にそのファイルの出力を挿入します。

  • 静的HTMLをJavaリソース・ファイルに配置します。Oracle JSPコンテナを使用している場合、JSPのexternal_resource構成パラメータを有効にすると、コンテナによってこの操作が自動的に実行されます。これにより、ページ内のすべての静的コンテンツが変換時にリソース・ファイルに配置されます。このパラメータの使用方法の詳細は、Oracle9i Databaseドキュメント・セットに含まれる『Oracle9i JavaServer Pagesサポート・リファレンス』を参照してください。変換前の場合、ojspcコマンドライン・ツールの-extresオプションでも、この機能を使用できます。

  • サイズの大きなスクリプトレットのJavaコードをJavaBeansに移行します。

A.1.5 JDeveloperから埋込みOC4Jサーバーへの接続を確立できない

Webアプリケーションを作成後、JDeveloperが埋込みOC4Jサーバーへの接続を確立しようとすると、アプリケーションが終了します。プロキシ・サーバーから送信されたエラー・メッセージが表示されます。

問題点

デフォルトでは、同じマシン上にあるデフォルトのブラウザのプロキシ設定がJDeveloperで使用されます。ただし、プロキシ例外のリストにlocalhostおよび127.0.0.1が表示されず、これらの例外をJDeveloper内に指定していない場合、JDeveloperと同じマシンにあるアプリケーション・サーバーへの接続を試みたにもかかわらず、実際にはローカル・マシン用の接続がプロキシ・サーバー上でかわりに開いてしまうことがあります。

たとえば、localhostがプロキシ・リストから除外されていない場合、http://localhost/MyApp/index.htmlなどのブラウザ内のリクエストはプロキシ・サーバーに送信され、サーバーはlocalhostをローカル・マシンではなくサーバー自身に対して解決します。この場合、表示されるメッセージは、ローカル・マシン上で実行しているサーバーではなく、プロキシ・サーバーから送信されたものです。

解決方法

プロキシ・サーバーの背後のIPアドレスに接続しようとしていて、ローカル・マシンも同じプロキシ・サーバーの背後にある場合、JDeveloperのWebプロキシ設定から接続しようとしているIPアドレスを除外してください。

JDeveloperでプロキシ設定を確認および変更するには、次のようにします。

  1. 「ツール」メニューから「設定」を選択し、ダイアログからプロキシ・サーバーを選択します。

  2. 「HTTPプロキシ・サーバーを使用」が選択されていることを確認し、プロキシ・ポートとプロキシ・ホストを指定します。

指定したプロキシ設定が使用されていることを確認するには、JDeveloperを起動し、コンソール・ウィンドウに表示される埋込みOC4Jサーバー起動用のコマンドをチェックします。このコマンドにはプロキシ設定が含まれます。

A.1.6 JDeveloperでWebアプリケーションに使用する接続ドライバ・クラスを指定できない

Webアプリケーションを作成後、データソースにカスタムのドライバ・クラス(oracle.jdbc.pool.OracleConnectionPoolDataSourceoracle.jdbc.pool.OracleConnectionCacheImplなど)を指定しようとしても、IDE接続によって指定されるデフォルトの接続の詳細設定が使用されてしまいます。IDE接続定義に依存しない、カスタマイズした方法でクラスと場所のパラメータを指定できません。

問題点

プロジェクトに含まれるdata-sources.xmlファイルが、埋込みOC4Jの場合のアプリケーションの実行およびデバッグ、またはスタンドアロンのOracle Application Serverインストールへのデプロイに使用されている可能性があります。JDeveloperでは、data-sources.xmlファイルは接続マネージャ・ウィザードで定義された接続で上書きされます。data-sources.xmlファイルが上書きされる際、ユーザー定義のデータソースはすべて削除されます。また接続マネージャで定義されたデータベース接続が、アプリケーションでの必要性にかかわらずすべてデータソースとして定義されます。

ただしこの問題はグローバル・アプリケーションのレベルでは発生しないため、サーバー全体に適用されるカスタム・エントリは定義可能です。OC4Jディレクトリ<ORACLE_HOME>/j2ee/config/にあるグローバル・アプリケーション用のdata-sources.xmlファイルは編集できます。プロジェクト・レベルのdata-sources.xmlファイルと異なり、このファイルはJDeveloperで上書きされません。

JDeveloper 9.0.4.x以下での解決方法

data-sources.xmlファイルのクラス・ドライバを編集してカスタム・エントリを指定し、Windowsのエクスプローラでファイルを読取り専用に設定します。これにより、JDeveloperによるファイルの上書きを防止できます。ファイルは、その制御対象別に次の2つの場所に格納されています。

  • プロジェクト・レベルのdata-sources.xmlファイルは、<JDEV_HOME>/mywork/<project>/src/META-INF/にあります。独自のデータソース定義を使用してアプリケーションをデプロイする場合には、このファイルを変更してください。

  • 埋込みOC4Jサーバー・レベルのdata-sources.xmlファイルは、<JDEV_HOME>/systemXXX/oc4j-config/にあります。カスタムのデータ・ソース定義を使用してJDeveloperでアプリケーションを実行する場合には、このファイルを変更してください。

ユーザー定義のデータソースを追加するには、<data-source>要素にname属性を指定します。たとえば、次のように入力します。

<data-source name="myConnection" ... />

9.0.3.xのJDeveloperは、jdev-connection:で始まるname属性値を認識し、接続マネージャに定義された接続にマップします。

9.0.4では、使用される接頭辞がjdev-connection-に変更されましたが、jdev-connection:も継続して認識されるため、どちらの接頭辞も接続マネージャの接続にマップされます。

name属性の値に応じて、次の3通りに処理されます。

  • nameが認識される接頭辞で始まる場合、接続マネージャに変更があれば、変更内容を使用して<data-source>要素が自動的に更新されます。

  • nameが認識される接頭辞で始まらない場合、<data-source>要素に対して何も処理されません。独自のデータソース接続情報を定義する場合には、この方法をお薦めします。

  • nameが指定されていない場合、<data-source>要素が削除されます。

JDeveloperではファイルorion-application.xmlがパッケージされ、このファイルはプロジェクト内のdata-sources.xmlファイルをポイントします。

正しいdata-sources.xmlファイルをプロジェクトとともにデプロイするためには、次の手順で標準のJ2EEに対するデプロイメント・プロファイルを構成する必要があります。

  1. ナビゲータでXxx.deployをダブルクリックし、デプロイメント・プロファイルのプロパティ・ダイアログを表示します。

  2. ダイアログで「プラットフォーム」を選択し、「ターゲット接続」<なし>に設定します。

これで、OC4J専用のファイルがアーカイブの一部としてデプロイされることはありません。

JDeveloper 9.0.5.x以上での解決方法

JDeveloper 9.0.5.xからは、JDeveloper IDEを使用して、データソースの値およびデータソースとIDE接続定義の同期化オプションを指定できます。IDEで更新されるdata-sources.xmlファイルは、その制御対象別に次の2つの場所に格納されています。

  • プロジェクト・レベルのdata-sources.xmlファイルは、<JDEV_HOME>/mywork/<project>/src/META-INF/にあります。独自のデータソース定義を使用してアプリケーションをデプロイする場合には、このファイルを更新してください。

    1. ナビゲータで、data-sources.xmlを右クリックして「プロパティ」を選択します。

    2. 「データソース・プロパティ」ダイアログで、「データソース」を選択します。

    3. オプション「実行時またはOC4Jへのデプロイ時にdata-sources.xmlを自動更新」の選択を解除します。

      これにより、JDeveloperによるファイルの上書きを防止できます。または、IDE接続に基づいてdata-sources.xmlファイル内の定義を作成、更新または削除するオプションの選択を個別に解除できます。

    4. 必要な接続ドライバ・クラスを指定するには、左側の「データソース」リストから必要な接続を選択します。

    5. 「接続」タブで、必要なクラス名を指定します。

  • 埋込みOC4Jサーバー・レベルのdata-sources.xmlファイルは、<JDEV_HOME>/systemXXX/oc4j-config/にあります。カスタムのデータ・ソース定義を使用してJDeveloperでアプリケーションを実行する場合には、このファイルを更新してください。

    1. 「ツール」メニューから「埋込みOC4Jサーバーの設定」を選択します。

    2. ダイアログで、「現在のワークスペース」および「データソース」を選択します。

      IDE接続に基づいてdata-sources.xmlファイル内の定義を作成、更新または削除する各オプションの選択を解除してください。これにより、JDeveloperによるファイルの上書きを防止できます。

    3. 必要な接続ドライバ・クラスを指定するには、左側の「データソース」リストから必要な接続を選択します。

    4. 「接続」タブで、必要なクラス名を指定します。

      JDeveloperではファイルorion-application.xmlがパッケージされ、このファイルはプロジェクト内のdata-sources.xmlファイルをポイントします。

正しいdata-sources.xmlファイルをプロジェクトとともにデプロイするためには、次の手順で標準のJ2EEに対するデプロイメント・プロファイルを構成する必要があります。

  1. ナビゲータでXxx.deployをダブルクリックし、デプロイメント・プロファイルのプロパティ・ダイアログを表示します。

  2. ダイアログで「プラットフォーム」を選択し、「ターゲット接続」<なし>に設定します。

これで、OC4J専用のファイルがアーカイブの一部としてデプロイされることはありません。

A.1.7 EJB参照への接続を確立できない

Oracle Application Server上のEJB参照を使用するJ2EEアプリケーションを作成しましたが、次の場合に接続に失敗します。

  • アプリケーション・サーバー接続の作成ウィザードを使用してサーバーへの接続を試みたとき

  • 接続を使用してWARファイルのデプロイを試みたとき

  • アプリケーションの実行を試み、クライアントがサーバー上のコンポーネントにアクセスしようとしたとき

エラーは、「Connection refused: connect」または「java.net.ConnectException: Connection refused: connect Io exception: Connection refused: connect (DESCRIPTION=(TMP=) (VSNNUM=135286784)(ERR=12505)(ERROR_STACK=(ERROR=(CODE=12505)(EMFI=4))))」です。

問題その1

SQL例外のエラーではなく、「Connection refused: connect」というメッセージが表示される場合、OC4Jサーバーが別のRMIポートでリスニングしている可能性があります。そうでなければ、OC4Jコンテナが稼働していないか、または指定されたホスト上でリスニングしていません。

接続を確立できない問題は、スタンドアロンのOracle Application Serverインストールによくある問題で、RMIポートがデフォルトとして提供されていないにもかかわらず指定されたレンジから採用されることが原因です。

JDeveloperの埋込みOC4Jサーバー向けの解決方法

アプリケーションを実行またはデプロイする際にJDeveloperが使用しているポートを、メッセージ・ログ・ウィンドウで確認します。このウィンドウには、最初に次のようなメッセージが表示されます。

[Starting OC4J using the following ports: HTTP=8988, RMI=23891, JMS=9227.]

または、rmi.xmlファイルをチェックしてOC4Jサーバーが同じRMIポート上でリスニングしているかどうかを確認します。また、<JDEV_HOME>/systemXXX/oc4j-config/log/にあるrmi.logファイルでエラーをチェックすることもできます。

リリース9.0.2〜9.0.4のJDeveloperでポートを変更するには、次のようにします。

  1. 「ツール」メニューから「設定」を選択します。

  2. ダイアログで「埋込みOC4J」を選択し、変更を行います。

JDeveloper 9.0.5.xでポートを変更するには、次のようにします。

  1. 「ツール」メニューから「設定」を選択します。

  2. ダイアログで「埋込みOC4Jサーバーの設定」を選択します。

  3. ダイアログで「グローバル」および「起動」選択し、変更を行います。

新しいサーバー・ポート設定は、<JDEV_HOME>/systemXXX/oc4j-config/rmi.xmlファイルで更新されます。

Oracle Application Server上のスタンドアロンOC4J向けの解決方法

rmi.xmlファイルをチェックしてOC4Jサーバーが同じRMIポート上でリスニングしているかどうかを確認します。また、<OC4J_HOME>/j2ee/home/log/にあるrmi.logファイルでエラーをチェックすることもできます。<OC4J_HOME>/j2ee/home/config/にあるrmi.xmlファイルでサーバー・ポートを編集します。

または、Oracle Application Serverインストールの管理に関するEnterprise ManagerのWebサイトにアクセスする方法もあります(http://host:portと入力、デフォルトは1810)。OC4Jインスタンスについての最初のページにある「ポート」リンクをクリックしてください。このページを使用して、各OC4JインスタンスのUMIポートをチェックおよび構成できます。

A.2 追加情報

追加の解決方法は、Oracle MetaLinkhttp://metalink.oracle.com)で参照できます。問題に対する解決方法が見つからない場合は、サービス・リクエストに記録してください。


関連資料: