Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <%@ page import="javax.transaction.TransactionManager" %>
- <%@ page import="javax.transaction.TransactionSynchronizationRegistry" %>
- <%@ page import="javax.naming.InitialContext" %>
- <%@ page import="java.sql.Connection" %>
- <%@ page import="javax.sql.DataSource" %>
- <%@ page import="java.sql.Statement" %>
- <%@ page import="java.sql.ResultSet" %>
- <%@ page import="javax.transaction.UserTransaction" %>
- <%@ page import="javax.transaction.Transaction" %>
- <%@ page contentType="text/html;charset=UTF-8" language="java" %>
- <html>
- <head>
- <title></title>
- </head>
- <body>
- <%!
- private static TransactionManager txManager;
- private static TransactionSynchronizationRegistry txReg;
- private static UserTransaction userTx;
- static {
- try {
- InitialContext ic = new InitialContext();
- txManager = (TransactionManager)
- ic.lookup("java:appserver/TransactionManager");
- txReg = (TransactionSynchronizationRegistry)
- ic.lookup("java:comp/TransactionSynchronizationRegistry");
- userTx = (UserTransaction) ic.lookup("java:comp/UserTransaction");
- } catch (Throwable th) {
- throw new RuntimeException(th);
- }
- }
- %>
- Doing rollback test:<br>
- <%
- userTx.begin();
- InitialContext ic = new InitialContext();
- DataSource ds = (DataSource) ic.lookup("mi_pe");
- Connection conn = ds.getConnection();
- Statement s = conn.createStatement();
- ResultSet rs = s.executeQuery("select nmr from inc_test");
- rs.next();
- %>
- Before : <%=rs.getLong("nmr")%><br>
- <%
- s.close();
- s = conn.createStatement();
- s.executeUpdate("update inc_test set nmr = nmr + 1");
- s.close();
- userTx.rollback();
- conn.close();
- userTx.begin();
- // re-create another connection in a new transaction
- ic = new InitialContext();
- ds = (DataSource) ic.lookup("mi_pe");
- conn = ds.getConnection();
- s = conn.createStatement();
- rs = s.executeQuery("select nmr from inc_test");
- rs.next();
- %>
- After : <%=rs.getLong("nmr")%><br>
- <%
- s.close();
- userTx.rollback();
- conn.close();
- %>
- Doing suspend/resume text.<br>
- <%
- userTx.begin();
- ic = new InitialContext();
- ds = (DataSource) ic.lookup("mi_pe");
- conn = ds.getConnection();
- s = conn.createStatement();
- s.executeUpdate("update inc_test set nmr = nmr + 1");
- s.close();
- s = conn.createStatement();
- rs = s.executeQuery("select nmr from inc_test");
- rs.next();
- %>
- Top transaction has value : <%=rs.getLong("nmr")%><br>
- <%
- s.close();
- Transaction suspended = txManager.suspend();
- userTx.begin();
- ic = new InitialContext();
- ds = (DataSource) ic.lookup("mi_pe");
- Connection conn2 = ds.getConnection();
- s = conn2.createStatement();
- rs = s.executeQuery("select nmr from inc_test");
- rs.next();
- %>
- Nested transaction has value : <%=rs.getLong("nmr")%><br>
- <%
- userTx.rollback();
- conn2.close();
- txManager.resume(suspended);
- s = conn.createStatement();
- rs = s.executeQuery("select nmr from inc_test");
- rs.next();
- %>
- Resumed transaction has value : <%=rs.getLong("nmr")%><br>
- <%
- s.close();
- userTx.rollback();
- conn.close();
- %>
- </body>
- </html>
Advertisement
Add Comment
Please, Sign In to add comment