Resin JCA ActiveMQ How to

From Resin 4.0 Wiki

Revision as of 00:00, 6 February 2013 by Rick (Talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Resin, ActiveMQ and JCA

ActiveMQ can be configured in Resin using ActiveMQ's JCA adapter.

You can get the ActiveMQ RAR file at:

http://repo1.maven.org/maven2/org/apache/activemq/activemq-rar/5.7.0/activemq-rar-5.7.0.rar

In the resin.xml, you'll need to add a <resource-deploy> tag to tell Resin where to look for resources:

  <resin xmlns="http://caucho.com/ns/resin">
    <cluster id="">
        <host id="">
           <resource-deploy path="/somedir/that/has/jca-rar/files/deploy"/>
            ...
         </host>
     </cluster>
  </resin>

Then, in your resin-web.xml (under WEB-INF of your webapp), you'll need to configure the connector. It will look like:

<?xml version="1.0" encoding="UTF-8" ?>
<web-app xmlns="http://caucho.com/ns/resin">

	<resource-adapter class="org.apache.activemq.ra.ActiveMQResourceAdapter">
		<init server-url="vm://localhost" />
	</resource-adapter>

	<connection-factory class="org.apache.activemq.ra.ActiveMQManagedConnectionFactory" name="activemq" />
	<jms-queue class="org.apache.activemq.command.ActiveMQQueue" name="test">
		<init physical-name="queue.test" />
	</jms-queue>
</web-app>
 
  • The <resource-adapter> configures a JCA resource-adapter.
  • The <init> block configures the resource adapter parameters. Refer to ActiveMQ or the ra.xml file of the expanded rar file to see what parameters you can configure.
  • The <connection-factory> configures the outbound factory
  • The <jms-queue> configures the Queue (i.e. the adminobject)
package com.example;

import java.io.IOException;

import javax.inject.Inject;
import javax.inject.Named;
import javax.jms.JMSException;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueSender;
import javax.jms.QueueSession;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class Sender
 */
@WebServlet("/Sender")
public class Sender extends HttpServlet {

	@Inject @Named("activemq")
	QueueConnectionFactory _factory;
	@Inject @Named("test")
	Queue _queue;

	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		
		QueueConnection conn = null;
		QueueSession session = null;
		QueueSender sender = null;

		try {

			 conn = _factory.createQueueConnection();
			 session = conn.createQueueSession(false,
					QueueSession.AUTO_ACKNOWLEDGE);
			sender = session.createSender(_queue);
			sender.send(_queue, session.createTextMessage("test"));
			response.getWriter().println("SENT");

		} catch (JMSException e) {
			throw new ServletException(e);
		} finally {
			try {
				conn.close();
				session.close();
				sender.close();
			} catch (JMSException e) {
				throw new ServletException(e);
			}
		}
	}

}

Personal tools
TOOLBOX
LANGUAGES