diff --git a/spring-jms/src/main/java/org/springframework/jms/support/JmsAccessor.java b/spring-jms/src/main/java/org/springframework/jms/support/JmsAccessor.java index 1eea33974449..a7a45c81d55d 100644 --- a/spring-jms/src/main/java/org/springframework/jms/support/JmsAccessor.java +++ b/spring-jms/src/main/java/org/springframework/jms/support/JmsAccessor.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2022 the original author or authors. + * Copyright 2002-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -223,7 +223,10 @@ protected Session createSession(Connection con) throws JMSException { * @see jakarta.jms.Session#CLIENT_ACKNOWLEDGE */ protected boolean isClientAcknowledge(Session session) throws JMSException { - return (session.getAcknowledgeMode() == Session.CLIENT_ACKNOWLEDGE); + int mode = session.getAcknowledgeMode(); + return (mode != Session.SESSION_TRANSACTED && + mode != Session.AUTO_ACKNOWLEDGE && + mode != Session.DUPS_OK_ACKNOWLEDGE); } } diff --git a/spring-jms/src/test/java/org/springframework/jms/support/JmsAccessorTests.java b/spring-jms/src/test/java/org/springframework/jms/support/JmsAccessorTests.java index 1e2f4b667637..516fc8236582 100644 --- a/spring-jms/src/test/java/org/springframework/jms/support/JmsAccessorTests.java +++ b/spring-jms/src/test/java/org/springframework/jms/support/JmsAccessorTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2019 the original author or authors. + * Copyright 2002-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -21,24 +21,27 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException; +import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.mock; /** * Unit tests for the {@link JmsAccessor} class. * * @author Rick Evans * @author Chris Beams + * @author Vedran Pavic */ -public class JmsAccessorTests { +class JmsAccessorTests { @Test - public void testChokesIfConnectionFactoryIsNotSupplied() throws Exception { + void testChokesIfConnectionFactoryIsNotSupplied() { JmsAccessor accessor = new StubJmsAccessor(); assertThatIllegalArgumentException().isThrownBy( accessor::afterPropertiesSet); } @Test - public void testSessionTransactedModeReallyDoesDefaultToFalse() throws Exception { + void testSessionTransactedModeReallyDoesDefaultToFalse() { JmsAccessor accessor = new StubJmsAccessor(); assertThat(accessor.isSessionTransacted()).as("The [sessionTransacted] property of JmsAccessor must default to " + "false. Change this test (and the attendant Javadoc) if you have " + @@ -46,7 +49,7 @@ public void testSessionTransactedModeReallyDoesDefaultToFalse() throws Exception } @Test - public void testAcknowledgeModeReallyDoesDefaultToAutoAcknowledge() throws Exception { + void testAcknowledgeModeReallyDoesDefaultToAutoAcknowledge() { JmsAccessor accessor = new StubJmsAccessor(); assertThat(accessor.getSessionAcknowledgeMode()).as("The [sessionAcknowledgeMode] property of JmsAccessor must default to " + "[Session.AUTO_ACKNOWLEDGE]. Change this test (and the attendant " + @@ -54,11 +57,18 @@ public void testAcknowledgeModeReallyDoesDefaultToAutoAcknowledge() throws Excep } @Test - public void testSetAcknowledgeModeNameChokesIfBadAckModeIsSupplied() throws Exception { + void testSetAcknowledgeModeNameChokesIfBadAckModeIsSupplied() { assertThatIllegalArgumentException().isThrownBy(() -> new StubJmsAccessor().setSessionAcknowledgeModeName("Tally ho chaps!")); } + @Test + void testCustomAcknowledgeModeIsConsideredClientAcknowledge() throws Exception { + Session session = mock(Session.class); + given(session.getAcknowledgeMode()).willReturn(100); + JmsAccessor accessor = new StubJmsAccessor(); + assertThat(accessor.isClientAcknowledge(session)).isTrue(); + } /** * Crummy, stub, do-nothing subclass of the JmsAccessor class for use in testing.