- 浏览: 164518 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
ooo456mmm:
正解~~~
无需安装oracle,配置plsql developer -
tjuking:
帮我解决了一大问题,thx~
vim批量修改文件 解决 非法字符: \65279 问题 -
dou85dou:
where is lz's content?
如何打造Linux下的IDE
Seam的事务管理
- 博客分类:
- Java
Seam的事务管理
Seam和jsf绑定在一起,seam将jsf的6个阶段包含在2-3个事务中。
1. 第一(二)阶段到第5阶段:
a) 对于JTA事务而言:beforeRestoreView------afterInvokeApplication
b) 对于resouce-Local事务而言:beforeApplyRequestValue------ afterInvokeApplication
2. 如果有page Action,则page Action包含在一个事务中
3. RenderResponse包含在一个事务中
为什么要使用2-3事务来保障一个request,而不是像ssh通常的那样,简单的在crud方法上加上事务呢?
对于1,2而言,主要原因是:防止由于renderresponse的异常,导致已经成功的业务逻辑回滚;同时,如果业务逻辑失败,可以回滚并且导航到其他的页面进行显示。
对于3而言,可能是因为seam认为,当绑定在页面的实体有延迟加载的需求时,如果不是在renderResponese阶段最外层显示的包裹一层事务,那么每次延迟加载引起的数据库查询,hibernate都会单独为这个查询启动和关闭一个事务,这会消耗更多的资源。
Seam提供了这种自动为每个request加上事务的功能,你可以选择将这个功能开启或者关闭。在component.xml中配置:
<core:init transaction-management-enabled=”false”/>
可以关闭seam的全局托管事务的功能。
如果你开启了seam的全局托管事务功能,你可以指定seam使用何种的事务管理器:
UTTransaction
CMTTransaction
EntityTransaction
HibernateTransaction
noTransaction
UTTransaction是seam默认的事务管理器,他会从Context中寻找“UserTransaction”。
CMTTransaction默认的ejb事务管理器,例如调用一个slsb的方法,该方法加了request_new事务,则这个事务由CMTTransaction管理。
如果你只使用一个resouce-local的数据源,不需要JTA事务的支持。那么对于一个resouce-local的数据源,采用JPA的EntityTransaction或者hibernate的hibernateTransaction即可。配置
<tx:entity-transaction/>使用EntityTransaction作为事务管理器
或者
<tx:hibernate-transaxtion/>使用hibernateTransaction作为事务管理器
这些事务管理器都是由seam提供的,他们都实现了seam的UserTransaction接口,只不过实现的方式有所不同。例如,Begin方法:
EntityTransaction通过调用entitymanager.gettransaction.begin实现。
hibernateTransaction通过调用session.gettransaction.begin实现。
根据自己的需要选择适合的事务管理器。
如果使用<tx:no-Transaction/>则一定要关闭seam全局托管事务,否则会seam调用Transaction.instance的方法时,会报异常。
===================================
JTATransaction与JdbcTransaction的区别
JdbcTransaction的使用流程是:
先打开session,再打开trans;最后关闭trans,关闭session。
JTATransaction的使用流程是:
先打开JTATrans,再打开各个session,关闭session,最后关闭JTATrans。
Seam和jsf绑定在一起,seam将jsf的6个阶段包含在2-3个事务中。
1. 第一(二)阶段到第5阶段:
a) 对于JTA事务而言:beforeRestoreView------afterInvokeApplication
b) 对于resouce-Local事务而言:beforeApplyRequestValue------ afterInvokeApplication
2. 如果有page Action,则page Action包含在一个事务中
3. RenderResponse包含在一个事务中
为什么要使用2-3事务来保障一个request,而不是像ssh通常的那样,简单的在crud方法上加上事务呢?
对于1,2而言,主要原因是:防止由于renderresponse的异常,导致已经成功的业务逻辑回滚;同时,如果业务逻辑失败,可以回滚并且导航到其他的页面进行显示。
对于3而言,可能是因为seam认为,当绑定在页面的实体有延迟加载的需求时,如果不是在renderResponese阶段最外层显示的包裹一层事务,那么每次延迟加载引起的数据库查询,hibernate都会单独为这个查询启动和关闭一个事务,这会消耗更多的资源。
Seam提供了这种自动为每个request加上事务的功能,你可以选择将这个功能开启或者关闭。在component.xml中配置:
<core:init transaction-management-enabled=”false”/>
可以关闭seam的全局托管事务的功能。
如果你开启了seam的全局托管事务功能,你可以指定seam使用何种的事务管理器:
UTTransaction
CMTTransaction
EntityTransaction
HibernateTransaction
noTransaction
UTTransaction是seam默认的事务管理器,他会从Context中寻找“UserTransaction”。
CMTTransaction默认的ejb事务管理器,例如调用一个slsb的方法,该方法加了request_new事务,则这个事务由CMTTransaction管理。
如果你只使用一个resouce-local的数据源,不需要JTA事务的支持。那么对于一个resouce-local的数据源,采用JPA的EntityTransaction或者hibernate的hibernateTransaction即可。配置
<tx:entity-transaction/>使用EntityTransaction作为事务管理器
或者
<tx:hibernate-transaxtion/>使用hibernateTransaction作为事务管理器
这些事务管理器都是由seam提供的,他们都实现了seam的UserTransaction接口,只不过实现的方式有所不同。例如,Begin方法:
EntityTransaction通过调用entitymanager.gettransaction.begin实现。
hibernateTransaction通过调用session.gettransaction.begin实现。
根据自己的需要选择适合的事务管理器。
如果使用<tx:no-Transaction/>则一定要关闭seam全局托管事务,否则会seam调用Transaction.instance的方法时,会报异常。
===================================
JTATransaction与JdbcTransaction的区别
JdbcTransaction的使用流程是:
先打开session,再打开trans;最后关闭trans,关闭session。
JTATransaction的使用流程是:
先打开JTATrans,再打开各个session,关闭session,最后关闭JTATrans。
发表评论
-
c++与java内存模型& c++ vTable
2012-11-03 16:25 929参见: http://stackoverflow.com/q ... -
maven pom 指南
2012-11-03 15:56 730http://maven.apache.org/pom.htm ... -
could not discover transaction status
2012-11-01 18:08 992https://community.jboss.org/thr ... -
zz java 类初始化顺序
2012-08-17 14:42 693zz from http://ig2net.info/arch ... -
JSP JSF tag关系
2012-07-12 23:44 916zz from http://drewdev.blogspot ... -
class泛型反射相关API介绍
2012-06-21 10:49 836class泛型反射相关API介绍: 1. getGeneri ... -
服务提供者框架(Service provider framework)
2012-06-14 16:55 1098服务提供者框架(Service provider framew ... -
JMS的使用
2012-05-30 16:24 9311. 何时使用MQ 如果仅仅是为了达到异步调用的目的, ... -
java EE 6 中Jsf 2.0 managedBean和CDI关系
2012-05-29 15:55 2722转自 :http://stackoverflow.com/qu ... -
maven 默认编码
2012-05-28 15:59 5395maven会使用平台的默认编码,中文系统就是GBK 如果使用 ... -
seam与jsf的结合
2012-04-10 23:02 844Seam与JSF的结合 1. 采用org.jboss.seam ... -
maven依赖之optional
2012-04-09 15:42 856http://maven.apache.org/guides/ ... -
Visualsvn+trac 0.12 配置
2012-03-13 09:54 898主要参考了: http://www.cnblogs.com/ ... -
seam 的interceptor分析
2012-03-12 10:36 9921. componet.initialInstance()的时 ... -
zzEJB sessionBean的生命周期
2012-02-29 22:18 804【译】 Stateless Session Be ... -
关于jboss 4 的JNDIVIew 名字空间
2012-02-27 18:11 993Jboss JNDI http://do ... -
多个EJB entity jar 使用同一个 persistence.xml
2012-02-22 18:32 710可以利用 persistence.xml 的 class、ma ... -
java的ClassLoader机制
2012-02-22 16:27 838zz from :http://www.cnblogs.com ... -
关于JPA的FlushModel---Manual
2012-02-21 17:08 1680zz from : http://www.codeinstr ... -
hibernate 分页
2011-11-01 09:10 641setFirstResult 是起始数据,setMaxResu ...
相关推荐
Seam - 语境相关的组件[满江红20071230]............................................................................................................................ 1 Java EE 框架...........................
seam_carving代码实现 图像缩放
• 身份管理 - 用于管理Seam程序中所涉及的用户及角色的接口 • 权限验证 - 一个应用十分广泛的权限验证框架,支持用户角色、持久化和基于规则的权限设置,能够灵活地实现属于用户自己的安全设置 • 权限管理 - 一组...
seam in action seam in action seam in action seam in action seam in action seam in action seam in action
Seam 是一种业级 企 Java 的应规用程序框架。它的灵感源自下列原 : 只有一种“工具” Seam为 应 业务业业 义 种统 组 你的 用程序中所有的 定 了一 一的 件模型。 Seam组件可能是 态义 关关 态 有状 的,包含与几...
JBOSS_SEAM配置
seam级联菜单例子
seam介绍
JBoss Seam JBoss Seam JBoss Seam
seam资料seam资料seam资料seam资料seam资料seam资料seam资料seam资料
seam carving的相关代码实现
seam下一代web开发框架
NULL 博文链接:https://ssailyang.iteye.com/blog/289761
seam 中文文档 pdf 格式 JSF+EJB3.0快速开发框架Seam的中文版向导。。。
Jboss Seam in ActionJboss Seam in ActionJboss Seam in ActionJboss Seam in ActionJboss Seam in Action
SeamCarving的C++实现代码,使用opencv库。包含完整项目工程及测试图像,可直接使用
JBOSS SEAM组件中文手册 Seam_2.0_Reference_zh_CN
seam框架需要的所有jar包,支持seam ui组件
seam中的注解总结,包括三种JPA和seam自身的标签
Seam全称是Jboss Seam,是一个Java EE 5框架。它通过把JSF与EJB3.0组件合并在一起,以及利用JDK5.0的Annotation技术,从而为开发基于Web的企业应用程序提供一个最新的模式。