Hello,
I know that ActiveMQ doesn't cover all JMS 2.0 specification.
Could you tell me, please, how far ActiveMQ is close to JMS 2.0 ?
I am asking this question because I am using TomEE 8.0.0 or 8.0.1 with ActiveMQ
5.15.10 embedded.
In an stateless EJB, I inject JMSContext (working) and in a method, I have the
following code:
jmsContext.createProducer().send(messageQueue,
jmsContext.createTextMessage("Test"));
The issue I have is that each time I send a text message a DynamicProducer is
created which could be the root cause of a memory leak.
But looking at the docs:
https://javaee.github.io/javaee-spec/javadocs/javax/jms/JMSContext.html (new
way JMS 2.0)
https://javaee.github.io/javaee-spec/javadocs/javax/jms/Session.html (old way
JMS 1.1)
I find something not coherent. Indeed:
· Using Session (JMS 1.1), we are able to create a Producer targeting a
destination :
createProducer<https://javaee.github.io/javaee-spec/javadocs/javax/jms/Session.html#createProducer-javax.jms.Destination->(Destination<https://javaee.github.io/javaee-spec/javadocs/javax/jms/Destination.html>
destination). So no, dynamic producer is created.
· Using JMSContext (JMS 2.0) , we are able to create a Producer but
with no destination
(createProducer<https://javaee.github.io/javaee-spec/javadocs/javax/jms/JMSContext.html#createProducer-->())
=> dynamic production creation.
Why don't we have on JMSContext the same method
createProducer<https://javaee.github.io/javaee-spec/javadocs/javax/jms/Session.html#createProducer-javax.jms.Destination->(Destination<https://javaee.github.io/javaee-spec/javadocs/javax/jms/Destination.html>
destination) ?
But I also don't get that, according to the JMS 2.0 specification, the
JMSContext injected has a Transaction scope => this mean that after the end of
the method, the JMSContext should be closed so that the dynamic producer.
Do you agree with the behavior described above. If so, Is it an ActiveMQ issue
or a TomEE issue ?
Looking at https://www.oracle.com/technical-resources/articles/java/jms20.html
A sample is provided in § Injecting a JMSContext into a Java EE Application:
context.send(dataQueue, body); => but the JMSContext java doc I
didn't find any send method. So I guess it's a mistake, right ?
Best Regards.