I'm actually inclined to *remove* some of these "convenience" methods. We already have a client API which is well tested and well documented. I'm not sure this additional layer for testing is doing a lot of good in the long run. But I digress.
Justin On Sat, Aug 19, 2023 at 11:10 AM Clebert Suconic <clebert.suco...@gmail.com> wrote: > Or you / we could add a new method with the old semantic with a clear doc > about it. > > Alrhoufht I’m not sure what good is to keep the consumer leaking. > > On Sat, Aug 19, 2023 at 10:53 AM Justin Bertram <jbert...@apache.org> > wrote: > > > The behavior you're seeing is expected at this point given the fix for > > ARTEMIS-4234 [1]. The capabilities of the JUnit resources are very basic, > > and it doesn't really make sense to make them support more complex > > use-cases when the client API already does this. Therefore you just need > to > > create your own consumer, e.g.: > > > > @Test > > void testInputStream() throws Exception { > > File file = new > > > > > File(Objects.requireNonNull(getClass().getResource("/testFile.txt")).toURI()); > > String content = Files.readString(file.toPath()); > > > > InputStream inputStream = new FileInputStream(file); > > BufferedInputStream bufferedInputStream = new > > BufferedInputStream(inputStream); > > > > jmsTemplate.send(LargeMessageTest.TOPIC_NAME, session -> { > > javax.jms.Message msg = session.createBytesMessage(); > > > > msg.setObjectProperty("JMS_AMQ_InputStream", > > bufferedInputStream); > > return msg; > > }); > > > > ServerLocator serverLocator = > > ActiveMQClient.createServerLocator(embeddedActiveMQResource.getVmURL()); > > ClientSessionFactory clientSessionFactory = > > serverLocator.createSessionFactory(); > > ClientSession session = clientSessionFactory.createSession(); > > ByteArrayOutputStream byteArrayOutputStream = new > > ByteArrayOutputStream(); > > BufferedOutputStream bufferedOutput = new > > BufferedOutputStream(byteArrayOutputStream); > > > > try (ClientConsumer consumer = > session.createConsumer(TOPIC_NAME)) > > { > > session.start(); > > ClientMessage receivedMessage = consumer.receive(); > > receivedMessage.saveToOutputStream(bufferedOutput); > > } > > > > String readContent = byteArrayOutputStream.toString(); > > > > assertEquals(content, readContent); > > } > > > > > > Justin > > > > [1] https://issues.apache.org/jira/browse/ARTEMIS-4234 > > > > On Thu, Aug 17, 2023 at 12:13 PM Vojtěch Frič > > <vojtech.f...@manta.io.invalid> > > wrote: > > > > > Hi. > > > > > > After upgrading to Artemis 2.30 which contains changes from > > > https://issues.apache.org/jira/browse/ARTEMIS-4234 one of our tests > > > started failing. We were able to track it down to the previously > > > mentioned issue. > > > > > > Fixing of the leaking ClientConsumer resources in the > > > EmbeddedActiveMQResource causes the underlying data stream to be mark > as > > > closed as well. This means it is not possible to actually save the > > > received message into a buffer. The result is AMQ219023: > > > > > > > > > ActiveMQIllegalStateException[errorType=ILLEGAL_STATE > message=AMQ219023: > > > The large message lost connection with its session, either because of a > > > rollback or a closed session > > > ] > > > at > > > > > > > > > org.apache.activemq.artemis.core.client.impl.LargeMessageControllerImpl.saveBuffer(LargeMessageControllerImpl.java:265) > > > at > > > > > > > > > org.apache.activemq.artemis.core.client.impl.ClientLargeMessageImpl.saveToOutputStream(ClientLargeMessageImpl.java:113) > > > at LargeMessageTest.testInputStream(LargeMessageTest.java:68) > > > > > > > > > I have a working example showing this error available here > > > https://github.com/sutr90/artemis-junit-large-message/tree/master > > > > > > > > > Can you advise how to fix this test, or confirm that this is expected > > > behavior of the EmbeddedActiveMQResource? > > > > > > > > > Thank you. > > > > > > Vojtěch Frič > > > > > > > > > -- > > > *This email is intended solely for the addressee(s) and all its > contents, > > > including all attachments and files transmitted with it, represent > > > confidential information. Unauthorized distribution, modification or > > > disclosure of its contents and unauthorized reliance on its contents > are > > > prohibited. If you have received this email in error, please notify the > > > sender immediately by return email. Please then delete the email from > > your > > > system and do not (i) copy or distribute it, (ii) rely on its contents, > > or > > > (iii) disclose its contents to any person.* > > > > > > > > > -- > Clebert Suconic >