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