IBM Support

IT41412: IBM MQ: JAVA.LANG.STACKOVERFLOWERROR caused by recursive function calls inside SessionWrapper.

Subscribe to this APAR

By subscribing, you receive periodic emails alerting you to the status of the APAR, along with a link to the fix after it becomes available. You can track this item individually or track all items by product.

Notify me when this APAR changes.

Notify me when an APAR for this component changes.

 

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