List of usage examples for org.springframework.jms.support JmsUtils closeConnection
public static void closeConnection(@Nullable Connection con)
From source file:fr.xebia.springframework.jms.ManagedCachingConnectionFactoryTest.java
@Test public void testMessageConsumer() throws Exception { ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory( "vm://localhost?broker.persistent=false&broker.useJmx=true"); ManagedConnectionFactory connectionFactory = new ManagedConnectionFactory(activeMQConnectionFactory); Connection connection = null; Session session = null;//from w ww . j av a2 s . com MessageConsumer consumer = null; try { connection = connectionFactory.createConnection(); assertEquals(1, connectionFactory.getActiveConnectionCount()); session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); assertEquals(1, connectionFactory.getActiveSessionCount()); Destination myQueue = session.createQueue("test-queue"); consumer = session.createConsumer(myQueue); assertEquals(1, connectionFactory.getActiveMessageConsumerCount()); consumer.receiveNoWait(); assertEquals(0, connectionFactory.getActiveMessageProducerCount()); } finally { JmsUtils.closeMessageConsumer(consumer); assertEquals(0, connectionFactory.getActiveMessageConsumerCount()); JmsUtils.closeSession(session); assertEquals(0, connectionFactory.getActiveSessionCount()); JmsUtils.closeConnection(connection); assertEquals(0, connectionFactory.getActiveConnectionCount()); } }
From source file:fr.xebia.springframework.jms.ManagedCachingConnectionFactoryTest.java
@Test public void testMessageProducer() throws Exception { ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory( "vm://localhost?broker.persistent=false&broker.useJmx=true"); ManagedConnectionFactory connectionFactory = new ManagedConnectionFactory(activeMQConnectionFactory); Connection connection = null; Session session = null;//from w ww. ja v a 2 s .co m MessageProducer messageProducer = null; try { connection = connectionFactory.createConnection(); assertEquals(1, connectionFactory.getActiveConnectionCount()); session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); assertEquals(1, connectionFactory.getActiveSessionCount()); Destination myQueue = session.createQueue("test-queue"); messageProducer = session.createProducer(myQueue); assertEquals(1, connectionFactory.getActiveMessageProducerCount()); messageProducer.send(myQueue, session.createTextMessage("test")); assertEquals(0, connectionFactory.getActiveMessageConsumerCount()); } finally { JmsUtils.closeMessageProducer(messageProducer); assertEquals(0, connectionFactory.getActiveMessageProducerCount()); JmsUtils.closeSession(session); assertEquals(0, connectionFactory.getActiveSessionCount()); JmsUtils.closeConnection(connection); assertEquals(0, connectionFactory.getActiveConnectionCount()); } }
From source file:fr.xebia.sample.springframework.jms.requestreply.RequestReplyClientInvoker.java
/** * Request/Reply SpringFramework sample. * //from ww w . j av a 2 s . c o m * @param request * sent to the remote service * @return reply returned by the remote service * @throws JMSException */ public String requestReply(String request) throws JMSException { Connection connection = connectionFactory.createConnection(); try { connection.start(); Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); try { MessageProducer messageProducer = session.createProducer(this.requestDestination); try { Message requestMessage = session.createTextMessage(request); requestMessage.setJMSReplyTo(this.replyToDestination); // requestMessage.setJMSCorrelationID(String.valueOf(random.nextLong())); messageProducer.send(requestMessage); String messageSelector = "JMSCorrelationID LIKE '" + requestMessage.getJMSMessageID() + "'"; MessageConsumer messageConsumer = session.createConsumer(this.replyToDestination, messageSelector); TextMessage replyMessage = (TextMessage) messageConsumer.receive(timeoutInMillis); Assert.notNull(replyMessage, "Timeout waiting for jms response"); logger.debug( "requestReply " + "\r\nrequest : " + requestMessage + "\r\nreply : " + replyMessage); String result = replyMessage.getText(); logger.debug("requestReply('" + request + "'): '" + result + "'"); return result; } finally { JmsUtils.closeMessageProducer(messageProducer); } } finally { JmsUtils.closeSession(session); } } finally { JmsUtils.closeConnection(connection); } }
From source file:fr.xebia.springframework.jms.support.converter.JaxbMessageConverterSpringTest.java
@After public void after() throws Exception { JmsUtils.closeSession(session); JmsUtils.closeConnection(connection); }
From source file:org.apache.servicemix.jbi.cluster.requestor.AbstractJmsRequestorPool.java
/** * Refresh the underlying Connection, not returning before an attempt has been * successful. Called in case of a shared Connection as well as without shared * Connection, so either needs to operate on the shared Connection or on a * temporary Connection that just gets established for validation purposes. * <p>The default implementation retries until it successfully established a * Connection, for as long as this message listener container is active. * Applies the specified recovery interval between retries. * @see #setRecoveryInterval// w ww . j a va 2 s .com */ protected void refreshConnectionUntilSuccessful() { while (isRunning()) { try { if (sharedConnectionEnabled()) { refreshSharedConnection(); } else { Connection con = createConnection(); JmsUtils.closeConnection(con); } logger.info("Successfully refreshed JMS Connection"); break; } catch (Exception ex) { StringBuffer msg = new StringBuffer(); msg.append("Could not refresh JMS Connection for destination '"); msg.append(getDestinationDescription()).append("' - retrying in "); msg.append(this.recoveryInterval).append(" ms. Cause: "); msg.append(ex instanceof JMSException ? JmsUtils.buildExceptionMessage(fixForSpring5470((JMSException) ex)) : ex.getMessage()); if (logger.isDebugEnabled()) { logger.info(msg, ex); } else if (logger.isInfoEnabled()) { logger.info(msg); } } sleepInbetweenRecoveryAttempts(); } }
From source file:org.springframework.cloud.stream.binder.jms.solace.SolaceQueueProvisioner.java
@Override public Destinations provisionTopicAndConsumerGroup(String name, String... groups) { Destinations.Factory destinationsFactory = new Destinations.Factory(); try {// w ww .j a va2 s .c om Topic topic = JCSMPFactory.onlyInstance().createTopic(name); JCSMPSession session = sessionFactory.build(); Connection connection = connectionFactory.createConnection(); javax.jms.Session jmsSession = connection.createSession(false, 1); // Using Durable... because non-durable Solace TopicEndpoints don't have names TopicEndpoint topicEndpoint = new DurableTopicEndpointImpl(name); session.provision(topicEndpoint, null, JCSMPSession.FLAG_IGNORE_ALREADY_EXISTS); destinationsFactory.withTopic(jmsSession.createTopic(name)); if (ArrayUtils.isEmpty(groups)) { return destinationsFactory.build(); } for (String group : groups) { destinationsFactory.addGroup(jmsSession.createQueue(group)); doProvision(session, topic, group); } JmsUtils.commitIfNecessary(jmsSession); JmsUtils.closeSession(jmsSession); JmsUtils.closeConnection(connection); } catch (JCSMPErrorResponseException e) { if (JCSMPErrorResponseSubcodeEx.SUBSCRIPTION_ALREADY_PRESENT != e.getSubcodeEx()) { throw new RuntimeException(e); } } catch (Exception e) { throw new RuntimeException(e); } return destinationsFactory.build(); }
From source file:org.springframework.integration.jms.JmsOutboundGateway.java
private javax.jms.Message retryableReceiveReply(Session session, Destination replyTo, String messageSelector) throws JMSException { Connection consumerConnection = null; //NOSONAR Session consumerSession = session;//from w w w . j a v a2 s . c o m MessageConsumer messageConsumer = null; JMSException exception = null; boolean isTemporaryReplyTo = replyTo instanceof TemporaryQueue || replyTo instanceof TemporaryTopic; long replyTimeout = isTemporaryReplyTo ? Long.MIN_VALUE : this.receiveTimeout < 0 ? Long.MAX_VALUE : System.currentTimeMillis() + this.receiveTimeout; try { do { try { messageConsumer = consumerSession.createConsumer(replyTo, messageSelector); javax.jms.Message reply = receiveReplyMessage(messageConsumer); if (reply == null) { if (replyTimeout > System.currentTimeMillis()) { throw new JMSException("Consumer closed before timeout"); } } return reply; } catch (JMSException e) { exception = e; if (logger.isDebugEnabled()) { logger.debug("Connection lost waiting for reply, retrying: " + e.getMessage()); } do { try { consumerConnection = createConnection(); consumerSession = createSession(consumerConnection); break; } catch (JMSException ee) { exception = ee; if (logger.isDebugEnabled()) { logger.debug("Could not reconnect, retrying: " + ee.getMessage()); } try { Thread.sleep(1000); } catch (InterruptedException e1) { Thread.currentThread().interrupt(); return null; } } } while (replyTimeout > System.currentTimeMillis()); } } while (replyTimeout > System.currentTimeMillis()); if (isTemporaryReplyTo) { return null; } else { throw exception; } } finally { if (consumerSession != session) { JmsUtils.closeSession(consumerSession); JmsUtils.closeConnection(consumerConnection); } JmsUtils.closeMessageConsumer(messageConsumer); } }
From source file:org.springframework.jms.core.JmsTemplate.java
/** * Execute the action specified by the given action object within a * JMS Session. Generalized version of execute(SessionCallback), * allowing to start the JMS Connection on the fly. * <p>Use execute(SessionCallback) for the general case. Starting * the JMS Connection is just necessary for receiving messages, * which is preferably achieve through the <code>receive</code> methods. * @param action callback object that exposes the session * @return the result object from working with the session * @throws JmsException if there is any problem * @see #execute(SessionCallback)//from ww w . ja v a 2s. c om * @see #receive */ public Object execute(SessionCallback action, boolean startConnection) throws JmsException { Connection con = null; Session session = null; try { Connection conToUse = null; Session sessionToUse = null; ConnectionHolder conHolder = (ConnectionHolder) TransactionSynchronizationManager .getResource(getConnectionFactory()); if (conHolder != null) { conToUse = conHolder.getConnection(); if (startConnection) { conToUse.start(); } sessionToUse = conHolder.getSession(); } else { //connection con = createConnection(); if (startConnection) { con.start(); } //session session = createSession(con); conToUse = con; sessionToUse = session; } if (logger.isDebugEnabled()) { logger.debug("Executing callback on JMS session [" + sessionToUse + "] from connection [" + conToUse + "]"); } // return action.doInJms(sessionToUse); } catch (JMSException ex) { throw convertJmsAccessException(ex); } finally { JmsUtils.closeSession(session); JmsUtils.closeConnection(con); } }