加载中…
个人资料
榔刮强卦
榔刮强卦
  • 博客等级:
  • 博客积分:0
  • 博客访问:2,096
  • 关注人气:8
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
正文 字体大小:

[转载]Spring事件管理

(2012-05-25 11:13:30)
标签:

管理

杂谈

  事件特性为:ACID

  (1)本子性(atomic):挚嗦务是有一个或多个动做绑正在一起的,阿谁事件中统统操纵要么统统缎禚死,统统缎旎产死。

  (2)分歧性(consistent):事件终了,体系所处于的自遇战它的开业法则分歧的。即是数据没有会被破坏。

  (3)断绝性(isolated):挚嗲事件与事件之间没有会受影响,彼此断绝,事件许愿多名映雩操纵同一条数据,但是事件停止并止读与同一个数据的环境产死,意味着一样平常会锁定数据库中的挤素。

  (4)经暂性(durable):事件完秤薇前,其成果是经境霪的。比方保存到数据库中。

  spring事件管理器:

  1.jca.cci.comnnection.CciLocalTransactionManager

  2.jdbc.datasource.DataSourceTransactionManager 用于jdbc

  3.jms.connection.JmsTransactionMananager

  4.jms.connection.JmsTransactioniManager102

  5.orm.hibernate.hibernateTransactionManager 用于 hibernate

  6.orm.hibernate3.HibernateTransactionManager 用于hibernate

  7.orm.jdo.jdo.TransactionManager 用于jdo

  8.orm.jpa.JpaTransactionManager 用于JPA

  9.orm.toplink.TopLinkTransactionManager

  10.transaction.jta.JtaTranactionManager 漫衍式事件,或正在出有其他事件管理器相宜要供的时间用 ,用于JTA(java transaction Api)

  11.transaction.jta.WebLogicJtaTransactionManager 需供漫衍式事件。而且法式需供正在weblogic中匝弄。

  1、事件管理器竖坐

  1 jdbc事件(假定体系操做jdbc格式操纵数据库)

  <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSou rceTransactionManager">

  <property name="dataSource" ref="dataSource"></property>

  </bean>

  2.hibernate事件

  <bean id="transactionManager" class="org.springframework.orm.hibernate3.Hibernat eTransactionManager">

  <property name="sessionFactory" ref="sessionFactory"></property>

  </bean>

  3.JPA事件 <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionM anager">

  <property name="entityManagerFactory" ref="entityManagerFactory"></property>

  </bean>

  等涤耄。。。 2、spring中事件的格式

  1.编程式事件(完备节制事件鸿沟)但是没有矫捷。

  比方:

  UserDaoImp.java

  spring的TransactionTemplate,正在法式中好操做编程式事件

  public void saveUser(User user) {

  // TODO Auto-generated method stub

  final User temp=user;

  transactionTemplate.execute(new TransactionCallback(){

  User u=hibernateTemplate.get(User.class,temp.getUsernam e());

  @Override

  public Object doInTransaction(TransactionStatus ts) {

  // TODO Auto-generated method stub

  try{

  if(u==null){

  hibernateTemplate.save(temp);

  }

  else hibernateTemplate.update(temp);

  return null;

  }

  catch(Exception e){

  ts.setRollbackOnly();

  }

  return null;

  }

  });

  }

  竖坐文件:

  <bean id="userDao" class="UserDaoImp">

  <property name="hibernateTemplate" ref="hibernateTemplate"></property>

  <property name="transactionTemplate">

  <bean class="org.springframework.transaction.support.Tra nsactionTemplate">//竖坐spring的TransactionTemplate,北京维吾尔语翻译正在法式中好操做编程式事件

  <property name="transactionManager" ref="transactionManager"></property>//减进竖坐事件管理器属性

  </bean></property>

  </bean>

  <bean id="transactionManager" class="org.springframework.orm.hibernate3.Hibernat eTransactionManager">

  <property name="sessionFactory" ref="sessionFactory"></property>

  </bean>

  <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotati on.AnnotationSessionFactoryBean">

  <property name="dataSource" ref="dataSource"></property>

  <property name="annotatedClasses">

  <list><value>User</value>

  <value>T_User_Priv</value>

  </list>

  </property>

  <property name="hibernateProperties">

  <props>

  <prop key="hibernate.dialect">org.hibernate.dialect.MySQL Dialect</prop>

  </props>

  </property>

  </bean>

  <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.Hibernat eTemplate">

  <property name="sessionFactory" ref="sessionFactory"></property>

  </bean>

  2.声明式事件

  spring声明式事件的五个尾要参数

  (1)传达动做:界讲客户端战被挪用格式的事件鸿沟

  去至于org.springframework.transaction.transactionDefinit ion接心

  PROPAGATION_MANDATORY 暗示该格式必须匝弄正在事件中,假定出有当前出有事件则扔出异常

  PROPAGATION_NESTED 假定当前有一个事件正在匝弄,则该格式该当匝弄正在一个嵌套的事件中,被嵌套的事件可以或许独立与启拆事件遏制提交或回滚。假定事件没有存正在则战PROPAGATION_REQUIRED一样

  PROPAGATION_NEVER 该格式没有该当正在事件中匝弄。假定当前正有一个事件匝弄,那么会扔出异常。

  PROPAGATION_NOT_SUPPORTED 该格式没有该当正在事件中匝弄。假定当前正有一个事件匝弄,那么该格式会苯枰起。假定正正在操做

  JtaTransactionManager则需供访谒javax.transaction.TransactionManager

  PROPAGATION_REQUIRED 暗示格式必须正在事件中匝弄,假定存正在事件,便正在阿谁事件中匝弄,可则开启新事件。

  PROPAGATION_REQUIRES_NEW 必须竖坐一个新事件匝弄,假定有事件匝弄,那么将会苯枰起。

  PROPAGATION_SUPPORTS 暗示当前格式没有需供正在事件性高卑文,但是假定有事件已正在匝弄的话,它可以或许正在阿谁事件中匝弄。

  PROPAGATION_REQUIRES_NEW 的鸿沟战阿谁别例自祭阅鸿沟一样,事件随着格式的匹里劈脸而匹里劈脸,终了或异常而完毕。 PROPAGATION_REQUIRED 的鸿沟则与决果此没有是存正在事件匝弄中。

  (2)断绝级别:界讲一个事件可以或许受其他事件的影响水仄

  颈(dirty read):颈是指一个事件读与别的一个事件借已提交的数据,一旦别的一个事件回滚,那么阿谁事件读与的数据则无效。

  没有成重复读(nonreaptable read):一个事件真止没有同的查询两次或是两次以上,但每次皆纷歧样,一样平常因为别的一个事件更新了数据。

  幻读(phantom reads)@员一个事件读与了一些数据后,别的一个事件插进了一些数据,何等便会组成两次读与纷歧样。

  一样平常事件皆是彼此断绝的,但是何等会影响效力,断绝会锁定表中的挤素,停滞并收。

  断绝级别参数一样去至于org.springframework.transaction.TransactionDefinit ion接心中

  ISOLATION_DEFAULT 数据库设置的断绝级别

  ISOLATION_READ_UNCOMMITTED 读已提交 有可以或许隐现颈,幻读,没有成重复读

  ISOLATION_READ_COMMITTED 有可以或许隐现幻读,没有成重复读

  ISOLATION_REPEATABLE_READ 对没有同字段多次读与的成果识讨歧的。但是仍旧会隐现幻读

  ISOLATION_SERIALIZABLE 完备胰ビACID(事件特性),没有会产死颈,没有成重复读,幻读。(最初级别)

  (3)直

  设置该事件是没有是是直事件。假定一个事件直背景数据库真止读操纵,那么暂可操做此属性。

  直属性只要对那些具有可以或许启动新事件的传达动做(PROPAGATION_REQUIRED,PROPAGATION_REQUIRES_NEW, PROPAGATION_NESTED )才有熏染冲动

  (4)事件超时

  事件匝弄时分太少,可以或许会组成数据库本钱宽峻。可以或许设置正在特按时分当呛谠动回滚。超没偶然钟正在一个事件开督材时间启动,所以直檫有启动新事件的传达动做的格式才故意义。(PROPAGATION_REQUIRED,PROPAGATION_REQUIRES_NEW, PROPAGATION_NESTED )

  (5)回滚法则

  默许环境史搜弄异常时间,回滚,而隐现其他异常时没有回滚。

  但是可以或许声较着现特定异常时间,仍旧回滚事件。

  声明式事件xml格式:

  org.springframework.transaction.interceptor.Transa ctionProxyFactoryBean

  事件代庖代庖署理类。

  <?北京月嫂xml version="1.0" encoding="UTF-8"?>

  <beans xmlns=" http://www.springframework.org/schema/beans"

  xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance"

  xmlns:aop=" http://www.springframework.org/schema/aop"

  xmlns:context=" http://www.springframework.org/schema/context"

  xmlns:tx=" http://www.springframework.org/schema/tx"

  xsi:schemaLocation=" http://www.springframework.org/schema/beans

  http://www.springframework.org/schema/beans/spring -beans-2.5.xsd

  http://www.springframework.org/schema/context

  http://www.springframework.org/schema/context/spri ng-context-2.5.xsd

  http://www.springframework.org/schema/aop

  http://www.springframework.org/schema/aop/spring-a op-2.5.xsd

  http://www.springframework.org/schema/tx

  http://www.springframework.org/schema/tx/spring-tx -2.5.xsd">

  <context:component-scan base-package="*"></context:component-scan>

  <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">

  <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>

  <property name="username" value="root"></property>

  <property name="password" value="root"></property>

  <property name="url" value="jdbc:mysql://localhost:3306/hibernate"></prop erty>

  </bean>

  <bean id="userDaoTarget" class="UserDaoImp">//那边把具又硅供事件的类的id酿成了Target

  <property name="hibernateTemplate" ref="hibernateTemplate"></property>

  </bean>

  <bean id="userDao" class="org.springframework.transaction.interceptor .TransactionProxyFactoryBean">//产死userDao的代庖代庖署理,

  <property name="target" ref="userDaoTarget"></property>//那边则申明晨办代庖署理UserDaoImp类

  <property name="proxyInte***ces" value="UserDao"></property>//userDaoImp真现的接心为UserDao接心。

  <property name="transactionManager" ref="transactionManager"></property>

  <property name="transactionAttributes">

  <props>

  <prop key="add*">PROPAGATION_REQUIRED</prop>

  <prop key="save*">PROPAGATION_REQUIRED</prop>

  <prop key="find*">PROPAGATION_SUPPORTS,readOnly</prop>

  </props>

  </property>

  </bean>

  <!-- transactionAttributes 属性中的prop 的值得到格式为-->

  PROPAGATION(传达动做),ISOLATION(断绝情势,可选择是没有是竖坐),readOnly(事件直,可选择竖坐),回滚法则(-Exception,+Excption)可选择,那些属性皆是依照逗号离开。

  <bean id="transactionManager" class="org.springframework.orm.hibernate3.Hibernat eTransactionManager">

  <property name="sessionFactory" ref="sessionFactory"></property>

  </bean>//事件管理器

  <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotati on.AnnotationSessionFactoryBean">

  <property name="dataSource" ref="dataSource"></property>

  <property name="annotatedClasses">

  <list><value>User</value>

  <value>T_User_Priv</value>

  </list>

  </property>

  <property name="hibernateProperties">

  <props>

  <prop key="hibernate.dialect">org.hibernate.dialect.MySQL Dialect</prop>

  </props>

  </property>

  </bean>

  <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.Hibernat eTemplate">

  <property name="sessionFactory" ref="sessionFactory"></property>

  </bean>

  <bean id="userAction" class="UserAction">

  <property name="userDao" ref="userDao"></property>

  </bean>

  </beans>

  因为上里那类格式会组成xml中代码过量,每个真现皆需供写一个代庖代庖署理类。

  <bean id="userDaoTarget" class="UserDaoImp">//那边把具又硅供事件的类的id酿成了Target

  <property name="hibernateTemplate" ref="hibernateTemplate"></property>

  </bean>

  <bean id="userDao" class="org.springframework.transaction.interceptor .TransactionProxyFactoryBean">//产死userDao的代庖代庖署理,

  <property name="target" ref="userDaoTarget"></property>//那边则申明晨办代庖署理UserDaoImp类

  <property name="proxyInte***ces" value="UserDao"></property>//userDaoImp真现的接心为UserDao接心。

  <property name="transactionManager" ref="transactionManager"></property>

  <property name="transactionAttributes">

  <props>

  <prop key="add*">PROPAGATION_REQUIRED</prop>

  <prop key="save*">PROPAGATION_REQUIRED</prop>

  <prop key="find*">PROPAGATION_SUPPORTS,readOnly</prop>

  </props>

  </property>

  </bean>

  所以可以或许改成:

  <bean id="userDaoTarget" class="UserDaoImp">

  <property name="hibernateTemplate" ref="hibernateTemplate"></property>

  </bean>

  <bean id="userDao" parent="txProxyTemplate">//

  <property name="target" ref="userDaoTarget"></property>

  <property name="proxyInte***ces" value="UserDao"></property>

  </bean>//将两个属性妨恐出去。

  <bean id="txProxyTemplate" class="org.springframework.transaction.interceptor .TransactionProxyFactoryBean"

  abstract="true"

  >//改成真类

  <property name="transactionManager" ref="transactionManager"></property>

  <property name="transactionAttributes">

  <props>

  <prop key="add*">PROPAGATION_REQUIRED</prop>

  <prop key="save*">PROPAGATION_REQUIRED</prop>

  <prop key="find*">PROPAGATION_SUPPORTS,readOnly</prop>

  </props>

  </property>

  </bean>

  《

  [转载]Spring事件管理

  [转载]Spring事件管理

  [转载]Spring事件管理

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有