diff --git a/kie-server-parent/kie-server-remote/kie-server-jms/src/main/java/org/kie/server/jms/KieServerMDB.java b/kie-server-parent/kie-server-remote/kie-server-jms/src/main/java/org/kie/server/jms/KieServerMDB.java
index a3a6d0d..0ec5c3d 100644
--- a/kie-server-parent/kie-server-remote/kie-server-jms/src/main/java/org/kie/server/jms/KieServerMDB.java
+++ b/kie-server-parent/kie-server-remote/kie-server-jms/src/main/java/org/kie/server/jms/KieServerMDB.java
@@ -78,9 +78,6 @@
     @Resource(mappedName = "java:/JmsXA")
     private ConnectionFactory factory;
 
-    // Initialized in @PostConstruct
-    private Session    session;
-    private Connection connection;
 
     //    @Resource(lookup = "java:app/RetryTrackerSingleton")
     //    private RetryTrackerSingleton retryTracker;
@@ -92,19 +89,6 @@
     @PostConstruct
     public void init() {
         RESPONSE_QUEUE_NAME = System.getProperty( RESPONSE_QUEUE_NAME_PROPERTY, DEFAULT_RESPONSE_QUEUE_NAME );
-
-        boolean sessionTransacted = Boolean.parseBoolean(System.getProperty(KieServerConstants.CFG_KIE_SERVER_JMS_SESSION_TX, "false"));
-        int sessionAck = Integer.parseInt(System.getProperty(KieServerConstants.CFG_KIE_SERVER_JMS_SESSION_ACK, String.valueOf(Session.AUTO_ACKNOWLEDGE)));
-        try {
-            connection = factory.createConnection();
-            session = connection.createSession( sessionTransacted, sessionAck );
-            connection.start();
-        } catch ( JMSException jmse ) {
-            // Unable to create connection/session, so no need to try send the message (4.) either
-            String errMsg = "Unable to open new session to send response messages";
-            logger.error( errMsg, jmse );
-            throw new JMSRuntimeException( errMsg, jmse );
-        }
 
         kieServer = KieServerLocator.getInstance();
 
@@ -118,24 +102,30 @@
 
     @PreDestroy
     public void cleanup() {
-        try {
-            if ( connection != null ) {
-                connection.close();
-                connection = null;
-            }
-            if ( session != null ) {
-                session.close();
-                session = null;
-            }
-        } catch ( JMSException jmse ) {
-            String errMsg = "Unable to close " + (connection == null ? "session" : "connection");
-            logger.error( errMsg, jmse );
-            throw new JMSRuntimeException( errMsg, jmse );
-        }
     }
 
     public void onMessage(Message message) {
+   	    Connection connection = null;
+        Session session = null;
+     
         try {
+
+             boolean sessionTransacted = Boolean.parseBoolean(System.getProperty(KieServerConstants.CFG_KIE_SERVER_JMS_SESSION_TX, "false"));
+	         int sessionAck = Integer.parseInt(System.getProperty(KieServerConstants.CFG_KIE_SERVER_JMS_SESSION_ACK, String.valueOf(Session.AUTO_ACKNOWLEDGE)));
+	                 	
+        	 try {
+        		   	connection = factory.createConnection();
+	            	session = connection.createSession( sessionTransacted, sessionAck );
+	            	if(logger.isDebugEnabled()) {
+	            		logger.debug("KieServerMDB::onMessage::sessionTransacted="+sessionTransacted+", sessionAck="+sessionAck);
+	            	}	            	
+	            	
+	            } catch ( JMSException jmse ) {
+	                // Unable to create connection/session, so no need to try send the message (4.) either
+	                String errMsg = "Unable to open new session to send response messages";
+	                logger.error( errMsg, jmse );
+	                throw new JMSRuntimeException( errMsg, jmse );
+	        }
             String username = null;
             String password = null;
             try {
@@ -215,6 +205,11 @@
 
             if (interactionPattern < UPPER_LIMIT_REPLY_INTERACTION_PATTERNS) {
                 logger.debug("Response message is about to be sent according to selected interaction pattern {}", interactionPattern);
+                
+                // create connection/session per onMessage
+               
+	           
+                
                 // 5. serialize response
                 Message msg = marshallResponse(session, msgCorrId, format, marshaller, response);
                 // set conversation id for routing
@@ -242,12 +237,43 @@
                 }
 
                 // 6. send response
-                sendResponse(msgCorrId, format, msg);
+                sendResponse(session, msgCorrId, format, msg);
+                
+                try {
+                	// This wouldn't likely happen per JavaEE spec (transacted is ignored). But just in case that resource-adaptor doesn't follow.
+                	   if (session.getTransacted()) {
+                		   if(logger.isDebugEnabled()) {
+                			   logger.debug("KieServerMDB::onMessage::session.getTransacted() == true. Committing");
+                		   }
+                	       session.commit();
+                	   }
+                	} catch (JMSException jmse) {
+                	   String errMsg = "Failed to commit session";
+                	   logger.error(errMsg, jmse);
+                	   throw new JMSRuntimeException(errMsg, jmse);
+                	}
+                	               
+
             } else {
                 logger.debug("Response message is skipped according to selected interaction pattern {}", FIRE_AND_FORGET_PATTERN);
             }
 
         } finally {
+        	
+        	try {
+        	    if (connection != null) {
+        	       connection.close();
+        	       if(logger.isDebugEnabled()) {
+        	    	   logger.debug("KieServerMDB::onMessage::connection closed");
+        	       }        	       
+        	       connection = null;
+        	    }
+        	} catch (JMSException jmse) {
+        	   String errMsg = "Unable to close connection";
+        	   logger.error(errMsg, jmse);
+        	   JMSSecurityAdapter.logout();
+        	   throw new JMSRuntimeException(errMsg, jmse);
+        	}
 
             JMSSecurityAdapter.logout();
         }
@@ -286,7 +312,7 @@
         return textMsg;
     }
 
-    private void sendResponse(String msgCorrId, MarshallingFormat format, Message msg) {
+    private void sendResponse(Session session, String msgCorrId, MarshallingFormat format, Message msg) {
         // set correlation id in response message
         try {
             msg.setJMSCorrelationID(msgCorrId);
