Search in sources :

Example 1 with MessageProducer

use of jakarta.jms.MessageProducer in project spring-framework by spring-projects.

the class JmsTemplate method doSend.

/**
 * Send the given JMS message.
 * @param session the JMS Session to operate on
 * @param destination the JMS Destination to send to
 * @param messageCreator callback to create a JMS Message
 * @throws JMSException if thrown by JMS API methods
 */
protected void doSend(Session session, Destination destination, MessageCreator messageCreator) throws JMSException {
    Assert.notNull(messageCreator, "MessageCreator must not be null");
    MessageProducer producer = createProducer(session, destination);
    try {
        Message message = messageCreator.createMessage(session);
        if (logger.isDebugEnabled()) {
            logger.debug("Sending created message: " + message);
        }
        doSend(producer, message);
        // Check commit - avoid commit call within a JTA transaction.
        if (session.getTransacted() && isSessionLocallyTransacted(session)) {
            // Transacted session created by this template -> commit.
            JmsUtils.commitIfNecessary(session);
        }
    } finally {
        JmsUtils.closeMessageProducer(producer);
    }
}
Also used : Message(jakarta.jms.Message) MessageProducer(jakarta.jms.MessageProducer)

Example 2 with MessageProducer

use of jakarta.jms.MessageProducer in project spring-framework by spring-projects.

the class JmsTemplateTests method doTestSendAndReceive.

private void doTestSendAndReceive(boolean explicitDestination, boolean useDefaultDestination, long timeout) throws Exception {
    JmsTemplate template = createTemplate();
    template.setConnectionFactory(this.connectionFactory);
    String destinationName = "testDestination";
    if (useDefaultDestination) {
        if (explicitDestination) {
            template.setDefaultDestination(this.queue);
        } else {
            template.setDefaultDestinationName(destinationName);
        }
    }
    template.setReceiveTimeout(timeout);
    Session localSession = getLocalSession();
    TemporaryQueue replyDestination = mock(TemporaryQueue.class);
    MessageProducer messageProducer = mock(MessageProducer.class);
    given(localSession.createProducer(this.queue)).willReturn(messageProducer);
    given(localSession.createTemporaryQueue()).willReturn(replyDestination);
    MessageConsumer messageConsumer = mock(MessageConsumer.class);
    given(localSession.createConsumer(replyDestination)).willReturn(messageConsumer);
    TextMessage request = mock(TextMessage.class);
    MessageCreator messageCreator = mock(MessageCreator.class);
    given(messageCreator.createMessage(localSession)).willReturn(request);
    TextMessage reply = mock(TextMessage.class);
    if (timeout == JmsTemplate.RECEIVE_TIMEOUT_NO_WAIT) {
        given(messageConsumer.receiveNoWait()).willReturn(reply);
    } else if (timeout == JmsTemplate.RECEIVE_TIMEOUT_INDEFINITE_WAIT) {
        given(messageConsumer.receive()).willReturn(reply);
    } else {
        given(messageConsumer.receive(timeout)).willReturn(reply);
    }
    Message message = null;
    if (useDefaultDestination) {
        message = template.sendAndReceive(messageCreator);
    } else if (explicitDestination) {
        message = template.sendAndReceive(this.queue, messageCreator);
    } else {
        message = template.sendAndReceive(destinationName, messageCreator);
    }
    // replyTO set on the request
    verify(request).setJMSReplyTo(replyDestination);
    assertThat(message).as("Reply message not received").isSameAs(reply);
    verify(this.connection).start();
    verify(this.connection).close();
    verify(localSession).close();
    verify(messageConsumer).close();
    verify(messageProducer).close();
}
Also used : MessageConsumer(jakarta.jms.MessageConsumer) Message(jakarta.jms.Message) TextMessage(jakarta.jms.TextMessage) TemporaryQueue(jakarta.jms.TemporaryQueue) MessageProducer(jakarta.jms.MessageProducer) TextMessage(jakarta.jms.TextMessage) Session(jakarta.jms.Session)

Example 3 with MessageProducer

use of jakarta.jms.MessageProducer in project spring-framework by spring-projects.

the class JmsTemplateTests method doTestSendDestination.

/**
 * Common method for testing a send method that uses the MessageCreator
 * callback but with different QOS options.
 * @param ignoreQOS test using default QOS options.
 */
private void doTestSendDestination(boolean explicitDestination, boolean useDefaultDestination, boolean ignoreQOS, boolean disableIdAndTimestamp) throws Exception {
    JmsTemplate template = createTemplate();
    template.setConnectionFactory(this.connectionFactory);
    String destinationName = "testDestination";
    if (useDefaultDestination) {
        if (explicitDestination) {
            template.setDefaultDestination(this.queue);
        } else {
            template.setDefaultDestinationName(destinationName);
        }
    }
    if (disableIdAndTimestamp) {
        template.setMessageIdEnabled(false);
        template.setMessageTimestampEnabled(false);
    }
    MessageProducer messageProducer = mock(MessageProducer.class);
    TextMessage textMessage = mock(TextMessage.class);
    given(this.session.createProducer(this.queue)).willReturn(messageProducer);
    given(this.session.createTextMessage("just testing")).willReturn(textMessage);
    if (!ignoreQOS) {
        template.setQosSettings(this.qosSettings);
    }
    if (useDefaultDestination) {
        template.send(session -> session.createTextMessage("just testing"));
    } else {
        if (explicitDestination) {
            template.send(this.queue, (MessageCreator) session -> session.createTextMessage("just testing"));
        } else {
            template.send(destinationName, (MessageCreator) session -> session.createTextMessage("just testing"));
        }
    }
    if (useTransactedTemplate()) {
        verify(this.session).commit();
    }
    if (disableIdAndTimestamp) {
        verify(messageProducer).setDisableMessageID(true);
        verify(messageProducer).setDisableMessageTimestamp(true);
    }
    if (ignoreQOS) {
        verify(messageProducer).send(textMessage);
    } else {
        verify(messageProducer).send(textMessage, this.qosSettings.getDeliveryMode(), this.qosSettings.getPriority(), this.qosSettings.getTimeToLive());
    }
    verify(messageProducer).close();
    verify(this.session).close();
    verify(this.connection).close();
}
Also used : BeforeEach(org.junit.jupiter.api.BeforeEach) MessageNotReadableException(org.springframework.jms.MessageNotReadableException) SimpleMessageConverter(org.springframework.jms.support.converter.SimpleMessageConverter) MessageProducer(jakarta.jms.MessageProducer) Assertions.assertThat(org.assertj.core.api.Assertions.assertThat) UncategorizedJmsException(org.springframework.jms.UncategorizedJmsException) JMSException(jakarta.jms.JMSException) TemporaryQueue(jakarta.jms.TemporaryQueue) Queue(jakarta.jms.Queue) Session(jakarta.jms.Session) TransactionSynchronizationManager(org.springframework.transaction.support.TransactionSynchronizationManager) InvalidDestinationException(org.springframework.jms.InvalidDestinationException) ResourceAllocationException(org.springframework.jms.ResourceAllocationException) SingleConnectionFactory(org.springframework.jms.connection.SingleConnectionFactory) MessageConsumer(jakarta.jms.MessageConsumer) BDDMockito.given(org.mockito.BDDMockito.given) Destination(jakarta.jms.Destination) Assertions.assertThatExceptionOfType(org.assertj.core.api.Assertions.assertThatExceptionOfType) MessageFormatException(org.springframework.jms.MessageFormatException) Context(javax.naming.Context) ConnectionFactory(jakarta.jms.ConnectionFactory) MessageEOFException(org.springframework.jms.MessageEOFException) Connection(jakarta.jms.Connection) QosSettings(org.springframework.jms.support.QosSettings) InvalidClientIDException(org.springframework.jms.InvalidClientIDException) TransactionAwareConnectionFactoryProxy(org.springframework.jms.connection.TransactionAwareConnectionFactoryProxy) PrintWriter(java.io.PrintWriter) Message(jakarta.jms.Message) JmsException(org.springframework.jms.JmsException) BDDMockito.willThrow(org.mockito.BDDMockito.willThrow) StringWriter(java.io.StringWriter) JndiDestinationResolver(org.springframework.jms.support.destination.JndiDestinationResolver) JndiTemplate(org.springframework.jndi.JndiTemplate) TransactionInProgressException(org.springframework.jms.TransactionInProgressException) Mockito.verify(org.mockito.Mockito.verify) Test(org.junit.jupiter.api.Test) List(java.util.List) MessageNotWriteableException(org.springframework.jms.MessageNotWriteableException) TransactionSynchronization(org.springframework.transaction.support.TransactionSynchronization) JmsUtils(org.springframework.jms.support.JmsUtils) TextMessage(jakarta.jms.TextMessage) ConnectionFactoryUtils(org.springframework.jms.connection.ConnectionFactoryUtils) DeliveryMode(jakarta.jms.DeliveryMode) TransactionRolledBackException(org.springframework.jms.TransactionRolledBackException) JmsSecurityException(org.springframework.jms.JmsSecurityException) Mockito.reset(org.mockito.Mockito.reset) InvalidSelectorException(org.springframework.jms.InvalidSelectorException) Mockito.mock(org.mockito.Mockito.mock) MessageProducer(jakarta.jms.MessageProducer) TextMessage(jakarta.jms.TextMessage)

Example 4 with MessageProducer

use of jakarta.jms.MessageProducer in project spring-framework by spring-projects.

the class JmsTemplateTests method testProducerCallback.

@Test
void testProducerCallback() throws Exception {
    JmsTemplate template = createTemplate();
    template.setConnectionFactory(this.connectionFactory);
    MessageProducer messageProducer = mock(MessageProducer.class);
    given(this.session.createProducer(null)).willReturn(messageProducer);
    given(messageProducer.getPriority()).willReturn(4);
    template.execute((ProducerCallback<Void>) (session1, producer) -> {
        session1.getTransacted();
        producer.getPriority();
        return null;
    });
    verify(messageProducer).close();
    verify(this.session).close();
    verify(this.connection).close();
}
Also used : BeforeEach(org.junit.jupiter.api.BeforeEach) MessageNotReadableException(org.springframework.jms.MessageNotReadableException) SimpleMessageConverter(org.springframework.jms.support.converter.SimpleMessageConverter) MessageProducer(jakarta.jms.MessageProducer) Assertions.assertThat(org.assertj.core.api.Assertions.assertThat) UncategorizedJmsException(org.springframework.jms.UncategorizedJmsException) JMSException(jakarta.jms.JMSException) TemporaryQueue(jakarta.jms.TemporaryQueue) Queue(jakarta.jms.Queue) Session(jakarta.jms.Session) TransactionSynchronizationManager(org.springframework.transaction.support.TransactionSynchronizationManager) InvalidDestinationException(org.springframework.jms.InvalidDestinationException) ResourceAllocationException(org.springframework.jms.ResourceAllocationException) SingleConnectionFactory(org.springframework.jms.connection.SingleConnectionFactory) MessageConsumer(jakarta.jms.MessageConsumer) BDDMockito.given(org.mockito.BDDMockito.given) Destination(jakarta.jms.Destination) Assertions.assertThatExceptionOfType(org.assertj.core.api.Assertions.assertThatExceptionOfType) MessageFormatException(org.springframework.jms.MessageFormatException) Context(javax.naming.Context) ConnectionFactory(jakarta.jms.ConnectionFactory) MessageEOFException(org.springframework.jms.MessageEOFException) Connection(jakarta.jms.Connection) QosSettings(org.springframework.jms.support.QosSettings) InvalidClientIDException(org.springframework.jms.InvalidClientIDException) TransactionAwareConnectionFactoryProxy(org.springframework.jms.connection.TransactionAwareConnectionFactoryProxy) PrintWriter(java.io.PrintWriter) Message(jakarta.jms.Message) JmsException(org.springframework.jms.JmsException) BDDMockito.willThrow(org.mockito.BDDMockito.willThrow) StringWriter(java.io.StringWriter) JndiDestinationResolver(org.springframework.jms.support.destination.JndiDestinationResolver) JndiTemplate(org.springframework.jndi.JndiTemplate) TransactionInProgressException(org.springframework.jms.TransactionInProgressException) Mockito.verify(org.mockito.Mockito.verify) Test(org.junit.jupiter.api.Test) List(java.util.List) MessageNotWriteableException(org.springframework.jms.MessageNotWriteableException) TransactionSynchronization(org.springframework.transaction.support.TransactionSynchronization) JmsUtils(org.springframework.jms.support.JmsUtils) TextMessage(jakarta.jms.TextMessage) ConnectionFactoryUtils(org.springframework.jms.connection.ConnectionFactoryUtils) DeliveryMode(jakarta.jms.DeliveryMode) TransactionRolledBackException(org.springframework.jms.TransactionRolledBackException) JmsSecurityException(org.springframework.jms.JmsSecurityException) Mockito.reset(org.mockito.Mockito.reset) InvalidSelectorException(org.springframework.jms.InvalidSelectorException) Mockito.mock(org.mockito.Mockito.mock) MessageProducer(jakarta.jms.MessageProducer) Test(org.junit.jupiter.api.Test)

Example 5 with MessageProducer

use of jakarta.jms.MessageProducer in project spring-framework by spring-projects.

the class JmsTemplateTests method testProducerCallbackWithIdAndTimestampDisabled.

@Test
void testProducerCallbackWithIdAndTimestampDisabled() throws Exception {
    JmsTemplate template = createTemplate();
    template.setConnectionFactory(this.connectionFactory);
    template.setMessageIdEnabled(false);
    template.setMessageTimestampEnabled(false);
    MessageProducer messageProducer = mock(MessageProducer.class);
    given(this.session.createProducer(null)).willReturn(messageProducer);
    given(messageProducer.getPriority()).willReturn(4);
    template.execute((ProducerCallback<Void>) (session1, producer) -> {
        session1.getTransacted();
        producer.getPriority();
        return null;
    });
    verify(messageProducer).setDisableMessageID(true);
    verify(messageProducer).setDisableMessageTimestamp(true);
    verify(messageProducer).close();
    verify(this.session).close();
    verify(this.connection).close();
}
Also used : BeforeEach(org.junit.jupiter.api.BeforeEach) MessageNotReadableException(org.springframework.jms.MessageNotReadableException) SimpleMessageConverter(org.springframework.jms.support.converter.SimpleMessageConverter) MessageProducer(jakarta.jms.MessageProducer) Assertions.assertThat(org.assertj.core.api.Assertions.assertThat) UncategorizedJmsException(org.springframework.jms.UncategorizedJmsException) JMSException(jakarta.jms.JMSException) TemporaryQueue(jakarta.jms.TemporaryQueue) Queue(jakarta.jms.Queue) Session(jakarta.jms.Session) TransactionSynchronizationManager(org.springframework.transaction.support.TransactionSynchronizationManager) InvalidDestinationException(org.springframework.jms.InvalidDestinationException) ResourceAllocationException(org.springframework.jms.ResourceAllocationException) SingleConnectionFactory(org.springframework.jms.connection.SingleConnectionFactory) MessageConsumer(jakarta.jms.MessageConsumer) BDDMockito.given(org.mockito.BDDMockito.given) Destination(jakarta.jms.Destination) Assertions.assertThatExceptionOfType(org.assertj.core.api.Assertions.assertThatExceptionOfType) MessageFormatException(org.springframework.jms.MessageFormatException) Context(javax.naming.Context) ConnectionFactory(jakarta.jms.ConnectionFactory) MessageEOFException(org.springframework.jms.MessageEOFException) Connection(jakarta.jms.Connection) QosSettings(org.springframework.jms.support.QosSettings) InvalidClientIDException(org.springframework.jms.InvalidClientIDException) TransactionAwareConnectionFactoryProxy(org.springframework.jms.connection.TransactionAwareConnectionFactoryProxy) PrintWriter(java.io.PrintWriter) Message(jakarta.jms.Message) JmsException(org.springframework.jms.JmsException) BDDMockito.willThrow(org.mockito.BDDMockito.willThrow) StringWriter(java.io.StringWriter) JndiDestinationResolver(org.springframework.jms.support.destination.JndiDestinationResolver) JndiTemplate(org.springframework.jndi.JndiTemplate) TransactionInProgressException(org.springframework.jms.TransactionInProgressException) Mockito.verify(org.mockito.Mockito.verify) Test(org.junit.jupiter.api.Test) List(java.util.List) MessageNotWriteableException(org.springframework.jms.MessageNotWriteableException) TransactionSynchronization(org.springframework.transaction.support.TransactionSynchronization) JmsUtils(org.springframework.jms.support.JmsUtils) TextMessage(jakarta.jms.TextMessage) ConnectionFactoryUtils(org.springframework.jms.connection.ConnectionFactoryUtils) DeliveryMode(jakarta.jms.DeliveryMode) TransactionRolledBackException(org.springframework.jms.TransactionRolledBackException) JmsSecurityException(org.springframework.jms.JmsSecurityException) Mockito.reset(org.mockito.Mockito.reset) InvalidSelectorException(org.springframework.jms.InvalidSelectorException) Mockito.mock(org.mockito.Mockito.mock) MessageProducer(jakarta.jms.MessageProducer) Test(org.junit.jupiter.api.Test)

Aggregations

MessageProducer (jakarta.jms.MessageProducer)19 TextMessage (jakarta.jms.TextMessage)15 Session (jakarta.jms.Session)13 Test (org.junit.jupiter.api.Test)13 Queue (jakarta.jms.Queue)10 Message (jakarta.jms.Message)9 StubTextMessage (org.springframework.jms.StubTextMessage)7 Destination (jakarta.jms.Destination)5 MessageConsumer (jakarta.jms.MessageConsumer)5 TemporaryQueue (jakarta.jms.TemporaryQueue)5 QosSettings (org.springframework.jms.support.QosSettings)5 Connection (jakarta.jms.Connection)4 ConnectionFactory (jakarta.jms.ConnectionFactory)4 JMSException (jakarta.jms.JMSException)4 Message (org.springframework.messaging.Message)4 DeliveryMode (jakarta.jms.DeliveryMode)3 PrintWriter (java.io.PrintWriter)3 StringWriter (java.io.StringWriter)3 List (java.util.List)3 Context (javax.naming.Context)3