欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

纯servlet 下 利用动态代理在service 层实现对事务的管理,servletservice,package org.

来源: javaer 分享于  点击 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
相关栏目:

用户点评