對 RAR 模組中的 Bean 驗證進行疑難排解

未能通過驗證的 RAR Bean 不會投入服務行列。發生限制違規時,根據 Bean 類型和 RAR 部署方式而定,應用程式會發生不同的資源連線問題。本主題說明如何瞭解、處理和防止這些已知問題。

RAR Bean 限制違規

當 WebSphere® Application Server 驗證的 RAR Bean 實例違反一或多個限制時,它會顯示限制違規異常狀況,並在系統日誌中報告所有限制違規。 必須找出並解決所有限制違規的原因,才能完全恢復受影響資源的連線功能。

判斷問題時,首先要查閱 RAR 提供者文件,找出違規中所指出的配置內容的有效值。 如果內容值無效,您必須根據文件來重新配置它們,然後重新啟動資源配接器。 如果配接器內嵌在應用程式中,請經由重新啟動應用程式來重新啟動配接器;如果配接器是獨立式,請重新啟動應用程式伺服器。

如果違規中指出有效的配置內容值,則表示可能未正確指定 Bean 的限制,或 Bean 未正確計算內容值。 在這些情況下,必須由 RAR 供應商解決問題。

如果問題起因於有缺陷的限制定義(實作),則必須由 Bean 驗證提供者解決問題。 在這些情況下,如果 RAR 是由 IBM® 提供,或 RAR 使用 Application Server 所提供的 Bean 驗證實作,請聯絡 IBM 支援中心來繼續判斷問題。

ResourceAdapter Bean

伺服器啟動 Java™ 2 Connect (J2C) 資源配接器時,將會驗證 ResourceAdapter Bean。 驗證失敗時,伺服器會拒絕 ResourceAdapter 實例,產生的限制違規會造成 J2C 資源配接器失敗。 應用程式無法對該資源建立出埠連線,該資源也無法將訊息遞送到應用程式。 如果是內嵌的配接器,內含該配接器的應用程式無法啟動。 涉及該資源的不確定交易無法回復。

下列範例是一個位於資料堆位址 7efa7efa 的 ResourceAdapter Bean:MyConnector。 違反兩個驗證限制。限制違規異常狀況造成 J2CResourceAdapter_1285109360562 失敗:
[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='The minimum size is 2', propertyPath=dataBaseName, rootBeanClass=class 
    com.my.company.adapter.MyConnector, messageTemplate='The minimum size is 2'}
	ConstraintViolationImpl{interpolatedMessage='must be greater than or equal to 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: An Exception occurred while trying to start ResourceAdapter
  cells/IBM-46DF84D297BNode01Cell/nodes/IBM-46DF84D297BNode01/resources.xml#J2CResourceAdapter_1285109360562. The exception is: 
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

在 J2C Connection Factory 的起始 Java 命名和目錄介面 (JNDI) 查閱期間會驗證 ManagedConnectionFactory JavaBeans。

驗證失敗時,Application Server 會拒絕 ManagedConnectionFactory 實例,並向執行查閱的應用程式顯示命名異常狀況。 此異常狀況指出原肇始的限制違規異常狀況 (javax.validation.ConstraintValidationException)。

應用程式無法對該資源建立出埠連線。 在由 Connection Factory 所建立的連線上對該資源啟動的不確定交易無法回復。

下列範例是一個位於資料堆位址 7dd07dd0 的 ManagedConnectionFactory Bean:MyMcf。 違反兩個驗證限制。限制違規異常狀況造成應用程式無法取得所需的 Connection Factory 來對資源 MyConnector 建立連線:
[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='must be less than or equal to 30', propertyPath=mcfProperty2,
    rootBeanClass=class com.my.company.adapter.MyMcf, messageTemplate='{javax.validation.constraints.Max.message}'}
	ConstraintViolationImpl{interpolatedMessage='The value should be greater than 10', propertyPath=mcfProperty4,
    rootBeanClass=class com.my.company.adapter.MyMcf, messageTemplate='The value should be greater than 10'}
….
[9/30/10 7:58:58:765 CDT] 00000023 ConnectionFac E  
 J2CA0009E: An exception occurred while trying to instantiate the ManagedConnectionFactory class com.my.company.adapter.MyMcf
  used by resource j2c/MyConnector : 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 資源配接器已啟動,應用程式仍然可以對資源建立連線。 該資源可以將訊息遞送至已成功啟動的端點。如果啟動規格定義在內嵌的資源配接器內,則在停止應用程式的過程中,伺服器會停止配接器。 由包含啟動規格的前一個資源配接器實例所遞送的失敗交易式訊息無法回復。

下列範例是一個位於資料堆位址 51625162 的 ActivationSpec Bean:MyActSpec。違反兩個驗證限制。日誌顯示造成應用程式 my_company_app 失敗的限制違規異常狀況:
[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='Size should be between 2 and 4', propertyPath=asProperty1,
    rootBeanClass=class com.my.company.adapter.MyActSpec, messageTemplate='Size should be between 2 and 4'}
	ConstraintViolationImpl{interpolatedMessage='Should be < 30', propertyPath=asProperty2,
    rootBeanClass=class com.my.company.adapter.MyActSpec, messageTemplate='Should be < 30'}
[9/29/10 10:52:05:171 CDT] 00000009 RAWrapperImpl E  
 J2CA0089E: The method activateEndpoint on ResourceAdapter JavaBean
   cells/IBM-46DF84D297BNode01Cell/nodes/IBM-46DF84D297BNode01/resources.xml#J2CResourceAdapter_1285109389828
 failed with the following exception:
  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: Stopping application: my_company_app
. . .

AdministeredObject Bean

伺服器啟動的 J2C 資源配接器在其配置中包含受管理的物件時,將會驗證 AdministeredObject Bean。 驗證失敗時,伺服器會拒絕 AdministeredObject 實例,產生的限制違規會造成資源配接器失敗。

下列範例是一個位於資料堆位址 3a803a80 的 AdministeredObject Bean:MyAdminObj。違反兩個驗證限制。日誌顯示造成資源配接器失敗的限制違規異常狀況:
[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='The value should be greater than 10', propertyPath=aoProperty4,
  rootBeanClass=class com.my.company.adapter.MyAdminObj, messageTemplate='The value should be greater than 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(
. . . 

指出主題類型的圖示 參照主題



時間戳記圖示 前次更新: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rdat_rarbeanval
檔名:rdat_rarbeanval.html