纯servlet 下 利用动态代理在service 层实现对事务的管理,servletservice,package org.
分享于 点击 9601 次 点评:172
纯servlet 下 利用动态代理在service 层实现对事务的管理,servletservice,package org.
package org.doudouyota.utils;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;import java.sql.Connection;import org.apache.log4j.Logger;import org.doudouyota.utils.tx.Transaction;public class TxProxy implements InvocationHandler { private Object obj ; private Logger log = Logger.getLogger(TxProxy.class); public TxProxy(Object obj) { this.obj = obj; } /** * 获取被代理以后的对象 * @param ob * @return */ public static <T> T getProxy(T ob) { Object obje = Proxy.newProxyInstance(TxProxy.class.getClassLoader(), ob.getClass().getInterfaces(), new TxProxy(ob)); return (T) obje; } /** * */ public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { if(method.isAnnotationPresent(Transaction.class)) { Object objec = null; Connection conn = null; try { conn = DataSourceUtils.getConn(); conn.setAutoCommit(false); log.debug("开启事务了"); objec = method.invoke(obj, args); conn.commit(); log.debug("提交了一个事务"); } catch (Exception e) { log.debug("事务出错了,回滚数据"); conn.rollback(); } finally { log.debug("事务完成还回连接!"); conn.setAutoCommit(true); conn.close(); } return objec; } else { log.debug("没有使用事务"); return method.invoke(obj, args); } }}//该片段来自于http://byrx.net
用户点评