@@ -711,9 +711,14 @@ else if (message != null && isClientAcknowledge(session)) {
711711 * @throws javax.jms.JMSException in case of a rollback error
712712 */
713713 protected void rollbackIfNecessary (Session session ) throws JMSException {
714- if (session .getTransacted () && isSessionLocallyTransacted (session )) {
715- // Transacted session created by this container -> rollback.
716- JmsUtils .rollbackIfNecessary (session );
714+ if (session .getTransacted ()) {
715+ if (isSessionLocallyTransacted (session )) {
716+ // Transacted session created by this container -> rollback.
717+ JmsUtils .rollbackIfNecessary (session );
718+ }
719+ }
720+ else {
721+ session .recover ();
717722 }
718723 }
719724
@@ -725,12 +730,17 @@ protected void rollbackIfNecessary(Session session) throws JMSException {
725730 */
726731 protected void rollbackOnExceptionIfNecessary (Session session , Throwable ex ) throws JMSException {
727732 try {
728- if (session .getTransacted () && isSessionLocallyTransacted (session )) {
729- // Transacted session created by this container -> rollback.
730- if (logger .isDebugEnabled ()) {
731- logger .debug ("Initiating transaction rollback on application exception" , ex );
733+ if (session .getTransacted ()) {
734+ if (isSessionLocallyTransacted (session )) {
735+ // Transacted session created by this container -> rollback.
736+ if (logger .isDebugEnabled ()) {
737+ logger .debug ("Initiating transaction rollback on application exception" , ex );
738+ }
739+ JmsUtils .rollbackIfNecessary (session );
732740 }
733- JmsUtils .rollbackIfNecessary (session );
741+ }
742+ else {
743+ session .recover ();
734744 }
735745 }
736746 catch (IllegalStateException ex2 ) {
0 commit comments