= Tomcat JMS
:jbake-type: page
:jbake-status: published

Tomcat + Java EE = TomEE, the Java Enterprise Edition of Tomcat.
With TomEE you get Tomcat with JMS added and integrated and ready to go!

In a plain Servlet, Filter or Listener you can do fun things like injection of JMS Topics or Queues:

....
import javax.annotation.Resource;
import javax.servlet.http.HttpServlet;
import javax.jms.Topic;
import javax.jms.Queue;
import javax.jms.ConnectionFactory;

public class MyServet extends HttpServlet {

    @Resource(name = "foo")
    private Topic fooTopic;

    @Resource(name = "bar")
    private Queue barQueue;

    @Resource
    private ConnectionFactory connectionFactory;

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //...

        Connection connection = connectionFactory.createConnection();
        connection.start();

        // Create a Session
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

        // Create a MessageProducer from the Session to the Topic or Queue
        MessageProducer producer = session.createProducer(fooTopic);
        producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);

        // Create a message
        TextMessage message = session.createTextMessage("Hello World!");

        // Tell the producer to send the message
        producer.send(message);

        //...
    }

}
....

No need to add even a single library!
In the above scenario even the "foo" Topic and the "bar" Queue would be automatically created with no configuration necessary.

xref:download-ng.adoc[Download] TomEE and you're minutes away from a functioning JMS application on Tomcat.

include::apache-tomee.adoc[leveloffset=+1]
