APAR status
Closed as program error.
Error description
IBM MQ: JAVA.LANG.STACKOVERFLOWERROR caused by recursive function calls inside SessionWrapper. This is due to the adding of SessionWrapper.toString(), which calls SessionWrapper.dump(), as dump() calls dump() on consumer and producer objects, which in turn calls String.valueOf() on the SessionWrapper, which underneath just calls SessionWrapper.toString()? which starts the loop all over again. This was identified when trace was enabled, which was calling into SessionWrapper.toString() when generating a trace entry point. However, it may not always be the case that this behaviour is generated by trace, as toString() could be called from anywhere. It could also be triggered by the calling of the SessionWrapper.dump() function. at java.lang.String.valueOf(String.java:3467) at com.ibm.mq.connector.outbound.MessageConsumerWrapper.dump(Messag eConsumerWrapper.java:414) at com.ibm.mq.connector.outbound.SessionWrapper.dump(SessionWrapper .java:1293) at com.ibm.mq.connector.outbound.SessionWrapper.toString(SessionWra pper.java:1326) . For example: . J2CA0081E: Method cleanup failed while trying to execute method cleanup on ManagedConnection com.ibm.mq.connector.outbound.ManagedTopicConnectionImpl@38299ce 7 from resource jms/mqHub. Caught exception: com.ibm.msg.client.commonservices.CSIException: JMSCS0006: An internal problem occurred. Diagnostic information for service was written to 'null'. Please terminate the application as the product is in an inconsistent internal state. at com.ibm.msg.client.commonservices.trace.Trace.ffst(Trace.java:18 01) at com.ibm.msg.client.commonservices.trace.Trace.methodEntryInterna l(Trace.java:822) at com.ibm.msg.client.commonservices.trace.Trace.entry(Trace.java:7 45) at com.ibm.mq.connector.outbound.ConnectionWrapper.releaseSession(C onnectionWrapper.java:582) at com.ibm.mq.connector.outbound.SessionWrapper.close(SessionWrappe r.java:391) at com.ibm.mq.connector.outbound.ConnectionWrapper.close(Connection Wrapper.java:467) at com.ibm.mq.connector.outbound.ManagedConnectionImpl.cleanup(Mana gedConnectionImpl.java:507) at com.ibm.ejs.j2c.MCWrapper.cleanup(MCWrapper.java:1547) at com.ibm.ejs.j2c.FreePool.returnToFreePoolDelegated(FreePool.java :292) at com.ibm.ejs.j2c.FreePool.returnToFreePool(FreePool.java:279) at com.ibm.ejs.j2c.PoolManager.release(PoolManager.java:928) at com.ibm.ejs.j2c.MCWrapper.releaseToPoolManager(MCWrapper.java:21 33) at com.ibm.ejs.j2c.LocalTransactionWrapper.afterCompletion(LocalTra nsactionWrapper.java:958) ... ... Caused by: java.lang.StackOverflowError at java.util.regex.Pattern$Curly.match(Pattern.java:4252) at java.util.regex.Pattern$GroupHead.match(Pattern.java:4683) at java.util.regex.Pattern$Branch.match(Pattern.java:4629) at java.util.regex.Pattern$BranchConn.match(Pattern.java:4593) at java.util.regex.Pattern$GroupTail.match(Pattern.java:4742) at java.util.regex.Pattern$Curly.match0(Pattern.java:4304) at java.util.regex.Pattern$Curly.match(Pattern.java:4259) at java.util.regex.Pattern$GroupHead.match(Pattern.java:4683) at java.util.regex.Pattern$Branch.match(Pattern.java:4629) at java.util.regex.Pattern$Branch.match(Pattern.java:4627) at java.util.regex.Pattern$BmpCharProperty.match(Pattern.java:3823) at java.util.regex.Pattern$Start.match(Pattern.java:3486) at java.util.regex.Matcher.search(Matcher.java:1259) at java.util.regex.Matcher.find(Matcher.java:675) at java.util.Formatter.parse(Formatter.java:2560) at java.util.Formatter.format(Formatter.java:2512) at java.io.PrintWriter.format(PrintWriter.java:915) at com.ibm.mq.connector.outbound.SessionWrapper.dump(SessionWrapper .java:1278) at com.ibm.mq.connector.outbound.SessionWrapper.toString(SessionWra pper.java:1326) at java.lang.String.valueOf(String.java:3467) at com.ibm.mq.connector.outbound.MessageConsumerWrapper.dump(Messag eConsumerWrapper.java:414) at com.ibm.mq.connector.outbound.SessionWrapper.dump(SessionWrapper .java:1293) at com.ibm.mq.connector.outbound.SessionWrapper.toString(SessionWra pper.java:1326) ... ... at java.lang.String.valueOf(String.java:3467) at com.ibm.mq.connector.outbound.MessageConsumerWrapper.dump(Messag eConsumerWrapper.java:414) at com.ibm.mq.connector.outbound.SessionWrapper.dump(SessionWrapper .java:1293) at com.ibm.mq.connector.outbound.SessionWrapper.toString(SessionWra pper.java:1326) at java.text.MessageFormat.subformat(MessageFormat.java:1291) at java.text.MessageFormat.format(MessageFormat.java:876) at java.text.Format.format(Format.java:168) at java.text.MessageFormat.format(MessageFormat.java:852) at com.ibm.ws.logging.internal.impl.BaseTraceFormatter.formatMessag e(BaseTraceFormatter.java:301) at com.ibm.ws.logging.internal.impl.BaseTraceFormatter.formatVerbos eMessage(BaseTraceFormatter.java:373) at com.ibm.ws.logging.internal.impl.BaseTraceService.publishTraceLo gRecord(BaseTraceService.java:1074) at com.ibm.ws.logging.internal.impl.BaseTraceService.publishLogReco rd(BaseTraceService.java:1045) at com.ibm.ws.logging.internal.impl.BaseTraceService$2.publish(Base TraceService.java:287) at java.util.logging.Logger.log(Logger.java:749) at com.ibm.ws.logging.internal.WsLogger.log(WsLogger.java:138) at com.ibm.ws.logging.internal.WsLogger.logp(WsLogger.java:336) at com.ibm.ws.logging.internal.WsLogger.entering(WsLogger.java:443) at com.ibm.ws.wmqcsi.trace.TraceImpl.methodEntry(TraceImpl.java:259 ) at com.ibm.msg.client.commonservices.trace.Trace.methodEntryInterna l(Trace.java:810) ... 37 more
Local fix
Disable the MQ JMS/Java trace.
Problem summary
**************************************************************** USERS AFFECTED: Users of the MQ Resource Adapter in an outbound connection configuration. Platforms affected: MultiPlatform **************************************************************** PROBLEM DESCRIPTION: IBM MQ: JAVA.LANG.STACKOVERFLOWERROR caused by recursive function calls inside SessionWrapper. This is due to the adding of SessionWrapper.toString(), which calls SessionWrapper.dump(), as dump() calls dump() on consumer and producer objects, which in turn calls String.valueOf() on the SessionWrapper, which underneath just calls SessionWrapper.toString()? which starts the loop all over again. This was identified when trace was enabled, which was calling into SessionWrapper.toString() when generating a trace entry point. However, it may not always be the case that this behaviour is generated by trace, as toString() could be called from anywhere. It could also be triggered by the calling of the SessionWrapper.dump() function. J2CA0081E: Method cleanup failed while trying to execute method cleanup on ManagedConnection com.ibm.mq.connector.outbound.ManagedTopicConnectionImpl@38299ce 7 from resource jms/mqHub. Caught exception: com.ibm.msg.client.commonservices.CSIException: JMSCS0006: An internal problem occurred. Diagnostic information for service was written to 'null'. Please terminate the application as the product is in an inconsistent internal state. 	at com.ibm.msg.client.commonservices.trace.Trace.ffst(Trace.java:18 01) 	at com.ibm.msg.client.commonservices.trace.Trace.methodEntryInterna l(Trace.java:822) 	at com.ibm.msg.client.commonservices.trace.Trace.entry(Trace.java:7 45) 	at com.ibm.mq.connector.outbound.ConnectionWrapper.releaseSession(C onnectionWrapper.java:582) 	at com.ibm.mq.connector.outbound.SessionWrapper.close(SessionWrappe r.java:391) 	at com.ibm.mq.connector.outbound.ConnectionWrapper.close(Connection Wrapper.java:467) 	at com.ibm.mq.connector.outbound.ManagedConnectionImpl.cleanup(Mana gedConnectionImpl.java:507) 	at com.ibm.ejs.j2c.MCWrapper.cleanup(MCWrapper.java:1547) 	at com.ibm.ejs.j2c.FreePool.returnToFreePoolDelegated(FreePool.java :292) 	at com.ibm.ejs.j2c.FreePool.returnToFreePool(FreePool.java:279) 	at com.ibm.ejs.j2c.PoolManager.release(PoolManager.java:928) 	at com.ibm.ejs.j2c.MCWrapper.releaseToPoolManager(MCWrapper.java:21 33) 	at com.ibm.ejs.j2c.LocalTransactionWrapper.afterCompletion(LocalTra nsactionWrapper.java:958) 	... ... Caused by: java.lang.StackOverflowError 	at java.util.regex.Pattern$Curly.match(Pattern.java:4252) 	at java.util.regex.Pattern$GroupHead.match(Pattern.java:4683) 	at java.util.regex.Pattern$Branch.match(Pattern.java:4629) 	at java.util.regex.Pattern$BranchConn.match(Pattern.java:4593) 	at java.util.regex.Pattern$GroupTail.match(Pattern.java:4742) 	at java.util.regex.Pattern$Curly.match0(Pattern.java:4304) 	at java.util.regex.Pattern$Curly.match(Pattern.java:4259) 	at java.util.regex.Pattern$GroupHead.match(Pattern.java:4683) 	at java.util.regex.Pattern$Branch.match(Pattern.java:4629) 	at java.util.regex.Pattern$Branch.match(Pattern.java:4627) 	at java.util.regex.Pattern$BmpCharProperty.match(Pattern.java:3823) 	at java.util.regex.Pattern$Start.match(Pattern.java:3486) 	at java.util.regex.Matcher.search(Matcher.java:1259) 	at java.util.regex.Matcher.find(Matcher.java:675) 	at java.util.Formatter.parse(Formatter.java:2560) 	at java.util.Formatter.format(Formatter.java:2512) 	at java.io.PrintWriter.format(PrintWriter.java:915) 	at com.ibm.mq.connector.outbound.SessionWrapper.dump(SessionWrapper .java:1278) 	at com.ibm.mq.connector.outbound.SessionWrapper.toString(SessionWra pper.java:1326) 	at java.lang.String.valueOf(String.java:3467) 	at com.ibm.mq.connector.outbound.MessageConsumerWrapper.dump(Messag eConsumerWrapper.java:414) 	at com.ibm.mq.connector.outbound.SessionWrapper.dump(SessionWrapper .java:1293) 	at com.ibm.mq.connector.outbound.SessionWrapper.toString(SessionWra pper.java:1326) 	... ... 	at java.lang.String.valueOf(String.java:3467) 	at com.ibm.mq.connector.outbound.MessageConsumerWrapper.dump(Messag eConsumerWrapper.java:414) 	at com.ibm.mq.connector.outbound.SessionWrapper.dump(SessionWrapper .java:1293) 	at com.ibm.mq.connector.outbound.SessionWrapper.toString(SessionWra pper.java:1326) 	at java.text.MessageFormat.subformat(MessageFormat.java:1291) 	at java.text.MessageFormat.format(MessageFormat.java:876) 	at java.text.Format.format(Format.java:168) 	at java.text.MessageFormat.format(MessageFormat.java:852) 	at com.ibm.ws.logging.internal.impl.BaseTraceFormatter.formatMessag e(BaseTraceFormatter.java:301) 	at com.ibm.ws.logging.internal.impl.BaseTraceFormatter.formatVerbos eMessage(BaseTraceFormatter.java:373) 	at com.ibm.ws.logging.internal.impl.BaseTraceService.publishTraceLo gRecord(BaseTraceService.java:1074) 	at com.ibm.ws.logging.internal.impl.BaseTraceService.publishLogReco rd(BaseTraceService.java:1045) 	at com.ibm.ws.logging.internal.impl.BaseTraceService$2.publish(Base TraceService.java:287) 	at java.util.logging.Logger.log(Logger.java:749) 	at com.ibm.ws.logging.internal.WsLogger.log(WsLogger.java:138) 	at com.ibm.ws.logging.internal.WsLogger.logp(WsLogger.java:336) 	at com.ibm.ws.logging.internal.WsLogger.entering(WsLogger.java:443) 	at com.ibm.ws.wmqcsi.trace.TraceImpl.methodEntry(TraceImpl.java:259 ) 	at com.ibm.msg.client.commonservices.trace.Trace.methodEntryInterna l(Trace.java:810) 	... 37 more
Problem conclusion
A new method has been created - SessionWrapper.getInfo(). This function returns some simple details about the session object, similar but slightly improved to the default Java.Lang.Object.toString() function which was overridden when this bug was introduced. This getInfo() function is now called inside the consumer and producer objects, such as MessageConsumerWrapper, so as to break the loop going back to SessionWrapper.toString(). Here is the new code flow... SessionWrapper.toString() -> SessionWrapper.dump() -> MessageConsumerWrapper.dump() -> SessionWrapper.getInfo() --------------------------------------------------------------- The fix is targeted for delivery in the following PTFs: Version Maintenance Level v9.3 LTS 9.3.0.1 v9.x CD 9.3.0 The latest available maintenance can be obtained from 'WebSphere MQ Recommended Fixes' http://www-1.ibm.com/support/docview.wss?rs=171&uid=swg27006037 If the maintenance level is not yet available information on its planned availability can be found in 'WebSphere MQ Planned Maintenance Release Dates' http://www-1.ibm.com/support/docview.wss?rs=171&uid=swg27006309 ---------------------------------------------------------------
Temporary fix
Comments
APAR Information
APAR number
IT41412
Reported component name
MQ BASE V9.2
Reported component ID
5724H7281
Reported release
925
Status
CLOSED PER
PE
NoPE
HIPER
NoHIPER
Special Attention
NoSpecatt / Xsystem
Submitted date
2022-07-03
Closed date
2022-07-12
Last modified date
2022-10-07
APAR is sysrouted FROM one or more of the following:
APAR is sysrouted TO one or more of the following:
Fix information
Fixed component name
MQ BASE V9.2
Fixed component ID
5724H7281
Applicable component levels
[{"Business Unit":{"code":"BU059","label":"IBM Software w\/o TPS"},"Product":{"code":"SSYHRD","label":"IBM MQ"},"Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"925","Line of Business":{"code":"LOB45","label":"Automation"}}]
Document Information
Modified date:
07 October 2022