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
>

Reply via email to