はじめに

この章は、EJBコンテナで送出する例外のメッセージと対処方法について説明します。

 
java.rmi.RemoteException
・ERROR: Attempt to invoke on undeployed object
このEnterprise Beanが削除された後にクライアントがそのメソッドを呼び出そうとした。
・Client not authorized for this invocation.
このメソッド呼び出しが許可されないクライアントから呼び出しを行おうとした。
例外が出ないようにするためには、クライアントのロールをメソッド・パーミッションに含まれているものに設定するか、Enterprise Beanのメソッド・パーミッションの設定を変更してください。
・Transaction Attribute not found for method [メソッド名]
不明なトランザクション属性が、指示されたEnterprise Beanのメソッドに与えられている。
通常、この例外は発生しません。
・EJB cannot be invoked in global transaction
トランザクション属性がNEVERであるメソッドを処理中に、グローバル・トランザクションで呼び出された。
・ERROR: No database resource reference for EntityBeans with container-managed persistence
コンテナ管理による永続化のEntity Beanで、永続化のためのデータ保存をするデータベース情報が見つからなかった。
配備ツールまたはEJBコンテナの設定プロパティファイルで、データベース情報の設定を行って下さい。
・Error obtaining CMP/primary key fields
コンテナ管理による永続化のEntity Beanで、プライマリ・キーのフィールドが得られなかった。
配備ツールで、プライマリ・キーのフィールドが正しく設定されていない可能性があります。
・ERROR initializing EJB field [フィールド名]
コンテナ管理による永続化のEntity Beanで、定義されたフィールドの値を初期化できなかった。
配備ツールで、プライマリ・キーのフィールドの型宣言がサポート外であった可能性があります。
・Unable to initialize primary key
コンテナ管理による永続化のEntity Beanで、プライマリ・キー クラスの生成ができなかった。
配備ツールで、プライマリ・キー クラスの定義が不完全であった可能性があります。
・ERROR in database SELECT [例外名]
コンテナ管理による永続化のEntity Beanで、コンテナがejbLoadメソッド処理中にデータベースへのアクセスに失敗した。
配備ツールで設定したejbLoadメソッドに対するSQL文に誤りがあった可能性があります。
・ERROR in database UPDATE [例外名]
コンテナ管理による永続化のEntity Beanで、コンテナがejbStoreメソッド処理中にデータベースへのアクセスに失敗した。
配備ツールで設定したejbStoreメソッドに対するSQL文に誤りがあった可能性があります。
・ERROR in database DELETE [例外名]
コンテナ管理による永続化のEntity Beanで、コンテナがejbRemoveメソッド処理中にデータベースへのアクセスに失敗した。
配備ツールで設定したejbRemoveメソッドに対するSQL文に誤りがあった可能性があります。
・No SQL statement for [メソッド名]
コンテナ管理による永続化のEntity Beanで、コンテナがejbFindxxxメソッド処理中にデータベースへのアクセスに失敗した。
配備ツールで設定したejbFindxxxメソッドに対するSQL文に誤りがあった可能性があります。
・Error deserializing primaryKey.
Entity Beanのプライマリキーのデシリアライズに失敗しました。プライマリキーのクラスがSerializableかどうか確認して下さい。
・EJB is already executing another request
Entity Beanで、Enterprise Beanの状態が呼び出し中で、リエントラント設定が行われていない場合に呼び出された。
・Null primary key returned by [ejbCreate | ejbFind] method
Entity Beanで、プライマリ・キーが見つからなかった。
・Error during [ejbLoad | ejbStore], EJB instance discarded
Entity Beanで、ejbLoad()、ejbStore()メソッドの処理中にエラーが発生した。このEnterprise Beanインスタンスは破棄されます。
・Exception creating EJBObject:
Entity Beanで、リモート・インタフェースのインスタンス生成で例外が発生した。
・Could not create Entity EJB
Entity Beanで、Beanインスタンス生成ができなかった。
・Error during ejbActivate
Entity Beanで、ejbActivate()メソッド処理中にエラーが発生した。
・Unable to get EJBObject:
HandleクラスのgetEJBObject()メソッド呼び出しで、EJBObjectクラスのオブジェクト参照取得ができなかった。
・Unable to get EJBHome:
HomeHandleクラスのgetEJBHome()メソッド呼び出しで、EJBHomeクラスのオブジェクト参照取得ができなかった。
・SessionBean is executing another request
ステートフルSession Beanで、実行中に他のクライアントから呼び出し要求があった。
Session Beanインスタンスは、複数のクライアントと共有できません。
・Error during [afterBegin | beforeCompletion], EJB instance discarded
ステートフルSession Beanで、SessionSynchronizationクラスのafterBegin()、beforeCompletion()メソッド呼出し中にエラーが発生した。このEnterprise Beanインスタンスは破棄されます。
・Unable to activate EJB
ステートフルSession Beanで、非活性化状態にあったEnterprise Beanを活性化できなかった。
・Invalid operation for Session EJBs.
Session Beanで、許可されないgetPrimaryKey()メソッドを呼び出しました。
Beanの処理内容を確認してください。
・ERROR creating EJB:
ステートレスSession Beanで、Beanインスタンスの生成ができなかった。
 
java.lang.RuntimeException
・No SQL statement for method [メソッド名]
コンテナ管理による永続化のEntity Beanで、そのメソッドに対するSQL文が設定されていない。
配備ツールで、そのメソッドにSQL文を定義して下さい。
・Bad SQL query for method [メソッド名]
コンテナ管理による永続化のEntity Beanで、そのメソッドに対するSQL文が誤っている。
配備ツールで、そのメソッドにSQL文を正して下さい。
・Bad parameter number [パラメータ数] in SQL query for method [メソッド名]
コンテナ管理による永続化のEntity Beanで、そのメソッドに対するSQL文のパラメータが誤っている。
配備ツールで、そのメソッドにSQL文を正して下さい。
・More than one row returned by SQL query for single-object finder [メソッド名]
コンテナ管理による永続化のEntity Beanで、その単一オブジェクトを返すファインダ・メソッドに対する返却数が複数定義されていた。
・Invalid return type for finder
コンテナ管理による永続化のEntity Beanで、ファインダ・メソッドに対する返却値の型が無効で定義されていた。
・Unable to serialize container-managed field. [例外名]
コンテナ管理による永続化のEntity Beanで、フィールドの型がシリアライズ可能でなかった。
配備ツールで設定したコンテナが管理するフィールドがJavaのシリアライズ可能な型であるかを確認して下さい。
・Unsupported JDBC type: [型名]
コンテナ管理による永続化のEntity Beanで、永続化のために定義した型が、JDBCの有効な型でなかった。
配備ツールで設定したコンテナが管理するフィールドの型がJDBCで有効なものであるかを確認して下さい。
・Field not accessible: [例外名]
コンテナ管理による永続化のEntity Beanで、永続化のために定義したフィールドにアクセスできなかった。
・getCallerIdentity is deprecated in EJB1.1
EJBContextクラスのgetCallerIdentity()メソッドを呼び出すと、この例外が送出されます。
EJB 1.1では、このメソッドをサポートしません。
 
java.lang.ClassCastException
・narrowFrom is not supported narrowTo
PortableRemoteObject.narrowメソッドで引数に指定したオブジェクトのクラスがnarrowするクラスにキャストできない場合や、オブジェクトがリモートオブジェクトのとき、そのスタブのクラスがクラスパスに存在しない場合に、この例外が送出されます。
 
javax.ejb.CreateException
・ERROR in database INSERT [例外名]
コンテナ管理による永続化のEntity Beanで、createメソッド処理中にデータベースへのアクセスに失敗した。
配備ツールで設定したejbCreateメソッドに対するSQL文に誤りがあった可能性があります。
・ERROR creating stateful SessionBean: [例外名]
ステートフルSession Beanの生成中にエラーが発生した。
・Could not create stateless EJB
ステートレスSession Beanの生成ができなかった。
 
javax.ejb.FinderException
・ERROR in database SELECT for find: [例外名]
コンテナ管理による永続化のEntity Beanで、findxxxメソッド処理中にデータベースへのアクセスに失敗した。
配備ツールで設定したejbFindxxxメソッドに対するSQL文に誤りがあった可能性があります。
 
javax.ejb.DuplicateKeyException
・Duplicate primary key
コンテナ管理による永続化のEntity Beanで、ejbFindByPrimaryKeyメソッド処理中にデータベースへのアクセスで、重複したプライマリ・キーでアクセスしようとした。
 
javax.ejb.NoSuchEntityException
・ERROR in SQL SELECT: No database row for EJB
コンテナ管理による永続化のEntity Beanで、ejbFindByPrimaryKeyメソッド処理中にデータベースへのアクセスで、存在しないレコードにアクセスしようとした。
・Exception thrown by [ejbLoad | ejbStore], EJB instance discarded
Entity Beanで、ejbLoad()、ejbStore()メソッド呼び出しで例外が発生した。このEnterprise Beanインスタンスは破棄されます。
・The EJB does not exist.
ステートフルSession Beanで、存在しないEnterpise Beanを呼び出そうとした。
 
javax.ejb.ObjectNotFoundException
・No database row found for primary key
コンテナ管理による永続化のEntity Beanで、ejbFindByPrimaryKeyメソッド処理中にデータベースへのアクセスで、存在しないプライマリ・キーのレコードにアクセスしようとした。
・"No database row found for finder [メソッド名]
コンテナ管理による永続化のEntity Beanで、プライマリ・キーが未定義であった。
 
javax.ejb.RemoveException
・Cannot remove EJB: transaction in progress
ステートフルSession Beanで、トランザクション中にremove()メソッドが呼び出された。
・Invalid remove operation.
Session Beanで、許可されないremove(Primarikey)メソッドを呼び出しました。
Session Beanはプライマリ・キーを持たないので、このメソッド呼び出しはできません。
 
java.sql.SQLException
・Operation not supported
DataSourceが実行しようとしたオペレーションをサポートしていません。DataSourceを使用している個所の処理内容を確認してください。
・This DataSource object can only be used by J2EE components or application clients.
J2EEコンポーネント以外のアプリケーションがデータソースを使用しようとしました。
 
java.lang.IllegalStateException
・ERROR: only SessionBeans with bean-managed transactions can obtain UserTransaction
Enterprise Beanが、Beanが管理するトランザクションのSession Bean以外が、UserTransactionオブジェクトを取得しようとした。
・EJBObject not available
EJBContextクラスのgetEJBObject()メソッド呼び出しで、サーバ内で起動されていないリモート・インタフェースのクラスを取得しようとした。
・EJB not in READY state
EJBContextクラスのgetCallerPrincipal()または、isCallerInRole(String)、setRollbackOnly()、getRollbackOnly()メソッド呼び出しで、Enterprise Beanがサーバ内で準備状態ではなかった。
・Operation not allowed
EJBContextクラスのgetUserTransaction()メソッド呼び出しで、Enterprise Beanがサーバ内で準備状態ではなかった。
または、ejbActivate()やejbPassivate()メソッドからEJB仕様上、呼び出してはならないメソッドが呼び出された。
・Illegal operation for bean-managed transactions
EJBContextクラスのsetRollbackOnly()、getRollbackOnly()メソッド呼び出しで、Bean管理のトランザクションを持つEnterprise Beanであった。
・No transaction context.
EJBContextクラスのsetRollbackOnly()、getRollbackOnly()メソッド呼び出しで、トランザクション・コンテキストが既に無い状態で呼び出された。
・Primary key not available
EntityContextクラスのgetPrimaryKey()メソッド呼び出しで、リモート・オブジェクトが準備状態でない時に呼び出された。
ejbCreate、ejbFind、setEntityContextからは呼び出せません。
 
java.lang.IllegalArgumentException
・EJB not in READY state
EJBContextクラスのisCallerInRole(String)メソッド呼び出しで、引数が与えられなかった。
・No mapping available for role reference [ロール名]
EJBContextクラスのisCallerInRole(String)メソッド呼び出しで、指定されたロールがEnterprise Beanに設定されていない。
配備ツールでそのロールを設定したかを確認して下さい。