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

Reply via email to