Version 1

    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);
                }
            }
        }
    }