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