アプリケーションの運用中に出力される例外情報について説明します。説明されている例外以外についてはJavaのAPI仕様書を参照して対処してください。
例外情報にスタックトレースが出力されている場合、スタックトレースに続けて「Caused by:」として別の例外が出力されていることがあります。根本原因を表していますので、こちらをあわせて確認してください。
例外の説明
[意味]
指定されたファイルの検出に失敗しました。
[原因]
メッセージブローカの起動時に-nameオプションで指定するメッセージブローカインスタンス名を使用したファイルの作成に失敗しました。
[ユーザの対処]
メッセージブローカの起動時に-nameオプションで指定するメッセージブローカインスタンスの文字数を減らし、再度実行してください。
[意味]
java.lang.ArrayIndexOutOfBoundsExceptionの発生元が、com.sun.org.apache.xml.internal.resolver.readers.TextCatalogReader、またはcom.sun.org.apache.xml.internal.resolver.Catalogの場合は、カタログファイルに誤りがあります。
[原因]
java.lang.ArrayIndexOutOfBoundsExceptionの発生元が、com.sun.org.apache.xml.internal.resolver.readers.TextCatalogReader、またはcom.sun.org.apache.xml.internal.resolver.Catalogの場合は、以下の原因が考えられます。
カタログファイルの解析に失敗しました。
[ユーザの対処]
java.lang.ArrayIndexOutOfBoundsExceptionの発生元が、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規約に準拠しているか確認できます。
[意味]
クラスの文字列名を使用してクラスローダよりロードしようとしましたが、指定された名前のクラスの定義が見つかりませんでした。
[原因]
アプリケーションまたは指定されたクラスパスの中に指定された名前のクラスが含まれていません。
[ユーザの対処]
指定された名前のクラスをアプリケーションまたはクラスパスに追加してください。
実装に問題のないアプリケーションをHotDeployした時に当エラーが発生した場合は、IJServerクラスタを再起動してください。
[意味]
不正な引数、または不適切な引数をメソッドに渡しました。
[原因]
API、メソッドに不正または不適切な引数が渡された可能性があります。
[ユーザの対処]
例外メッセージ、およびスタックトレースを参照し、アプリケーションがAPI、メソッドに不正または不適切な引数を渡していないか確認してください。
[意味]
不正または不適切なときにメソッドが呼び出されたことを示します。すなわち、Java環境またはJavaアプリケーションは、要求されたオペレーションに適した状態ではありません。
[原因]
以下の原因が考えられます。
例外メッセージが「Operation not allowed」の場合
実行された操作は許可されていません。
例外メッセージが「EJB not in READY state」の場合
呼び出し可能な状態ではありません。
例外メッセージが「EJBObject not available」の場合
EJBObjectは取得できません
例外メッセージが「EJBLocalObject not available」の場合
EJBLocalObjectは取得できません
例外メッセージが「ERROR: only SessionBeans with bean-managed transactionscan obtain UserTransaction」の場合
トランザクション管理種別が「Container」のSession BeanではUserTransactionを取得できません。
アプリケーションで作成したスレッドでトランザクション取得を行っています。
例外メッセージが「No transaction context.」の場合
トランザクションが開始されていないため、トランザクションコンテキストがありません。
アプリケーションで作成したスレッドでトランザクション操作メソッドが実行されました。
例外メッセージが「EJB Timer Service not available」の場合
EJBタイマーサービスの初期化に失敗している可能性があります。
[ユーザの対処]
以下の対処を行ってください。
例外メッセージが「Operation not allowed」の場合
EJB規約を参照し、実行したメソッドを呼び出し可能なメソッドで実行するようにアプリケーションを修正してください。
例外メッセージが「EJB not in READY state」の場合
EJB規約を参照し、実行したメソッドを呼び出し可能なメソッドで実行するようにアプリケーションを修正してください。
例外メッセージが「EJBObject not available」の場合
EJB規約を参照し、getEJBObjectメソッドを呼び出し可能なメソッドで実行するようにアプリケーションを修正してください。
例外メッセージが「EJBLocalObject not available」の場合
EJB規約を参照し、getEJBLocalObjectメソッドを呼び出し可能なメソッドで実行するようにアプリケーションを修正してください。
例外メッセージが「ERROR: only SessionBeans with bean-managed transactionscan obtain UserTransaction」の場合
UserTransactionの操作を行わないようアプリケーションを修正してください。トランザクションのロールバックを行いたい場合は、EJBContext.setRollbackOnlyメソッドを使用してください。
アプリケーションで作成したスレッドでトランザクション管理することはJava EE規約で禁止されているため、コンテナから呼び出されたスレッドでトランザクション管理を実行してください。
例外メッセージが「No transaction context.」の場合
トランザクションを開始した状態でメソッドを実行するようにアプリケーションを修正してください。
アプリケーションで作成したスレッドでトランザクション管理することはJava EE規約で禁止されているため、コンテナから呼び出されたスレッドでトランザクション管理を実行してください。
例外メッセージが「EJB Timer Service not available」の場合
IJServerクラスタ起動時にEJB5108のメッセージが出力されていないか確認してください。EJB5108のメッセージが出力されている場合、EJB5108の対処を実施してください。
[意味]
クラスのロードに失敗しました。
[原因]
アプリケーションまたは指定されたクラスパスの中に必要なクラスが含まれていません。
[ユーザの対処]
例外メッセージに含まれるクラスをアプリケーションまたはクラスパスに追加してください。javaコマンドでJava SEスタンドアロンアプリケーションを実行している場合、以下も参照して対処してください。
エラーが発生したクラスが「javax/security/jacc/PolicyContextException」の場合
javaee.jarにクラスパスが設定されていません。「5.12.1 環境変数の設定」を参照して正しくクラスパスを設定してください。
エラーが発生したクラスが「com/sun/enterprise/admin/monitor/registry/MonitoringLevelListener」の場合
appserv-admin.jarにクラスパスが設定されていません。「5.12.1 環境変数の設定」を参照して正しくクラスパスを設定してください。
エラーが発生したクラスが「com/sun/jms/spi/xa/JMSXAQueueConnectionFactory」の場合
imqjmsra.jarにクラスパスが設定されていません。「5.12.1 環境変数の設定」を参照して正しくクラスパスを設定してください。
J2EE実行環境のIJServerで発生した場合、以下も参照して対処してください。
エラーが発生したクラスが「com/sun/appserv/management/util/misc/RunnableBase$HowToRun」の場合
appserv-ext.jarにクラスパスが設定されていません。「5.18 J2EE/Java EE連携の環境設定」を参照して正しくクラスパスを設定してください。
エラーが発生したクラスが「javax/servlet/jsp/JspApplicationContext」の場合
appserv-rt.jarが設定されていないか確認してください。設定されている場合、appserv-rt.jarの定義を削除し、代わりにappserv-rt-client.jarを設定してください。
[意味]
呼び出されたメソッドの定義がない場合にスローされます。
[原因]
以下の原因が考えられます。
Applicationクラスローダの設定先とWebクラスローダの設定先の両方に同じクラスが存在しており、バッティングが発生している。
親(祖先)のクラスローダの設定先とアプリケーションの両方に同じクラスが存在しており、バッティングが発生している。
[ユーザの対処]
「3.19.1 クラスローダの構成」を参照し、以下の対処を行ってください。
Applicationクラスローダの設定先とWebクラスローダの設定先の両方に同じクラスが存在していないか確認してください。存在する場合は以下を検討してください。
アプリケーションの構成の変更を検討してください。
「3.19.3 Webクラスローダの委譲モデルの変更」を参照し、親(祖先)クラスローダへの委譲を後に設定することで回避可能か検討してください。
親(祖先)クラスローダの設定先とアプリケーションの両方に同じクラスが存在していないか確認してください。存在する場合は以下を検討してください。
親(祖先)クラスローダの設定先とアプリケーションの両方に同じクラスが設定されないようにクラスローダの設定を変更してください。
親(祖先)クラスローダの設定を変更できない場合、親(祖先)クラスローダに設定しているクラスのバージョンにあったアプリケーションの構築を検討してください。
[意味]
呼び出されたメソッドの定義がない場合にスローされます。
[原因]
Webサービスクライアントの実行で実行環境からスローされた場合、おもに以下の原因が考えられます。
javax.xml.ws.WebServiceRefアノテーションでtype要素に指定している型に誤りがあります。
[ユーザの対処]
以下の対処を行ってください。
javax.xml.ws.WebServiceRefアノテーションでtype要素に指定した型に合わせて変数の型宣言を行ってください。
[意味]
要求されたオペレーションはサポートしていません。
[原因]
サポートされないAPIを実行しました。
[ユーザの対処]
例外メッセージ、およびスタックトレースを参照し、アプリケーションが非サポートのAPIを呼び出していないか確認してください。
[意味]、[原因]、[ユーザの対処]
[意味]
RMI-IIOP通信で呼び出したサーバアプリケーションで例外が発生しました。
[原因]
サーバアプリケーションで何らかの異常が発生しています。
[ユーザの対処]
サーバアプリケーションが配備されているIJServerクラスタのサーバーログを参照し、エラー情報を確認して対処してください。
IPCOMと連携したIIOP通信の負荷分散機能を利用している場合は、負荷分散対象となるIJServerクラスタが停止していないか確認してください。
[意味]
JDBC API実行中にエラーが発生しました。
[原因]
データベースで異常が発生しました。
[ユーザの対処]
メッセージに以下の文字列が出力されている場合は、Symfowareのエラーが発生しています。Symfowareの「RDB メッセージリファレンス」を参照して対処してください。
JYPXXXXE ('X'は数字) |
メッセージに以下の文字列が出力されている場合は、Oracleのエラーが発生しています。Oracleの「エラーメッセージ」を参照して対処してください。
ORA-XXXXX ('X'は数字) |
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の場合、「文のタイムアウト」機能を使用できません。文のタイムアウトを有効にした場合、Statement、PreparedStatement、CallableStatementオブジェクトに対して、アプリケーションサーバから「setQueryTimeout」メソッドが呼び出された際に、以下のエラーメッセージが出力されます。
指定されたメソッドは当ドライバではサポートされていません |
[意味]
トランザクションはすでにロールバックされているか、ロールバックにマークされています。
[原因]
トランザクションの状態が不正なため、処理を中断しました。
[ユーザの対処]
アプリケーション実行時のトランザクションの状態を適切な状態になるように修正してください。トランザクションの状態については、「3.12.6 トランザクションの監視と凍結機能」を参照してください。
トランザクションのタイムアウトが発生した可能性があります。その場合は、以下の定義値を見直してください。
トランザクションタイムアウトの定義値
トランザクションタイムアウトに指定した値を見直してください。
トランザクションタイムアウトの定義値については、「9.8.13 トランザクションサービスの定義項目」を参照してください。
<ejb><cmt-timeout-in-seconds>タグの定義値
EJBアプリケーションのトランザクション管理種別が「Container」の場合、かつ「Interstage EJB application deployment descriptor (sun-ejb-jar.xml)」の<ejb><cmt-timeout-in-seconds>タグを定義している場合は、指定した値を見直してください。
[可変情報]
{0}:エラー原因
[意味]
使用できないJMS APIメソッドを呼び出そうとしました。
[システムの処理]
処理を中断します。
[ユーザの対処]
アプリケーションを確認してください。
QueueSessionインタフェースは、以下のメソッドを呼び出すことはできません。
unsubscribe()
createTemporaryTopic()
TopicSessionインタフェースは、以下のメソッドを呼び出すことはできません。
createSender()
createBrowser()
createTemporaryQueue()
[意味]
クライアントからのリクエストで異常を検出しました。
[ユーザの対処]
例外のメッセージに「IJMQ」で始まるメッセージIDが含まれます。メッセージ集から該当するメッセージIDを参照し、対処を実施してください。
[意味]
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タグの指定など)に誤りがあります。
例外メッセージが「{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は可変)の例外の意味を「13.59.6 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名やインタフェース名が正しいか確認してください。
例外メッセージが「{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」の場合
J2EE実行環境のIJServerで発生した場合、呼び出すEJBアプリケーションを修正し、EJB2.1以前のようにHomeインタフェース、 Remoteインタフェースを実装してください。
例外メッセージが「<JNDI名> is not found」の場合
J2EE実行環境のIJServerで発生した場合、InitialContextのコンストラクタに渡す環境プロパティが正しいか見直してください。
[意味]
javax.naming.InitialContextオブジェクトの生成に失敗しました。
[原因]
クラスパスにappserv-rt.jarが設定されていません。
java.naming.factory.initialプロパティの指定に誤りがあります。
J2EE実行環境のIJServerで発生した場合、アプリケーション固有ライブラリにappserv-rt-client.jarが設定されていません。
[ユーザの対処]
「5.12.1 環境変数の設定」を参照してクラスパスを正しく設定してください。
「5.12.2 初期コンテキスト生成時の設定」を参照して、java.naming.factory.initialプロパティに正しい値を設定してください。
J2EE実行環境のIJServerで発生した場合、J2EE実行環境のIJServerのアプリケーション固有ライブラリの設定を見直してください。
[意味]
サーバアプリケーションで例外が発生し、トランザクションをロールバックしました。
[原因]
サーバアプリケーションで何らかの異常が発生しています。
[ユーザの対処]
サーバアプリケーションが配備されている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_SYSTEMのEXECUTE権限