Tuesday, September 24, 2019

how to replace classes on server


Details to replace classes on server as :


Search for the 2 classes on server, and replace with the temp fix and restart the server.
 
e.g.
find . -name "TCRMPartyComponent.class" -print
 
/opt/IBM/WebSphere/AppServer9.0/profiles/Node01/installedEBAs/com.ibm.mdm.hub.server-MDM116Instance_11.6.0.8/byValue/87f44ab3-3768-47d9-9ad3-84609f960921.31/31/com/dwl/tcrm/coreParty/component/TCRMPartyComponent.class
 
find . -name "TCRMPrivacyPreferenceComponent.class" -print
 
/opt/IBM/WebSphere/AppServer9.0/profiles/Node01/installedEBAs/com.ibm.mdm.hub.server-MDM116Instance_11.6.0.8/byValue/87f44ab3-3768-47d9-9ad3-84609f960921.37/37/com/dwl/tcrm/businessServices/component/TCRMPrivacyPreferenceComponent.class
 
However, if you want to deploy it properly, follow these steps :

1) Log on to the WebSphere admin console
 
2) Export EBA from server
Applications -> Assets
com.ibm.mdm.hub.server.app-<appName>.eba

Select the Export button and export the EBA
 
2) Extract bundles from the exported EBA
com.ibm.mdm.server.party.<version_date_timestamp>.jar
com.ibm.mdm.server.bizservices.<version_date_timestamp>.jar
 
3) replace the 2 classes in the extracted bundles with those provided
bundle: com.ibm.mdm.server.party.<version_date_timestamp>.jar
com.dwl.tcrm.coreParty.component.TCRMPartyComponent.class
 
bundle: com.ibm.mdm.server.bizservices.<version_date_timestamp>.jar
com.dwl.tcrm.businessServices.component.TCRMPrivacyPreferenceComponent
 
4) extract META-INF/MANIFEST.MF from both bundles
update MANIFEST.MF Bundle-Version to higher value at date_timestamp
replace META-INF/MANIFEST.MF with updated copy
rename the 2 bundles with new date_timestamp
 
5) Navigate to Environment->OSGi bundle repositories->Internal bundle repository
 
6) Click New and then select the new com.ibm.mdm.server.party.<version_date_timestamp>.jar
 repeat for com.ibm.mdm.server.bizservices.<version_date_timestamp>.jar
 
7) Once the file has loaded click Review link then select "Synchronize changes with Nodes" and click Save followed by OK once the update has completed and then OK and the new bundle should be listed in the repository
 
8) Navigate to Applications->Application Types->Assets->com.ibm.mdm.hub.server.app-<appName>.eba
 
9) Click on "Update bundle versions in this application"
 
10) Change the com.ibm.mdm.server.party and the com.ibm.mdm.server.bizservices bundle versions into the versions loaded earlier and then click Preview followed by Create
 
11) Click the Review link then select "Synchronize changes with Nodes" and click Save followed by OK once the update has completed
 
12) Navigate to Applications->Application Types->Business-level applications->com.ibm.mdm.hub.server.app-<appName>.eba
 
13) Click the "Update to latest deployment..." button and hit OK
 
14) On the Blueprint resource references screen, select the Authentication Alias for datasources jdbc/DWLConfig and jdbc/DWLCustomer, and then Next then Next and Finish
 
15) Click the Review link then select "Synchronize changes with Nodes" and click Save followed by OK once the update has completed
 
16) Navigate to Servers->Server Types->WebSphere application servers
 
17) Select the server and click the Restart button


Monday, September 23, 2019

BTM ITxRx Exception

The cache could have residue from anything that are interfering with class loading, including wrong paths, different class names etc ...


Clearing the cache is something that is used to solve many issues that are not product defect. This includes your issue here. I think this case can be closed as there is no further action required here.


 

clearing WAS osgi cache is a known fix of this "Controller class loading issue"


Trace settings

 

*=info: com.dwl.*=warning: com.ibm.mdm.*=warning: com.ibm.mdm.server.config.*=info: com.ibm.mdm.common.brokers.*=info: com.ibm.mdm.mds.*=info: com.initiatesystems.*=info: com.dwl.base.report.mbean.TransactionDataListener=fine: WLM*=all: com.dwl.jmsadapter.mdb.*=info: com.dwl.base.requestHandler.*=info: com.ibm.ws.classloader.*=all

 


[9/11/19 13:20:20:978 EDT] 00001a91 TCRMCommonCom E  com.dwl.base.exception.DWLDataInvalidException: [1001 FVERR 1102 The following is required: ReferenceNumber][1009 FVERR 102 EndDate must be after StartDate]

The only error that is of a concerns is this ..

[9/10/19 13:34:19:054 EDT] 00001e58 DWLExceptionU E  java.lang.Exception: [Exception_DWLTxnBP_CannotLoadBeanController:] CDKCH2005E:The controller class cannot be loaded. Controller class = Controller Service not found for transaction: getPerson
   at com.dwl.base.requestHandler.DWLTxnBP.processInquiryObject(DWLTxnBP.java:400)
   at com.rbc.cdm.composite.compositeTxn.RbcBaseTxnBP.fireInquiryTransaction(RbcBaseTxnBP.java:192)
   at com.rbc.cdm.composite.compositeTxn.RbcBaseTxnBP.getPerson(RbcBaseTxnBP.java:300)
   at com.rbc.cdm.composite.compositeTxn.MaintainCDMPartyCompositeTxnBP.processRequest(MaintainCDMPartyCompositeTxnBP.java:697)
   at com.rbc.cdm.composite.compositeTxn.MaintainCDMPartyCompositeTxnBP.execute(MaintainCDMPartyCompositeTxnBP.java:185)
   at com.dwl.base.requestHandler.DWLTxnProcessor.processTx(DWLTxnProcessor.java:98)
   at com.dwl.unifi.tx.manager.CTxRxFacade.processTxNormal(CTxRxFacade.java:681)
   at com.dwl.unifi.tx.manager.CTxRxFacade.processTx(CTxRxFacade.java:544)
   at com.dwl.base.requestHandler.DWLRequestHandler.processTransaction(DWLRequestHandler.java:1276)
   at com.dwl.base.requestHandler.DWLRequestHandler.processTx(DWLRequestHandler.java:608)
   at com.dwl.base.requestHandler.DWLServiceControllerBase.processRequest(DWLServiceControllerBase.java:253)
   at com.dwl.base.requestHandler.beans.EJSLocal0SLDWLServiceController_2c54996d.processRequest(EJSLocal0SLDWLServiceController_2c54996d.java)
   at com.dwl.base.requestHandler.beans.EJSProxy$$MDMServiceControllerLocal.processRequest(Unknown Source)
   at com.dwl.jmsadapter.util.DWLCustomerApp.submit(DWLCustomerApp.java:149)
   at com.ibm.mdm.jmsadapter.util.MessageProcessingManager.submitRequest(MessageProcessingManager.java:127)
   at com.dwl.jmsadapter.mdb.MDBRequestReceiverBean.processMessage(MDBRequestReceiverBean.java:173)
   at com.dwl.jmsadapter.mdb.MDBRequestReceiverBean.onMessage(MDBRequestReceiverBean.java:128)
   at com.ibm.ejs.container.WASMessageEndpointHandler.invokeJMSMethod(WASMessageEndpointHandler.java:138)
   at com.ibm.ws.ejbcontainer.mdb.MessageEndpointHandler.invokeMdbMethod(MessageEndpointHandler.java:1146)
   at com.ibm.ws.ejbcontainer.mdb.MessageEndpointHandler.invoke(MessageEndpointHandler.java:844)
   at com.sun.proxy.$Proxy82.onMessage(Unknown Source)
   at com.ibm.mq.connector.inbound.MessageEndpointWrapper.onMessage(MessageEndpointWrapper.java:131)
   at com.ibm.mq.jms.MQSession$FacadeMessageListener.onMessage(MQSession.java:133)
   at com.ibm.msg.client.jms.internal.JmsSessionImpl.run(JmsSessionImpl.java:2913)
   at com.ibm.mq.jms.MQSession.run(MQSession.java:958)
   at com.ibm.mq.connector.inbound.ASFWorkImpl.doDelivery(ASFWorkImpl.java:111)
   at com.ibm.mq.connector.inbound.AbstractWorkImpl.run(AbstractWorkImpl.java:238)
   at com.ibm.ejs.j2c.work.WorkProxy$RunWork.run(WorkProxy.java:282)
   at java.security.AccessController.doPrivileged(AccessController.java:666)
   at javax.security.auth.Subject.doAs(Subject.java:490)
   at com.ibm.websphere.security.auth.WSSubject.doAs(WSSubject.java:133)
   at com.ibm.ejs.j2c.work.WorkProxy$RunWork.run(WorkProxy.java:285)
   at com.ibm.ws.security.util.AccessController.doPrivileged(AccessController.java:63)
   at com.ibm.ejs.j2c.work.WorkProxy.run(WorkProxy.java:667)
   at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1892)

Tuesday, September 17, 2019

maxRetryLimit - Check for Retry

The MDM CONFIGELEMENT setting /IBM/MessagingAdapter/Exception/maxRetryLimit controls the number of retries:

 

https://www.ibm.com/support/knowledgecenter/en/SSWSR9_11.6.0/com.ibm.mdmhs.dev.platform.doc/references/r_CMproperties.html

/IBM/MessagingAdapter/Exception/maxRetryLimit

·         Description: Determines how many times the Messaging Adapter attempts to reprocess a failed inbound request message by invoking DWLServiceController.

·         Default value3

·         Dynamic: true

·          

If you want to see it in action, you will have to turn on INFO level logging for

com.dwl.jmsadapter.mdb.MDBRequestReceiverBean class

 

as the logging code is below

 

                               

                        

 

if(currentRetryCount <= getMaxRetryLimit(manager.getControl()) && manager.shouldRetry(e)) {

                               

                        

 

if (logger.isInfoEnabled()) {

                                

                        

 

logger.info(ResourceBundleHelper.resolve(

                               

                        

 

ResourceBundleNames.MESSAGING_ADAPTER_STRINGS,

                               

                        

 

INFO_DWLJMSMessageProcessor_MessageRetry,

                               

                        

 

new Object[] {manager.getMessageId(), currentRetryCount}));

                               

                        

 

}

                                

                        

 

processMessage(manager, currentRetryCount);

                               

                        

 

}

                       

 

There are no such settings for the retry interval setting in MDM.  Updating the CONFIGELEMENT and using the retryErrorCodeList' seems like the only option within MDM.  You can most likely do it programmatically outside of MDM, for example like in the earlier article I sent you, Identifying database deadlocks and retrying transactions.  However, there is no other settings within MDM to control for the number of retries or a delay between retries.  

 

_______________________________________________________________________

If you received this email in error, please advise the sender (by return email or otherwise) immediately. You have consented to receive the attached electronically at the above-noted email address; please retain a copy of this confirmation for future reference.

Si vous recevez ce courriel par erreur, veuillez en aviser l'expéditeur immédiatement, par retour de courriel ou par un autre moyen. Vous avez accepté de recevoir le(s) document(s) ci-joint(s) par voie électronique à l'adresse courriel indiquée ci-dessus; veuillez conserver une copie de cette confirmation pour les fins de reference future.

Thursday, August 22, 2019

Error Retry on Queue

The Batch framework allows retry of errors, is there a similar setting for Queue's for FAIL transactions?

In order to see the retry in the logs we need to enable Step #1

1.       Log onto WAS Console: Goto Troubleshooting-> Logs and Trace-> Server1-> Change Log Level Detail and add the bolded text.
*=info: com.dwl.*=warning: com.ibm.mdm.*=warning: com.ibm.mdm.server.config.*=info: com.ibm.mdm.common.brokers.*=info: com.ibm.mdm.mds.*=info: com.initiatesystems.*=info: com.dwl.base.report.mbean.TransactionDataListener=fine: com.dwl.jmsadapter.mdb.*=info
  
2.       SQL
UPDATE CONFIGELEMENT SET VALUE = ' SQLCODE=-911,SQLCODE=-913,ORA-00370,ORA-02049,ORA-00060,SQLCODE=-968,SQLCODE=-803, SQLCODE=-723'
, LAST_UPDATE_DT = CURRENT_TIMESTAMP WHERE NAME = '/IBM/DWLCommonServices/ErrorHandling/retryErrorStringList';

UPDATE CONFIGELEMENT SET VALUE = '12,2037,4930, 109,10506,49359',
LAST_UPDATE_DT = CURRENT_TIMESTAMP WHERE NAME = '/IBM/DWLCommonServices/ErrorHandling/retryErrorCodeList';


Once we set the error codes the retry should work automatically, do we have a setting to enable retries? This is a CM configuration, use sql to update it. 
If I add the log statement in WAS console then this retry information will be logged in trace.log? This should appear in SystemOut.log, not sure it will appear in trace.log. 

Reference:  

/IBM/MessagingAdapter/Exception/maxRetryLimit

·         Description: Determines how many times the Messaging Adapter attempts to reprocess a failed inbound request message by invoking DWLServiceController.
·         Default value3
·         Dynamic: true
If you want to see it in action, you will have to turn on INFO level logging for
com.dwl.jmsadapter.mdb.MDBRequestReceiverBean class

as the logging code is below

                               
                        

if(currentRetryCount <= getMaxRetryLimit(manager.getControl()) && manager.shouldRetry(e)) {
                                
                        

if (logger.isInfoEnabled()) {
                               
                        

logger.info(ResourceBundleHelper.resolve(
                               
                        

ResourceBundleNames.MESSAGING_ADAPTER_STRINGS,
                               
                        

INFO_DWLJMSMessageProcessor_MessageRetry,
                               
                        

new Object[] {manager.getMessageId(), currentRetryCount}));
                                
                        

}
                               
                        

processMessage(manager, currentRetryCount);
                               
                        

}
                       

Reprocessing inbound messages in case of an error
When there is an error processing an inbound request message, Messaging Adapter can re-invoke the DWLServiceController to reprocess the request. You can define the error conditions that trigger the Messaging Adapter to re-invoke the DWLServiceController using the following properties in the Configuration and Management component:
/IBM/DWLCommonServices/ErrorHandling/retryErrorStringList
/IBM/DWLCommonServices/ErrorHandling/retryErrorCodeList

Error Retry on Queue


Here is the SQL to run for retry:

UPDATE CONFIGELEMENT SET VALUE = ' SQLCODE=-911,SQLCODE=-913,ORA-00370,ORA-02049,ORA-00060,SQLCODE=-968,SQLCODE=-803, SQLCODE=-723'
, LAST_UPDATE_DT = CURRENT_TIMESTAMP WHERE NAME = '/IBM/DWLCommonServices/ErrorHandling/retryErrorStringList';

UPDATE CONFIGELEMENT SET VALUE = '12,2037,4930, 109,10506,49359',
LAST_UPDATE_DT = CURRENT_TIMESTAMP WHERE NAME = '/IBM/DWLCommonServices/ErrorHandling/retryErrorCodeList';

Summary of error response for defects which have been configured for retry:
1:
      <DWLError>
        <ComponentType>1012</ComponentType>
        <ErrorMessage>The following is required: PersonName</ErrorMessage>
        <ErrorType>FVERR</ErrorType>
        <LanguageCode>100</LanguageCode>
        <ReasonCode>2037</ReasonCode>
        <Severity>0</Severity>
        <Throwable>com.dwl.tcrm.exception.TCRMDataInvalidException: com.dwl.base.exception.DWLDataInvalidException: [1012 FVERR 2037 The following is required: PersonName]</Throwable>
      </DWLError>
2:
                        <DWLError>
                                <ComponentType>111</ComponentType>
                                <ErrorMessage>Duplicate primary key already exists.</ErrorMessage>
                                <ErrorType>DKERR</ErrorType>
                                <LanguageCode>100</LanguageCode>
                                <ReasonCode>12</ReasonCode>
                                <Severity>0</Severity>
                                <Throwable>com.dwl.tcrm.exception.TCRMDuplicateKeyException: [Exception_Common_DuplicateKey:] CDKCS0001E:The object cannot be created due to duplicate primary key. Primary key = null; object = com.dwl.tcrm.coreParty.component.TCRMSuspectBObj; exception = DB2 SQL Error: SQLCODE=-803, SQLSTATE=23505, SQLERRMC=3;RYY4.SUSPECT, DRIVER=3.72.52</Throwable>
                        </DWLError>
3:
<DWLError>
        <ComponentType>108</ComponentType>
        <ErrorMessage>BTM ITxRxException occurred in Request and Response Framework.</ErrorMessage>
        <ErrorType>READERR</ErrorType>
        <LanguageCode>100</LanguageCode>
        <ReasonCode>4930</ReasonCode>
        <Severity>0</Severity>
        <Throwable>com.dwl.base.exception.DWLBaseException</Throwable>
      </DWLError>
4:
<DWLError>
        <ComponentType>904</ComponentType>
        <ErrorMessage>The following transaction failed: updateLobRelationship</ErrorMessage>
        <ErrorType>UPDERR</ErrorType>
        <LanguageCode>100</LanguageCode>
        <ReasonCode>10506</ReasonCode>
        <Severity>0</Severity>
        <Throwable>com.ibm.pdq.runtime.exception.DataRuntimeException: [pdq][10103][3.200.75] An error prevented the update operation from completing successfully.;  Caused by: com.ibm.db2.jcc.am.SqlException: DB2 SQL Error: SQLCODE=-723, SQLSTATE=09000, SQLERRMC=RYY4.U_LEBREL;-803;23505;1|RYY4.H_LOBREL, DRIVER=3.72.52</Throwable>
      </DWLError>

5:
<DWLError>
                                                                <ComponentType>99</ComponentType>
                                                                <ErrorMessage>[Exception_Shared_LastUpdateDtNotMatched:] CDKCH2001E:Another transaction has updated the database record you are trying to update. Cannot update record at this time, please try again.</ErrorMessage>
                                                                <ErrorType>UPDERR</ErrorType>
                                                                <LanguageCode>100</LanguageCode>
                                                                <ReasonCode>109</ReasonCode>
                                                                <Severity>0</Severity>
                                                                <Throwable>java.lang.RuntimeException: com.dwl.base.exception.LastUpdateDateException: class com.dwl.tcrm.businessServices.entityObject.EObjLobRelationship | 879956570600676001</Throwable>
                                                </DWLError>
6:
<DWLError>
                                                                <ComponentType>4405</ComponentType>
                                                                <ErrorMessage>Suspect search adapter execution failed.</ErrorMessage>
                                                                <ErrorType>DIERR</ErrorType>
                                                                <LanguageCode>100</LanguageCode>
                                                                <ReasonCode>49359</ReasonCode>
                                                                <Severity>0</Severity>
                                                                <Throwable>java.lang.NullPointerException</Throwable>
                                                </DWLError>


Trace log Setup instructions


Please follow the steps below:
      1.  Log in to WAS console
      2.  Goto Troubleshooting -> Logs and Trace -> server1
3.  Set the file size to 20 MB and number of historical files to 20