アプリケーションの運用中に出力される例外情報について説明します。説明されている例外以外についてはJavaのAPI仕様書を参照して対処してください。
例外情報にスタックトレースが出力されている場合、スタックトレースに続けて「Caused by:」として別の例外が出力されていることがあります。根本原因を表していますので、こちらをあわせて確認してください。
例外の説明
[意味]
指定されたファイルの検出に失敗しました。
[原因]
メッセージブローカの起動時に-nameオプションで指定するメッセージブローカインスタンス名を使用したファイルの作成に失敗しました。
[ユーザの対処]
メッセージブローカの起動時に-nameオプションで指定するメッセージブローカインスタンスの文字数を減らし、再度実行してください。
[意味]
java.lang.ArrayIndexOutOfBoundsExceptionの発生元が、org.apache.xml.resolver.readers.TextCatalogReader、またはorg.apache.xml.resolver.Catalog、またはcom.sun.org.apache.xml.internal.resolver.readers.TextCatalogReader、またはcom.sun.org.apache.xml.internal.resolver.Catalogの場合は、カタログファイルに誤りがあります。
[原因]
java.lang.ArrayIndexOutOfBoundsExceptionの発生元が、org.apache.xml.resolver.readers.TextCatalogReader、またはorg.apache.xml.resolver.Catalog、またはcom.sun.org.apache.xml.internal.resolver.readers.TextCatalogReader、またはcom.sun.org.apache.xml.internal.resolver.Catalogの場合は、以下の原因が考えられます。
カタログファイルの解析に失敗しました。
[ユーザの対処]
java.lang.ArrayIndexOutOfBoundsExceptionの発生元が、org.apache.xml.resolver.readers.TextCatalogReader、またはorg.apache.xml.resolver.Catalog、またはcom.sun.org.apache.xml.internal.resolver.readers.TextCatalogReader、またはcom.sun.org.apache.xml.internal.resolver.Catalogの場合は、以下の対処を行ってください。
カタログファイルの書式を見直して再実行してください。
注意
カタログファイルは、OASIS XML Catalogの仕様に従った記述を行ってください。
[意味]
オブジェクトのクラスキャスト(型変換)に失敗しました。
[原因]
あるオブジェクトを継承関係にないクラスにキャストしようとしました。
[ユーザの対処]
アプリケーションの実装を確認し、適切なクラスにキャストするよう修正してください。
キャストに失敗したクラス名は、以下のように例外メッセージに出力される場合があります。
java.lang.ClassCastException: <キャストに失敗したクラス名> |
キャストに失敗したクラス名が「$Proxy99」のような<$Proxy数値>で、かつ発生タイミングがアプリケーション起動時の場合は、以下の原因が考えられます。
1つのアプリケーション内でEJB2.1形式とEJB3.0形式など、仕様の異なるバージョンの実装や定義が混在しています。
アプリケーションの定義ファイルやアノテーションに定義したクラスの型が誤っています。(deployment descriptorの<local-home>タグにRemoteインタフェースクラスを定義しているなど)
アプリケーション配備時に配備モジュールの検証を有効にして配備を行うと、アプリケーションがJava EE規約に準拠しているか確認できます。
[意味]
不正または不適切な引数をメソッドに渡しました。
[原因]
API、メソッドに不正または不適切な引数が渡された可能性があります。
[ユーザの対処]
例外メッセージ、およびスタックトレースを参照し、アプリケーションがAPI、メソッドに不正または不適切な引数を渡していないか確認してください。
[意味]
呼び出されたメソッドの定義がない場合にスローされます。
[原因]
以下の原因が考えられます。
Applicationクラスローダの設定先とWebクラスローダの設定先の両方に同じクラスが存在しており、バッティングが発生しています。
親(祖先)のクラスローダの設定先とアプリケーションの両方に同じクラスが存在しており、バッティングが発生しています。
[ユーザの対処]
「2.22.1 クラスローダの構成」を参照し、以下の対処を行ってください。
Applicationクラスローダの設定先とWebクラスローダの設定先の両方に同じクラスが存在していないか確認してください。存在する場合は以下を検討してください。
アプリケーションの構成の変更を検討してください。
「2.22.3 Webクラスローダの委譲モデルの変更」を参照し、親(祖先)クラスローダへの委譲を後に設定することで回避可能か検討してください。
親(祖先)クラスローダの設定先とアプリケーションの両方に同じクラスが存在していないか確認してください。存在する場合は以下を検討してください。
親(祖先)クラスローダの設定先とアプリケーションの両方に同じクラスが設定されないようにクラスローダの設定を変更してください。
親(祖先)クラスローダの設定を変更できない場合、親(祖先)クラスローダに設定しているクラスのバージョンにあったアプリケーションの構築を検討してください。
[意味]
呼び出されたメソッドの定義がない場合にスローされます。
[原因]
Webサービスクライアントの実行で実行環境からスローされた場合、おもに以下の原因が考えられます。
javax.xml.ws.WebServiceRefアノテーションでtype要素に指定している型に誤りがあります。
[ユーザの対処]
以下の対処を行ってください。
javax.xml.ws.WebServiceRefアノテーションでtype要素に指定した型に合わせて変数の型宣言を行ってください。
[意味]
Java VMによって、クラスファイルのメジャーバージョン番号とマイナーバージョン番号がサポートしていない番号と判定された場合にスローされます。
[原因]
アプリケーションまたは指定されたクラスパスの中のクラスファイルとJDK/JREの組み合わせが正しくありません。
[ユーザの対処]
Javaは基本的に上位互換ですが、後のバージョンのJDKでコンパイルしたものの実行は保証されません。実行時に使用するJavaと同じバージョンでコンパイルされているか確認してください。
[意味]
要求されたオペレーションはサポートしていません。
[原因]
サポートされないAPIを実行しました。
[ユーザの対処]
例外メッセージおよびスタックトレースを参照し、アプリケーションが非サポートのAPIを呼び出していないか確認してください。
[意味]
RMI-IIOP通信で呼び出したサーバアプリケーションで例外が発生しました。
[原因]
サーバアプリケーションで何らかの異常が発生しています。
[ユーザの対処]
サーバアプリケーションが配備されているIJServerクラスタのサーバーログを参照し、エラー情報を確認して対処してください。
IPCOMと連携したIIOP通信の負荷分散機能を利用している場合は、負荷分散対象となるIJServerクラスタが停止していないか確認してください。
[意味]
JDBC API実行中にエラーが発生しました。
[原因]
データベースで異常が発生しました。
[ユーザの対処]
メッセージに以下の文字列が出力されている場合は、Symfoware ServerのNativeインタフェースのエラーが発生しています。Symfoware ServerのNativeインタフェースの「RDB メッセージリファレンス」を参照して対処してください。
JYPXXXXE ('X'は数字) |
メッセージに以下の文字列が出力されている場合は、Oracleのエラーが発生しています。Oracleの「エラーメッセージ」を参照して対処してください。
ORA-XXXXX ('X'は数字) |
メッセージに以下の文字列が出力されている場合は、アプリケーションですでにクローズした(closeメソッドを実行した)接続に対して処理を実行しています。アプリケーションを見直してください。
Connection closed |
OracleデータベースがサポートしていないバージョンのJDBCドライバを使用している場合、正常にデータが挿入できないなどの現象が発生することがあります。
使用するJDBCドライバのバージョンが、Oracleデータベースがサポートするバージョンか確認してください。
「Caused by:」としてorg.apache.derbyパッケージの例外が出力されている場合は、Java DBで異常が発生しています。Java DBのマニュアルを参照して対処してください。
例外メッセージが以下の場合、最大プールサイズ分のコネクションがすべて使用中で、待ち時間が最大待ち時間を超過しています。しばらく待ってから再度実行するか、最大プールサイズまたは最大待ち時間の設定値が妥当か確認してください。
Error in allocating a connection. Cause: In-use connections equal max-pool-size and expired max-wait-time. Cannot allocate more connections. |
例外メッセージ「This pool is not registered with the runtime environment : null」が出力されている場合は、テーブル自動生成に使用するJDBCリソースのアクセスに失敗した可能性があります。アプリケーションのdeployment descriptorに定義したJDBCリソース名を確認し再度コマンドを実行してください。
使用するデータベースがSymfoware ServerのNativeインタフェースの場合、「文のタイムアウト」機能を使用できません。文のタイムアウトを有効にした場合、Statement、PreparedStatement、CallableStatementオブジェクトに対して、アプリケーションサーバから「setQueryTimeout」メソッドが呼び出された際に、以下のエラーメッセージが出力されます。
指定されたメソッドは当ドライバではサポートされていません |
メッセージに「Error in allocating a connection. Cause: null」が出力されており、Symfoware ServerのNativeインタフェースを使用している場合は、同時に使用しているPowerGres Plusの問題で発生している可能性があります。データベース提供元にお問い合わせください。
[意味]
トランザクションはすでにロールバックされているか、ロールバックにマークされています。
[原因]
トランザクションの状態が不正なため、処理を中断しました。
[ユーザの対処]
アプリケーション実行時のトランザクションの状態を適切な状態になるように修正してください。トランザクションの状態については、「2.15.6 トランザクションの監視と凍結機能」を参照してください。
トランザクションのタイムアウトが発生した可能性があります。その場合は、以下の定義値を見直してください。
トランザクションタイムアウトの定義値
トランザクションタイムアウトに指定した値を見直してください。
トランザクションタイムアウトの定義値については、「8.8.13 トランザクションサービスの定義項目」を参照してください。
<ejb><cmt-timeout-in-seconds>タグの定義値
EJBアプリケーションのトランザクション管理種別が「Container」の場合、かつ「3.2.1.3 Interstage EJB application deployment descriptor (glassfish-ejb-jar.xml)」の<ejb><cmt-timeout-in-seconds>タグを定義している場合は、指定した値を見直してください。
[可変情報]
{0}:エラー原因
[意味]
使用できないJMS APIメソッドを呼び出そうとしました。
[システムの処理]
処理を中断します。
[ユーザの対処]
アプリケーションを確認してください。
QueueSessionインタフェースは、以下のメソッドを呼び出すことはできません。
unsubscribe()
createTemporaryTopic()
TopicSessionインタフェースは、以下のメソッドを呼び出すことはできません。
createSender()
createBrowser()
createTemporaryQueue()
[意味]
クライアントからのリクエストで異常を検出しました。
[ユーザの対処]
例外メッセージに含まれるメッセージを参照し、対処を実施してください。
[意味]
JNDI APIに指定したJNDI名が不当です。
[原因]
JNDI APIに指定したJNDI名が不当です。例外メッセージが「Name is empty」の場合には、JNDI名に空文字(長さ0の文字列)が指定されている可能性があります。
[ユーザの対処]
正しいJNDI名を指定して再度実行してください。
[意味]
指定されたJNDI名はすでに他のオブジェクトにバインドされているために、バインディングを追加できませんでした。
[原因]
バインドで使用しようとしたJNDI名が重複使用されています。
[ユーザの対処]
JNDI名を重複して使用しないようにアプリケーションを修正してください。
実装に問題のないアプリケーションをHotDeployした時に当エラーが発生した場合は、IJServerクラスタを再起動してください。
[意味]
指定されたJNDI名に対応するサーバアプリケーションが見つかりません。
[原因]
以下の原因が考えられます。
例外メッセージが「No object bound to name java:comp/XXX」(XXXは可変)の場合
参照するオブジェクトの参照名がdeployment descriptorファイルに定義されていません。環境ネーミングコンテキストを使用する場合には、deployment descriptorファイルに参照するオブジェクトの情報を定義する必要があります。
例外メッセージに加えて例外がスローされる原因となった例外情報が出力されており、その例外が「org.omg.CORBA.XXX」(XXXは可変)の場合にはINS形式で指定したJNDI名(接続先ホスト名とポート番号を含む)でネーミングサービスの接続に失敗しています。
例外メッセージが「{0} not found」({0}はJNDI名、サブコンテキスト名、論理名のいずれか)の場合
ターゲットに指定したホスト名・ポート番号に対応するIJServerクラスタに、指定したJNDI名のオブジェクトが登録または配備されていません。
ターゲットに指定したホスト名・ポート番号に対応するIJServerクラスタにおいて、リソースまたはアプリケーションが無効になっています。
deployment descriptorファイルのmapped-nameタグまたはInterstage deployment descriptorファイルのjndi-nameタグに指定したJNDI名に誤りがあります。
deployment descriptorファイルの参照するオブジェクトの定義情報(ejb-refタグの指定など)に誤りがあります。
アプリケーション内で指定したJNDI名に誤りがあります。
IPCOMを利用したIIOP通信の負荷分散機能を使用している場合、「IPCOMを利用したIIOP通信の負荷分散機能を使用している場合、EJBをlookupした際にjavax.naming.NameNotFoundExceptionが発生する」に該当している可能性があります。
例外メッセージが「{0}#null not found」({0}はJNDI名)の場合
deployment descriptorファイルのejb-refタグにインタフェースの定義が不足しています。
例外メッセージが「Lookup of java:comp/UserTransaction not allowed for Container managed Transaction beans」の場合
トランザクション管理種別が「Container」のEJBアプリケーションでUserTransactionのlookupが実行されました。
[ユーザの対処]
以下の対処を行ってください。
例外メッセージが「No object bound to name java:comp/XXX」(XXXは可変)の場合
参照するオブジェクトの情報をdeployment descriptorファイルに定義して再度実行してください。
INS形式で指定したJNDI名を確認し、接続先ホスト名とポート番号が正しいか、または接続先でアプリケーションが有効になっているかを確認し、エラー原因を取り除いてから再度実行してください。エラーが解決しない場合には、例外がスローされる原因となった「org.omg.CORBA.XXX」(XXXは可変)の例外の意味を「11.75.50 IIOP通信時の例外情報」で確認して対処してください。
例外メッセージが「{0} not found」({0}はJNDI名、サブコンテキスト名、論理名のいずれか)の場合
ホスト名・ポート番号に誤りがないか確認してください。または、呼出し先のIJServerクラスタに参照するオブジェクトを配備または登録してください。
なお、IPCOMと連携したIIOP通信の負荷分散機能を利用している場合は、負荷分散対象となるIJServerクラスタすべてについて確認してください。
呼出し先のIJServerクラスタにおいて、アプリケーションまたはリソースが無効になっている場合には有効にしてください。
deployment descriptorファイルのmapped-nameタグまたはInterstage deployment descriptorファイルのjndi-nameタグが誤っている場合には正しいJNDI名を指定してください。
deployment descriptorファイルの参照するオブジェクトの定義情報(ejb-refタグの指定など)に定義したJNDI名やインタフェース名が正しいか確認してください。
アプリケーション内で指定したJNDI名に誤りがないか確認してください。
IPCOMを利用したIIOP通信の負荷分散機能を使用している場合、「IPCOMを利用したIIOP通信の負荷分散機能を使用している場合、EJBをlookupした際にjavax.naming.NameNotFoundExceptionが発生する」を参照してください。
例外メッセージが「{0}#null not found」({0}はJNDI名)の場合
deployment descriptorファイルのejb-refタグにインタフェースの定義を追加して再度実行してください。
例外メッセージが「Lookup of java:comp/UserTransaction not allowed for Container managed Transaction beans」の場合
UserTransactionのlookupを行わないようアプリケーションを修正してください。
注意
JNDIは階層管理されています。"jdbc/MyDS"というJNDI名の場合、"jdbc"というサブコンテキストに、"MyDS"という論理名でオブジェクトが管理されています。JNDIでオブジェクトを参照する場合、この階層を辿ってオブジェクトを検索します。このため、"jdbc/MyDS"を参照する場合に"jdbc"サブコンテキストのオブジェクトが存在しない場合には、"jdbc not found"というサブコンテキストが見つからないというエラーが発生します。
[意味]
JNDI APIの実行でエラーが発生しました。
[原因]
例外メッセージが「invocation exception」の場合
規約で環境ネーミングコンテキストの利用が許可されていないメソッド(Enterprise Beanクラスのコンストラクタなど)でJNDI APIを呼び出しています。
アプリケーションで作成したスレッドで環境ネーミングコンテキストを利用しています。
例外メッセージが「java:comp namespace cannot be modified」の場合
環境ネーミングコンテキストは、bindやunbindなどのオブジェクトを更新するAPIを実行できません。
例外メッセージが「ejb ref resolution error for remote business interface」の場合
EJB 3.0アプリケーションのビジネスインタフェース取得時にエラーが発生しました。
例外メッセージが「<JNDI名> is not found」の場合
InitialContextのコンストラクタを呼び出すときに渡す環境プロパティ情報に誤りがあります。
[ユーザの対処]
例外メッセージが「invocation exception」の場合
JNDI APIを呼出し可能なメソッドで実行するようにアプリケーションを変更してください。上記に該当しない場合には、Java API仕様書を参照して対処してください。
アプリケーションで作成したスレッドで環境ネーミングコンテキストを利用することはJava EE規約で禁止されているため、コンテナから呼び出されたスレッドで環境ネーミングコンテキストを利用してください。
例外メッセージが「java:comp namespace cannot be modified」の場合
bindやunbindなどのオブジェクトを更新するAPIを実行しないようにアプリケーションを修正してください。
例外メッセージが「ejb ref resolution error for remote business interface」の場合
同時に出力される例外メッセージを参考にしてアプリケーションを修正してください。
例外メッセージが「<JNDI名> is not found」の場合
InitialContextのコンストラクタに渡す環境プロパティ情報が正しいか見直してください。
[意味]
javax.naming.InitialContextオブジェクトの生成に失敗しました。
[原因]
クラスパスにgf-client.jarが設定されていません。
java.naming.factory.initialプロパティの指定に誤りがあります。
[ユーザの対処]
「4.12 JNDIの環境設定」を参照してクラスパスを正しく設定してください。
「4.12.2 初期コンテキスト生成時の設定」を参照して、java.naming.factory.initialプロパティに正しい値を設定してください。
[意味]
サーバアプリケーションで例外が発生し、トランザクションをロールバックしました。
[原因]
サーバアプリケーションで何らかの異常が発生しています。
[ユーザの対処]
サーバアプリケーションが配備されているIJServerクラスタのサーバーログを参照し、エラー情報を確認して対処してください。
[意味]
リソースマネージャが関連付けられたトランザクションでエラーを検出しました。
[原因]
リソースマネージャが管理するリソース内の処理で異常が発生しました。
[ユーザの対処]
インダウトトランザクションの回復処理時に「SQL Exception thrown from oracle driver:」のメッセージが出力された場合は、Oracleのエラーが発生しています。後続のエラーメッセージを参照して対処してください。
JDBCドライバのプロパティuserで指定したユーザに対し、以下の権限が付与されているかを確認してください。
SYS.PENDING_TRANS$のSELECT権限
SYS.DBA_2PC_NEIGHBORSのSELECT権限
インダウトトランザクションの回復処理時に「XA Exception thrown from oracle driver:」のメッセージが出力された場合は、Oracleのエラーが発生しています。後続の以下の形式のエラーメッセージを参照して対処してください。
ERR_CODE=XAExceptionのエラーコード, MSG=XAExceptionのエラーメッセージ |
また、JDBCドライバのプロパティuserで指定したユーザに対し、以下の権限が付与されているかを確認してください。
DBA_PENDING_TRANSACTIONSのSELECT権限
SYS.DBMS_XAのEXECUTE権限