RAR モジュールにおける Bean Validation のトラブルシューティング
検証に失敗した RAR Bean は使用されません。 制約違反が発生すると、リソース接続性の問題がアプリケーションで発生します。発生する問題は、Bean タイプ、および RAR のデプロイ方法に応じて異なります。 このトピックでは、これらの既知の問題をどのように理解し、処理し、回避するかについて説明します。
RAR Bean 制約違反
WebSphere® Application Server は、1 つ 以上の制約に違反する RAR Bean インスタンスの検証時に、 制約違反例外を表示し、すべての制約違反をシステム・ログに報告します。 影響を受けたリソースへの完全な接続を復元するためには、すべての制約違反の原因を判別し、解決する必要があります。
問題判別では、最初に RAR プロバイダーの資料を参照し、違反で指摘された構成プロパティーの有効値を調べます。 プロパティー値が無効な場合、この資料に従って値を再構成し、リソース・アダプターを再始動する必要があります。 このアダプターがアプリケーションに組み込まれている場合には、アプリケーションを再始動してアダプターを再始動してください。アダプターがスタンドアロンである場合には、アプリケーション・サーバーを再始動してください。
違反報告で有効な構成プロパティー値が示されている場合には、Bean に対する制約が誤って指定されているか、Bean がプロパティー値を誤って計算しています。 このような場合には、RAR ベンダーが問題を修正する必要があります。
問題の原因が、欠陥のある制約定義 (実装) である場合には、Bean Validation プロバイダーが問題を修正する必要があります。 このような場合、RAR が IBM® によって提供されているか、 あるいは、RAR が Application Server によって提供された Bean 検証の実装を使用する 場合は、IBM サポートに連絡して問題判別を続行してください。
ResourceAdapter Bean
ResourceAdapter Bean の 検証は、サーバーでの Java™ 2 Connector (J2C) リソース・アダプターの開始時に行われます。検証に失敗したときには、サーバーは ResourceAdapter インスタンスを拒否し、それによって発生する制約違反例外によって J2C リソース・アダプターが失敗します。アプリケーションはリソースへのアウトバウンド接続を確立することができず、リソースはアプリケーションにメッセージを送信することができません。 組み込みアダプターの場合、アダプターを組み込むアプリケーションを開始できません。 このリソースに関連する未確定トランザクションはリカバリーできません。
[9/29/10 10:51:24:125 CDT] 00000000 BeanValidatio E
J2CA0238E: JavaBean com.my.company.adapter.MyConnector@7efa7efa failed Bean Validation due to one or more invalid
configuration settings indicated in the following list of constraint violations:
ConstraintViolationImpl{interpolatedMessage='最小サイズは 2 です', propertyPath=dataBaseName, rootBeanClass=class com.my.company.adapter.MyConnector, messageTemplate='最小サイズは 2 です'}
ConstraintViolationImpl{interpolatedMessage='10 以上でなければなりません', propertyPath=idleTimeout, rootBeanClass=class com.my.company.adapter.MyConnector, messageTemplate='{javax.validation.constraints.Min.message}'}
…
[9/29/10 10:51:24:468 CDT] 00000000 RALifeCycleMa E J2CA0128E: ResourceAdapter cells/IBM-46DF84D297BNode01Cell/nodes/IBM-46DF84D297BNode01/resources.xml#J2CResourceAdapter_1285109360562 を開始しようとしたときに例外が発生しました。例外は、以下のとおりです:
com.ibm.ejs.j2c.metadata.ConstraintViolationException
at com.ibm.ejs.j2c.metadata.BeanValidationHelper.validate(
at com.ibm.ejs.j2c.RAWrapperImpl.createAndConfigureRA(
at com.ibm.ejs.j2c.RAWrapperImpl.startRA(
at com.ibm.ejs.j2c.RALifeCycleManagerImpl.startRA(
at com.ibm.ejs.j2c.RALifeCycleManagerImpl.resourceProviderEvent(
. . .
ManagedConnectionFactory Bean
ManagedConnectionFactory JavaBeans の 検証は、J2C 接続ファクトリーの初期の Java Naming and Directory Interface (JNDI) 検索時に行われます。
検証が失敗すると、Application Server は、ManagedConnectionFactory インスタンスを拒否し、検索を実行するアプリケーションに対してネーミング例外を表示します。この例外は、原因となる制約違反例外 (javax.validation.ConstraintValidationException) を示します。
アプリケーションはリソースへのアウトバウンド接続を確立できません。 接続ファクトリーによって作成されたリソースへの接続を介して開始された未確定トランザクションは、リカバリーできません。
[9/30/10 7:58:58:734 CDT] 00000023 BeanValidatio E
J2CA0238E: JavaBean com.my.company.adapter.MyMcf@7dd07dd0 failed Bean Validation due to one or more invalid
configuration settings indicated in the following list of constraint violations:
ConstraintViolationImpl{interpolatedMessage='30 以下でなければなりません', propertyPath=mcfProperty2, rootBeanClass=class com.my.company.adapter.MyMcf, messageTemplate='{javax.validation.constraints.Max.message}'}
ConstraintViolationImpl{interpolatedMessage='値は 10 より大きくなければなりません', propertyPath=mcfProperty4, rootBeanClass=class com.my.company.adapter.MyMcf, messageTemplate='値は 10 より大きくなければなりません'}
….
[9/30/10 7:58:58:765 CDT] 00000023 ConnectionFac E J2CA0009E: リソース j2c/MyConnector が使用する ManagedConnectionFactory クラス com.my.company.adapter.MyMcf をインスタンス化しようとしたときに例外が発生しました : com.ibm.ejs.j2c.metadata.ConstraintViolationException
at com.ibm.ejs.j2c.metadata.BeanValidationHelper.validate(
at com.ibm.ejs.j2c.ServerFunction.validate(
at com.ibm.ejs.j2c.J2CUtilityClass.createMCFEntry(
…
at javax.naming.InitialContext.lookup(
at com.my.company.app.MyEjbImpl.testJbv(
. . .
ActivationSpec Bean 制約違反
ActivationSpec Bean は、アプリケーションの開始時に検証されます。 これは、Application Server が、J2C アクティベーション・スペックにバインドされているメッセージ・エンドポイントを最初に活動化するときです。これらのアクティベーション・スペックは、構成内で Bean クラスの名前を指定します。 検証が失敗すると、エンドポイントを活動化できず、それによって発生する制約違反例外によって、エンドポイントをホストしているアプリケーションが失敗します。
アクティベーション・スペックを含む J2C リソース・アダプターが開始されるため、アプリケーションは引き続きリソースへの接続を確立できます。 リソースは、正常に活動化されたエンドポイントにメッセージを送信することができます。 アクティベーション・スペックが組み込みリソース・アダプター内で定義されている場合、サーバーは、アプリケーションを停止させる過程でアダプターを停止させます。 アクティベーション・スペックを含むリソース・アダプターの以前のインスタンスによって送信された、失敗したトランザクション・メッセージはリカバリーできません。
[9/29/10 10:52:05:125 CDT] 00000009 BeanValidatio E
J2CA0238E: JavaBean com.my.company.adapter.MyActSpec@51625162 failed Bean Validation due to one or more invalid
configuration settings indicated in the following list of constraint violations:
ConstraintViolationImpl{interpolatedMessage='サイズは 2 から 4 まででなければなりません', propertyPath=asProperty1, rootBeanClass=class com.my.company.adapter.MyActSpec, messageTemplate='サイズは 2 から 4 まででなければなりません'}
ConstraintViolationImpl{interpolatedMessage='30 未満でなければなりません', propertyPath=asProperty2, rootBeanClass=class com.my.company.adapter.MyActSpec, messageTemplate='30 未満でなければなりません'}
[9/29/10 10:52:05:171 CDT] 00000009 RAWrapperImpl E J2CA0089E: ResourceAdapter JavaBean cells/IBM-46DF84D297BNode01Cell/nodes/IBM-46DF84D297BNode01/resources.xml#J2CResourceAdapter_1285109389828 でメソッド activateEndpoint が失敗し、以下の例外が出されました: javax.resource.ResourceException: com.ibm.ejs.j2c.metadata.ConstraintViolationException
at com.ibm.ejs.j2c.ActivationSpecWrapperImpl.validateActivation…( at com.ibm.ejs.j2c.ActivationSpecWrapperImpl.createAndInitializ…(
at com.ibm.ejs.j2c.ActivationSpecWrapperImpl.activateEndpoint(
…
[9/29/10 10:52:05:750 CDT] 00000009 ApplicationMg A WSVR0217I: アプリケーションの停止中: my_company_app
. . .
AdministeredObject Bean
AdministeredObject Bean は、構成内に管理対象オブジェクトを含む J2C リソース・アダプターをサーバーが開始したときに検証されます。 検証に失敗したときには、サーバーは AdministeredObject インスタンスを拒否し、それによって発生する制約違反例外によってリソース・アダプターが失敗します。
[9/29/10 10:51:25:125 CDT] 00000000 BeanValidatio E
J2CA0238E: JavaBean com.my.company.adapter.MyAdminObj@3a803a80 failed Bean Validation due to one or more invalid
configuration settings indicated in the following list of constraint violations:
ConstraintViolationImpl{interpolatedMessage='値は 10 より大きくなければなりません', propertyPath=aoProperty4, rootBeanClass=class com.my.company.adapter.MyAdminObj, messageTemplate='値は 10 より大きくなければなりません'}
…
[9/29/10 10:51:25:218 CDT] 00000000 AdminObjectSe A
J2CA0017I: An exception occurred while building the serializable for JNDI deployment of jms/MyAdminObj :
com.ibm.ejs.j2c.metadata.ConstraintViolationException
at com.ibm.ejs.j2c.metadata.BeanValidationHelper.validate(
at com.ibm.ejs.j2c.metadata.BeanValidationHelper.validate(
at com.ibm.ejs.j2c.AdminObjectSerBuilderImpl._createAndValidate…(
at com.ibm.ejs.j2c.AdminObjectSerBuilderImpl.createAndValidate…(
at com.ibm.ejs.j2c.RALifeCycleManagerImpl.startRA(
. . .