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.