《高级Web技术》参考资料:3-应用web_5-J2EE框架_阅读参考资料_spring事务管理机制_Spring事务管理实例

Spring事务管理配置过程 说明 该实例是针对web容器的实例, Spring的配置文件的初始化工作完成之后,将存在于web服务容器中。 Spring事务管理配置文件 数据源定义 S(jdbc driver Name) S jdbc. url) Sdbe username value> jdbc. max Active) contextconfigLocation
Spring 事务管理配置过程 说明 该实例是针对 web 容器的实例,Spring 的配置文件的初始化工作完成之后,将存在于 web 服务容器中。 Spring 事务管理配置文件 ${jdbc.driverClassName} ${jdbc.url} ${jdbc.username} ${jdbc.password} ${jdbc.maxActive} 初始化配置文件 在 web 应用中的 web.xml 中添加如下代码即可进行初始化工作 contextConfigLocation

的配置文件放在web-inf/c1 asses/ spring目录下--> /WEB-INE/spring/*.xml org. springframework web context. ContextLoaderlistener 上述代码的意义很简单,通过 Context loader Listener调用 context-param中所定义的 Spring配置文件,进行初始化工作 将 Spring的 ApplicationContext放到内存 将 Spring的上下文放到内存,方便程序调用 通过 Servlet将 Spring的上下文放到内存 public class SmeStarTer extends Http servlEt private static WebApplication Context context =null ∥上下文环境静态类 南执行初始化动作。 *aseejavax.servlethttpHttpservlet#<clinito public void init(javax. servlet Servlet Config config)throws javax. servlet Servlet Exception i 初始化动作 ontext= WebApplicationContextUtils get WebApplication Context(config. getServletContexto) Application Context set Context( context)
/WEB-INF/spring/*.xml org.springframework.web.context.ContextLoaderListener 上述代码的意义很简单,通过 ContextLoaderListener 调用 context-param 中所定义的 Spring 配置文件,进行初始化工作。 将 Spring 的 ApplicationContext 放到内存 将 Spring 的上下文放到内存,方便程序调用 通过 Servlet 将 Spring 的上下文放到内存 public class SMEStarter extends HttpServlet { private static WebApplicationContext context = null; // 上下文环境静态类 /** * 执行初始化动作。 * @see javax.servlet.http.HttpServlet# () */ public void init(javax.servlet.ServletConfig config) throws javax.servlet.ServletException { super.init(config); //初始化动作 ontext = WebApplicationContextUtils.getWebApplicationContext(config.getServletContext()); ApplicationContext.setContext(context); } /* * (非 Javadoc) * @see javax.servlet.Servlet#destroy()

public void destroyO i 取得上下文环境静态类 reture上下文环境静态类 public static WebApplication Context get Application ContextOi return context. ApplicationContext. java代码 public class Application Context f private static Log log=Log Factory get Log( Log Constants. COMMON LOG); ∥ Spring Framework的应用上下文对象 orivate static org. springframework context Application Context context=null 取得 Spring Framework的应用上下文对象。 areturn WebApplication Context Spring Framework的应用上下文对象 public static org. springframework, context Application Context get ApplicationContextOi return context. *设置 Spring Framework的应用上下文对象 * param context Spring Framework的应用上下文对象
*/ public void destroy() { super.destroy(); } /** * 取得上下文环境静态类。 * @return 上下文环境静态类 */ public static WebApplicationContext getApplicationContext() { return context; } } ApplicationContext.java 代码 public class ApplicationContext { private static Log log = LogFactory.getLog(LogConstants.COMMON_LOG); // Spring Framework 的应用上下文对象 private static org.springframework.context.ApplicationContext context = null; /** * 取得 Spring Framework 的应用上下文对象。 * @return WebApplicationContext Spring Framework 的应用上下文对象 */ public static org.springframework.context.ApplicationContext getApplicationContext() { return context; } /** * 设置 Spring Framework 的应用上下文对象。 * @param context Spring Framework 的应用上下文对象

public static void set Context(org. springframework context Application Context context) Application Context context=context *取得在上下文配置文件中定义的类的实例。p> 当name为nuI或者长度为0的字符串时,抛出 IllegalArgumentException异常 param name在上下文配置文件中定义的类的名称 name为nul或者name对应的对象不存在时, 抛出java. lang. IllegalAccessException异常,并记录 error日志 areturn Object类的实例 if(name=null name length(==0)i throw new Illegal Argument Exception("必须指定要创建的对象的name"), Object ret=null context. get Bean( name) 1 catch(NoSuch Bean Definition Exception nsbde)i log errort("找不到指定的对象[name="+name+"]", nsbde) i catch( Beans Exception be)t log error("无法创建指定的对象[name="+name+"]",be), } return ret: 在 Struts中的 action中调用 Spring的事务管理 public Action Forward execute( final Action Mapping mapping, final Action Form form, final hTtp Servletrequest request final Http servlet Response response)throws Exception i
*/ public static void setContext(org.springframework.context.ApplicationContext context) { ApplicationContext.context = context; } /** * 取得在上下文配置文件中定义的类的实例。 * 当name为 null 或者长度为 0 的字符串时,抛出IllegalArgumentException异常。 * @param name 在上下文配置文件中定义的类的名称。 * name 为 null 或者 name 对应的对象不存在时, * 抛出 java.lang.IllegalAccessException 异常,并记录 error 日志 * @return Object 类的实例 */ public static Object getBean(String name) { if (name == null || name.length() == 0) { throw new IllegalArgumentException("必须指定要创建的对象的 name"); } Object ret = null; try { ret = context.getBean(name); } catch (NoSuchBeanDefinitionException nsbde) { log.error("找不到指定的对象 [name=" + name + "]", nsbde); } catch (BeansException be) { log.error("无法创建指定的对象 [name=" + name + "]", be); } return ret; } } 在 Struts 中的 action 中调用 Spring 的事务管理 public ActionForward execute(final ActionMapping mapping, final ActionForm form, final HttpServletRequest request, final HttpServletResponse response) throws Exception {

∥ DataSoureeTransaction Manager是 Spring Framework提供的针对 Data Source的事务管理类 ∥见 Spring的配置文件 final Data SourceTransaction Manager transaction Manager =( DataSource TransactionManager)Application Context. get Bean("transactionManager"); final String Wrapper forward =new String Wrapper final Exception Wrapper exception=new Exception Wrapper ∥ Transaction Template是 Spring Framework对事务操作的封装类,调用其 executed方法即可完成事务的操作 ∥ scute方法的参数有 Transaction Callback和 Transaction Callback Resul两种,本实例中采用后者。 ∥调用时需要实现 Transaction callback Without Result类的 don Transaction Without Result( ransaction Status) ∥方法,在该方法中调用事务操作的实际代码。当需要 rollback时,调用 Transaction Status set RollbackonIy0方法即可 TransactionTemplate tx Template= new Transaction Template( transaction Manager); txTemplate. execute(new Transaction Callback Without Resulto) ∥实现抽象方法,该方法中完成事务的具体操作 public void don Transaction WithoutResult(org. springframework transaction Transaction Status tStatus)i 注意,必须還过 transactionManager同一实例获取 DataSource,这样才能保证是同一事务 saction Manager. get DataSource 所有的操作都在该方法内执行 DataSource必须传到后面的子方法中,这样才能保证是同一事务 updateOperator I(bean, c I catch(Exception e)i /出现错误事务回滚 ); ∥进行事务操作( commit、 rollback等的过程中发生异常 log error("执行 Action时发生事务操作错误",txe)
// DataSourceTransactionManager 是 Spring Framework 提供的针对 DataSource 的事务管理类 //见 Spring 的配置文件 final DataSourceTransactionManager transactionManager = (DataSourceTransactionManager) ApplicationContext.getBean("transactionManager"); final StringWrapper forward = new StringWrapper(); final ExceptionWrapper exception = new ExceptionWrapper(); // TransactionTemplate 是 Spring Framework 对事务操作的封装类,调用其 execute()方法即可完成事务的操作。 // execute()方法的参数有 TransactionCallback 和 TransactionCallbackWithoutResult 两种,本实例中采用后者。 // 调用时需要实现 TransactionCallbackWithoutResult 类的 doInTransactionWithoutResult(TransactionStatus) // 方法,在该方法中调用事务操作的实际代码。当需要 rollback 时,调用 TransactionStatus.setRollbackOnly()方法即可。 TransactionTemplate txTemplate = new TransactionTemplate(transactionManager); try { txTemplate.execute(new TransactionCallbackWithoutResult() { // 实现抽象方法,该方法中完成事务的具体操作 public void doInTransactionWithoutResult(org.springframework.transaction.TransactionStatus tStatus) { //注意,必须通过 transactionManager 同一实例获取 DataSource,这样才能保证是同一事务 DataSource ds = transactionManager.getDataSource(); //所有的操作都在该方法内执行 Try{ //DataSource 必须传到后面的子方法中,这样才能保证是同一事务 updateOperator1(bean,ds) operator2(bean,ds) }catch(Exception e) { //出现错误事务回滚 tStatus.setRollbackOnly(); } } } ); } catch (TransactionException txe) { // 进行事务操作(commit、rollback 等)的过程中发生异常 log.error("执行 Action 时发生事务操作错误", txe);

f catch(Throwable t)i 所有的异常都必须包装,不能直接抛出 log erron("执行 Action时发生未知错误,t) 数据库层操作的相关代码 数据库层操作所用到的 Data Source必须通过 action层传入 public void add(final Bean bean, Data Source ds)i JdbcTemplate jt= new JdbcTemplate( ds) String Buffer sql= new String Buffer("INSERT INTO ") sql append(table Name) sql append("(c ow_ id, c perm, c en id, c ow type, c func)"); sql append("VALUES(, 7, 2,2, 7)") jt update(sql toString(, new PreparedStatement SetterOi public void set Values( PreparedStatement ps)throws SQLException 4 ps. setLong(l, bean. getOwnerido) ps setInt(2, bean getPermissions(); ps. setLong(3, bean. get Entityido); ps. setlnt(4, bean. getOwner Type) ps setInt(5, bean. getFuno)
} catch (Throwable t) { // 所有的异常都必须包装,不能直接抛出 log.error("执行 Action 时发生未知错误", t); } 数据库层操作的相关代码 数据库层操作所用到的 DataSource 必须通过 action 层传入。 public void add(final Bean bean,DataSource ds) { JdbcTemplate jt = new JdbcTemplate(ds); StringBuffer sql = new StringBuffer("INSERT INTO "); sql.append(tableName); sql.append("(c_ow_id,c_perm,c_en_id,c_ow_type,c_func)"); sql.append(" VALUES(?,?,?,?,?)"); jt.update(sql.toString(), new PreparedStatementSetter() { public void setValues(PreparedStatement ps) throws SQLException { ps.setLong(1, bean.getOwnerid()); ps.setInt(2, bean.getPermissions()); ps.setLong(3, bean.getEntityid()); ps.setInt(4, bean.getOwnerType()); ps.setInt(5, bean.getFun()); } }); }
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 《高级Web技术》参考资料:3-应用web_5-J2EE框架_阅读参考资料_spring事务管理机制_Spring中文手册.pdf
- 《高级Web技术》参考资料:3-应用web_5-J2EE框架_阅读参考资料_Java设计模式中文版.pdf
- 《高级Web技术》参考资料:3-应用web_5-J2EE框架_阅读参考资料_JavaProxySamples_代理模式.docx
- 《高级Web技术》参考资料:3-应用web_5-J2EE框架_阅读参考资料_JavaProxySamples_Java中的观察者模式(Observer).docx
- 《高级Web技术》参考资料:3-应用web_5-J2EE框架_阅读参考资料_JavaObserverSamples_Java中的观察者模式(Observer).docx
- 《高级Web技术》参考资料:3-应用web_5-J2EE框架_阅读参考资料_J2EE高级框架实战教学视频PPT_PPT_附9Jdbc1.pdf
- 《高级Web技术》参考资料:3-应用web_5-J2EE框架_阅读参考资料_J2EE高级框架实战教学视频PPT_PPT_附8Servlet2.pdf
- 《高级Web技术》参考资料:3-应用web_5-J2EE框架_阅读参考资料_J2EE高级框架实战教学视频PPT_PPT_附7Servlet1.pdf
- 《高级Web技术》参考资料:3-应用web_5-J2EE框架_阅读参考资料_J2EE高级框架实战教学视频PPT_PPT_附6Jsp3.pdf
- 《高级Web技术》参考资料:3-应用web_5-J2EE框架_阅读参考资料_J2EE高级框架实战教学视频PPT_PPT_附5Jsp2.pdf
- 《高级Web技术》参考资料:3-应用web_5-J2EE框架_阅读参考资料_J2EE高级框架实战教学视频PPT_PPT_附4Jsp1.pdf
- 《高级Web技术》参考资料:3-应用web_5-J2EE框架_阅读参考资料_J2EE高级框架实战教学视频PPT_PPT_附3多态和反射.pdf
- 《高级Web技术》参考资料:3-应用web_5-J2EE框架_阅读参考资料_J2EE高级框架实战教学视频PPT_PPT_附2集合.pdf
- 《高级Web技术》参考资料:3-应用web_5-J2EE框架_阅读参考资料_J2EE高级框架实战教学视频PPT_PPT_附1软件安装.pdf
- 《高级Web技术》参考资料:3-应用web_5-J2EE框架_阅读参考资料_J2EE高级框架实战教学视频PPT_PPT_附10Jdbc2.pdf
- 《高级Web技术》参考资料:3-应用web_5-J2EE框架_阅读参考资料_J2EE高级框架实战教学视频PPT_PPT_前言.pdf
- 《高级Web技术》参考资料:3-应用web_5-J2EE框架_阅读参考资料_J2EE高级框架实战教学视频PPT_PPT_40设计模式(3).pdf
- 《高级Web技术》参考资料:3-应用web_5-J2EE框架_阅读参考资料_J2EE高级框架实战教学视频PPT_PPT_39设计模式(2).pdf
- 《高级Web技术》参考资料:3-应用web_5-J2EE框架_阅读参考资料_J2EE高级框架实战教学视频PPT_PPT_38设计模式(1).pdf
- 《高级Web技术》参考资料:3-应用web_5-J2EE框架_阅读参考资料_J2EE高级框架实战教学视频PPT_PPT_37案例6.pdf
- 《高级Web技术》参考资料:3-应用web_5-J2EE框架_阅读参考资料_Sun+J2EE+宠物店_EJB设计模式(petStore).pdf
- 《高级Web技术》参考资料:3-应用web_5-J2EE框架_阅读参考资料_Sun+J2EE+宠物店_Sun J2EE 宠物店例子介绍_1.doc
- 《高级Web技术》参考资料:3-应用web_5-J2EE框架_阅读参考资料_Sun+J2EE+宠物店_Sun J2EE 宠物店例子介绍_2.doc
- 《高级Web技术》参考资料:3-应用web_5-J2EE框架_阅读参考资料_Sun+J2EE+宠物店_原始码追踪记(1).pdf
- 《高级Web技术》参考资料:3-应用web_5-J2EE框架_阅读参考资料_Sun+J2EE+宠物店_原始码追踪记(2)-Model 篇.pdf
- 《高级Web技术》参考资料:3-应用web_5-J2EE框架_阅读参考资料_Sun+J2EE+宠物店_原始码追踪记(3)-商业逻辑处理.pdf
- 《高级Web技术》参考资料:3-应用web_5-J2EE框架_阅读参考资料_Sun+J2EE+宠物店_宠物店.doc
- 《高级Web技术》参考资料:3-应用web_5-J2EE框架_阅读参考资料_实用j2ee设计模式编程指南(PDF)_实用J2EE设计模式编程指南.pdf
- 《高级Web技术》参考资料:4-RESTFUL WEBSERVICES_4-Service web_introduction_of_rest_and_restful_webservices.ppt
- 复旦大学:《高级Web技术》0-class intro_[07级]教学课件PPT_class introduction.ppt
- 复旦大学:《高级Web技术》1-webapp outline_[07级]教学课件PPT_web app outline.ppt
- 复旦大学:《高级Web技术》2-Web上的数据标准-XML_1-XML基础—概述与语法_[07级]教学课件PPT_XML基础—概述与语法.ppt
- 复旦大学:《高级Web技术》2-Web上的数据标准-XML_1-XML基础—概述与语法_[07级]教学课件PPT_XML改错.ppt
- 复旦大学:《高级Web技术》2-Web上的数据标准-XML_2-XML描述和验证规范-DTD-SCHEMA_[07级]教学课件PPT_xml-dtd.ppt
- 复旦大学:《高级Web技术》2-Web上的数据标准-XML_2-XML描述和验证规范-DTD-SCHEMA_[07级]教学课件PPT_xml-schema.ppt
- 复旦大学:《高级Web技术》2-Web上的数据标准-XML_3-XML转换标准-XSL_[07级]教学课件PPT_xml-xsl.ppt
- 复旦大学:《高级Web技术》2-Web上的数据标准-XML_4-XML程序接口-java&XML_[07级]教学课件PPT_xml-java.ppt
- 复旦大学:《高级Web技术》2-Web上的数据标准-XML_5-XML链接语言-XLL_[07级]教学课件PPT_xml-xll.ppt
- 复旦大学:《高级Web技术》2-Web上的数据标准-XML_6-XML应用_[07级]教学课件PPT_xml应用.ppt
- 复旦大学:《高级Web技术》3-应用web_1-分布式计算与中间件概述_教学课件PPT_分布式计算与中间件概述.ppt