This is an example of how to combine a UserTransaction using the JBoss JMS Adapter.
This also shows how to enlist multiple resources in the same transaction. In this example we enlist a JMS JCA session resource and a JCA JDBC resoruce in the same transaction.
import java.io.*; import javax.annotation.Resource; import javax.ejb.TransactionAttribute; import javax.ejb.TransactionAttributeType; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.MessageProducer; import javax.jms.Queue; import javax.jms.QueueConnectionFactory; import javax.jms.Session; import javax.jms.TextMessage; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.servlet.*; import javax.servlet.http.*; import javax.sql.DataSource; import javax.transaction.TransactionManager; import java.sql.*; import org.apache.log4j.Logger; /** * @author leeyoume * test url : http://localhost:8080/testWebApp/servlet1 */ public class ServletMain1 extends HttpServlet { Logger logger = Logger.getLogger(ServletMain1.class); InitialContext ic; protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { UserTransaction ut = null; try { ic = new InitialContext(); //Get User Transaction ut = (UserTransaction ) ic.lookup("UserTransaction"); } catch (Exception e) { // TODO: handle exception logger.error(e); throw new ServletException(e); } logger.info("Inside doGet."); // XA test try { ut.begin(); sendMsg(); saveRecord(1); ut.commit(); } catch (Exception e) { // TODO: handle exception try { ut.rollback(); } catch (Exception ex) { // TODO: handle exception logger.error(ex); } logger.error(e); } res.setContentType("text/html"); PrintWriter out = res.getWriter(); out.println("<HTML><HEAD><TITLE>Hello Client!</TITLE>"+ "</HEAD><BODY>Hello Client!</BODY></HTML>"); out.close(); } public void sendMsg() throws Exception { Connection connection = null; Session session = null; MessageProducer sender = null; try { //to use resource adapter QueueConnectionFactory qcf = (QueueConnectionFactory) ic.lookup("java:/JmsXA"); Queue q = (Queue) ic.lookup("jnp://localhost:1099/queue/testQueue"); connection = qcf.createConnection(); session = connection.createSession(true, 0); sender = session.createProducer(q); TextMessage message = session.createTextMessage(); message.setJMSType("foo"); message.setText("hello world"); sender.send(message); logger.info("SENT TO QUEUE."); } catch (Exception e) { e.printStackTrace(); logger.error(e); throw new Exception(e); } finally { if (sender != null) try { sender.close(); } catch (Exception ignore) { } if (session != null) try { session.close(); } catch (Exception ignore) { } if (connection != null) try { connection.close(); } catch (Exception ignore) { } } } public void saveRecord(int sent) throws Exception { java.sql.Connection conn = null; PreparedStatement pstmt = null; try { DataSource ds = (DataSource) ic.lookup("java:/MySqlDS"); conn = ds.getConnection(); pstmt = conn.prepareStatement("INSERT INTO member "+ "(id,name,birth) " + "VALUES (?, ?,?)"); pstmt.setInt(1, sent); pstmt.setString(2, "TAMMY"); pstmt.setString(3, "1978/11/27"); pstmt.executeUpdate(); logger.info("Saved Record."); } catch (Exception e) { e.printStackTrace(); logger.error(e); throw new Exception(e); } finally { try { pstmt.close(); conn.close(); } catch (Exception e) { logger.error(e); throw new Exception(e); } } } }
Comments