package nc.bs.purpose.web.contorller; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServlet; import nc.bs.dao.BaseDAO; import nc.bs.mw.tran.IerpTransactionManagerProxy; import nc.vo.pub.BusinessException; @SuppressWarnings("restriction") public class UserContorller extends HttpServlet{ private static final long serialVersionUID = 1L; @Override public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { try { IerpTransactionManagerProxy tx = getTransactionManager(); BaseDAO dao = new BaseDAO(); String a = req.getParameter("a"); String b = req.getParameter("b"); dao.executeUpdate("UPDATE BD_AREACL SET def4='" + b + "' WHERE PK_AREACL='0001F8100000000009NM'"); BusinessException exception = null; if("1".equals(a)) { exception = new BusinessException(); } tx.end(exception); res.getWriter().write("200 ok"); } catch (Exception e) { res.getWriter().write("403 get ERRORs!"); e.printStackTrace(); }finally { } } private IerpTransactionManagerProxy getTransactionManager() throws Exception { IerpTransactionManagerProxy txp = new IerpTransactionManagerProxy(); txp.begin(1, 2); return txp; } }
注意: txp.begin(1, 2); 此處的參數很重要,通常 1 2 是普通事務,3 2 是新起一個新子事務, 0, 0 只讀線程 無事務!java
參考代碼,其餘的原理同樣.web
NC 源碼參考: ide
nc.bs.framework.server.AbstractContext.dynamicBService(ComponentMeta, Object)ui
nc.itf.framework.ejb.CMTProxy_Local.delegate_RequiresNew(Object, Method, Object[])線程