Here you go:
https://github.com/apache/tomee/pull/578/files#diff-842e4b4a572903cdcd1260b172034a7dR59

Jon

On Mon, Sep 30, 2019 at 9:14 PM Jonathan S. Fisher <exabr...@gmail.com>
wrote:

> Interesting, can you paste the new code that is working (the one with the
> explicit try/close)
>
> On Mon, Sep 30, 2019 at 12:40 PM Ihsan Ecemis <miece...@gmail.com> wrote:
>
> >
> > Hi Jonathan,
> >
> > We do not have a tomee.xml file, we use resources.xml file instead.  I
> > pasted its contents below.
> >
> > BTW, my previous redacted code snippet omitted the following 2 lines from
> > the CustomJmsService class:
> >
> >     @Resource(name = "MyJmsConnectionFactory")
> >     private ConnectionFactory connectionFactory;
> >
> > (in case you wonder where connectionFactory is coming from)
> >
> > Let me know if you see any problems with our resource configuration.
> >
> > Thank you,
> >
> > Ihsan.
> >
> >
> > <?xml version="1.0" encoding="utf-8"?>
> > <resources>
> >     <Resource id="j30DatabaseManaged" type="javax.sql.DataSource">
> >         <!-- See http://tomee.apache.org/datasource-config.html for more
> > options and their meanings -->
> >         jdbcDriver       = org.postgresql.Driver
> >         jdbcUrl          =
> >
> jdbc:postgresql://${database_hostname}:${database_port}/${database_name}${jdbc_ssl_flag}
> >         userName         = ${database_username}
> >         password         = ${database_password}
> >     </Resource>
> >
> >     <Resource id="MyJmsResourceAdapter" type="ActiveMQResourceAdapter">
> >         # Connect to the external ActiveMQ broker running on
> > localhost:61616
> >         BrokerXmlConfig  =
> >         ServerUrl        =  nio://localhost:61616
> >     </Resource>
> >
> >     <Resource id="MyJmsConnectionFactory"
> > type="javax.jms.ConnectionFactory">
> >         ResourceAdapter  = MyJmsResourceAdapter
> >     </Resource>
> >
> >     <Container id="MyJmsMdbContainer" ctype="MESSAGE">
> >         ResourceAdapter  = MyJmsResourceAdapter
> >     </Container>
> > </resources>
> >
> >
> >
> >
> >
> >
> >
> > > On Sep 30, 2019, at 13:08, Jonathan S. Fisher <exabr...@gmail.com>
> > wrote:
> > >
> > > Also, can you post your tomee.xml?
> > >
> > > On Mon, Sep 30, 2019 at 8:14 AM Jonathan Gallimore <
> > > jonathan.gallim...@gmail.com> wrote:
> > >
> > >> Hi,
> > >>
> > >> I'm wondering if this is because your send method isn't closing the
> > >> producer and the session? I did try your code and I saw the issue. I
> > turned
> > >> it into an example, and added an Arquillian test:
> > >> https://github.com/apache/tomee/pull/578
> > >>
> > >> Note that I added the session, producer and consumer into the
> > >> try-with-resources block so they are auto-closed at the end of the
> > method.
> > >>
> > >> Can you take a look and let me know what you think?
> > >>
> > >> Jon
> > >>
> > >> On Fri, Sep 27, 2019 at 6:05 PM Ihsan Ecemis <miece...@gmail.com>
> > wrote:
> > >>
> > >>>
> > >>> Hello Everyone,
> > >>>
> > >>> We recently upgraded our staging environment from TomEE 8.0.0-M3 to
> > 8.0.0
> > >>> and things started to break.
> > >>>
> > >>> After some troubleshooting, we realized that we cannot dequeue JMS
> > >>> messages from our ActiveMQ server using MessageConsumers.
> > >>>
> > >>>
> > >>> We dequeue messages in 2 different ways:  We use MessageDriven beans
> > for
> > >>> most of our queues.  But with some others, we periodically poll by
> > >> creating
> > >>> a MessageConsumer (please see the code below for that second case)
> > >>>
> > >>> MessageDriven beans work without any problems but we cannot receive
> any
> > >>> messages via MessageConsumers.  That same backend code is working
> fine
> > >> with
> > >>> 8.0.0-M3.
> > >>>
> > >>>
> > >>> We tested this with different versions of ActiveMQ server (5.15.6,
> > >> 5.15.9,
> > >>> 5.15.10) but TomEE  8.0.0 did not work with any of them.
> > >>>
> > >>>
> > >>> Below is redacted code snippets showing where we have the problem.
> > >>>
> > >>> Any help will be greatly appreciated.   Please let me know if you
> have
> > >> any
> > >>> questions about our setup.
> > >>>
> > >>> Thanks,
> > >>>
> > >>> Ihsan.
> > >>>
> > >>>
> > >>>
> > >>> @Stateless
> > >>> public class LogService {
> > >>>
> > >>>    @EJB
> > >>>    private CustomJmsService customJmsService;
> > >>>
> > >>>    @javax.ejb.Schedule(second = "*/30", minute = "*", hour = "*")
> > >>>    public void pollLogQueue() throws Exception {
> > >>>        final TextMessage logMessage =
> > >>> customJmsService.receiveLogMessage(1000);
> > >>>        if (logMessage != null) {
> > >>>            persistLogMessages(logMessages);
> > >>>        }
> > >>>    }
> > >>> }
> > >>>
> > >>> @Stateless
> > >>> public class CustomJmsService {
> > >>>
> > >>>    @Resource(name = "logQueue")
> > >>>    private Queue logQueue;
> > >>>
> > >>>    public void sendLogMessage(final LogMessage message) {
> > >>>        sendMessage(logQueue, message);
> > >>>    }
> > >>>
> > >>>    private void sendMessage(final Queue queue, final CustomJmsMessage
> > >>> message) {
> > >>>        try (final Connection connection =
> > >>> connectionFactory.createConnection()) {
> > >>>            connection.start();
> > >>>
> > >>>            final Session session = connection.createSession(true,
> > >>> Session.AUTO_ACKNOWLEDGE);
> > >>>            final MessageProducer producer =
> > >> session.createProducer(queue);
> > >>>            final String serializedMessage =
> > >>> CustomJsonProvider.toJson(message);
> > >>>            final Message jmsMessage =
> > >>> session.createTextMessage(serializedMessage);
> > >>>
> > >>>            // This enqueues messages successfully with both 8.0.0-M3
> > and
> > >>> 8.0.0
> > >>>            producer.send(jmsMessage);
> > >>>        } catch (final Exception e) {
> > >>>            throw new RuntimeException("Caught exception from JMS when
> > >>> sending a message", e);
> > >>>        }
> > >>>    }
> > >>>
> > >>>    public TextMessage receiveLogMessage(final long
> > >> receiveTimeoutMillis) {
> > >>>        return receiveMessage(logQueue, receiveTimeoutMillis);
> > >>>    }
> > >>>
> > >>>    private TextMessage receiveMessage(final Queue queue, final long
> > >>> receiveTimeoutMillis) {
> > >>>        try (final Connection connection =
> > >>> connectionFactory.createConnection()) {
> > >>>            connection.start();
> > >>>
> > >>>            final Session session = connection.createSession(true,
> > >>> Session.AUTO_ACKNOWLEDGE);
> > >>>            final MessageConsumer messageConsumer =
> > >>> session.createConsumer(queue);
> > >>>            final Message jmsMessage =
> > >>> messageConsumer.receive(receiveTimeoutMillis);
> > >>>
> > >>>            // PROBLEM: jmsMessage is always null with 8.0.0. This was
> > >>> working with 8.0.0-M3
> > >>>            if (jmsMessage == null) {
> > >>>                return null;
> > >>>            }
> > >>>
> > >>>            return (TextMessage) jmsMessage;
> > >>>        } catch (final Exception e) {
> > >>>            throw new RuntimeException("Caught exception from JMS when
> > >>> receiving a message", e);
> > >>>        }
> > >>>    }
> > >>> }
> > >>>
> > >>>
> > >>>
> > >>
> > >
> > >
> > > --
> > > Jonathan | exabr...@gmail.com
> > > Pessimists, see a jar as half empty. Optimists, in contrast, see it as
> > half
> > > full.
> > > Engineers, of course, understand the glass is twice as big as it needs
> to
> > > be.
> >
> >
>
> --
> Jonathan | exabr...@gmail.com
> Pessimists, see a jar as half empty. Optimists, in contrast, see it as half
> full.
> Engineers, of course, understand the glass is twice as big as it needs to
> be.
>

Reply via email to