EJB自管理的事务

如果声明一个bean的事务控制为TX_BEAN_MANAGED,则这个bean可以访问事务服务。当事务控制应用于单个的方法时这个控制只能应用于整个的bean. bean访问事务服务的能力不能只对某个方法起作用。因此一个方法声明事务控制为TX_BEAN_MANAGED,而另一个方法声明为其它不同的事务控制是错误的。厂商的安装工具应该能检测到并报告这个错误。Bean分别通过初始化时setSessionContext()或setEntityContext()方法的参数 SessionContext或EntityContext来访问事务服务。这些接口都是EJBContext的子类。

EJBContext的定义如下:

Public interface javax.ejb.EJBContext {
public Identity getCallerIdentity();
public boolean isCallerInRole(Identity other);
public EJBHome getEJBHome();
public Properties getEnvironment();
public UserTransaction getUserTransaction() throwsIllegalStateException;
public boolean getRollbackOnly();
public void set RollbackOnly();
}

一旦bean获得了一个UserTransaction的引用,就可以用这个引用管理自己的事务。有状态的会话bean的方法可以创建一个事务,而且不用终止事务就可以返回。如果还有线程调用bean的方法,容器检测是否有bean创建的活动的事务,如果被调用的事务是同一个事务,容器会允许该线程重新进入这个bean.如果bean在事务中且执行不同事务上下文的线程试图进入bean,容器会阻塞这个线程直到bean的事务终止。如果线程试图进入事务时bean不在事务中,线程会执行一个自己的事务,容器会挂起线程当前的事务以允许线程进入。一旦线程离开方法就会恢复线程以前的事务,容器不会终止任何方法创建的事务。

对于无状态会话bean和实体bean,当事务活动时bean的方法不允许返回。容器会为此抛出一个例外。

Leaving a tranaction active across method calls is stateful,and is not allowed for stateless session beans.Fro similar reasons,entity beans are also not allowed to maintain an open transaction state across method calls when the bean has declared the TX_BEAN_MANAGED transaction control.

会话同步接口

有状态和无状态的会话bean都可以访问数据库,并且参与一个事务。为了让bean在事务中执行它的任务,bean开发者可以实现在bean中实现 javax.ejb.SessionSynchronization接口。容器能自动检测这个接口,容器会使用这个接口中的方法以使bean得到事务的状态信息。实体bean不支持这个接口。因为实体bean are implicitly transaction aware,所以容器使用不同的方法控制一个事务中的实体 bean.

SessionSynchronization接口定义如下:

public interface javax.ejb.SessionSynchronization {
public void afterBegin() throws RemoteException;
public void beforeCompletion() throws RemoteException;
public void afterCompletion(boolean yn) throws RemoteException;
}

时间: 2024-10-24 17:00:07

EJB自管理的事务的相关文章

struts2-spring配置方式管理hibernate事务的情况下,每过一段时间产生的错误

问题描述 spring配置方式管理hibernate事务的情况下,每过一段时间产生的错误 项目的背景是struts2+spring+hibernate3 weblogic服务器集群环境 数据库oracle spring管理hibernate 采用配置的方式,配置在了service层. 数据库连接方面使用了hibernate自带的连接池(用其他第三方连接池也试了,问题依旧) 现象:每过一段时间便会报错:(部分) jdbc rollback failed ... TransactionExcepti

《SQL入门经典(第5版)》一一第6章 管理数据库事务

第6章 管理数据库事务 SQL入门经典(第5版)本章的重点包括: 事务的定义用于控制事务的命令事务命令的语法和范例何时使用事务命令低劣事务控制的后果这一章将介绍数据库事务管理的概念.

如何用EJB sessionBean 管理iBATIS 的 事务

问题描述 请各位帮帮忙我是初学者,我把iBATIS的transaction设为external结果出现Exceptioninthread"main"java.rmi.RemoteException:EJBException:;nestedexceptionis:java.lang.ClassCastException:com.ibatis.dao.engine.transaction.external.ExternalDaoTransaction的错误请各位高手帮帮忙,谢谢了.

实例详解EJB中的六大事务传播属性

要弄清楚这些问题,就要牵涉到事务传播属性的问题,EJB 中针对不同的情况提供了六种不同的事物传播属性 事务 (Transaction) 是访问并可能更新数据库中各种数据项的一个程序执行单元 (unit).在http://www.aliyun.com/zixun/aggregation/22.html">关系数据库中,一个事务可以是一条或一组 SQL 语句,甚至整个程序.它有通常被称为 ACID 的原子性(Atomicity).一致性(Consistency).隔离性(Isolation).

ASPECT中如何获得SPRING所管理的事务.?

问题描述 项目使用spring来管理的业务逻辑的事务,也意识到需要添加缓存.但是现在面临下面两个问题:1.缓存准备用在dao类上面做aop,然而事务做在service上面,所以无法确定同一个事务中的操作调用了哪些dao类,2.也无法在事务提交或者回滚的时候得到通知来操作缓存第一个问题想了好久都没有解决,曾经貌似在那里看到一个TransactionUtils的类吧.但是现在一直都没有找到..第二个问题,感觉可以在PlatformTransaction接口上面做文章,在提交事务的方法上面做一个环绕通

用Spring管理iBatis事务的问题

问题描述 我想在业务层实现事务的管理,结果发现当业务层里面的对应方法在执行过程中出现异常的时候事务并没有回滚,这个问题困扰了我一天多了,请大侠们不吝赐教(spring2.0/ibatis2.0)!以下是相关配置文件这是web-content.xml<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEbeansPUBLIC"-//SPRING//DTDBEAN//EN""http:/

一天学会PostgreSQL应用开发与管理 - 6 事务和锁

本章大纲 一.什么是事务 二.单用户情况下的事务 三.多用户情况下的事务 1 PostgreSQL如何处理事务隔离? 2 多用户情况下的事务并发处理 四.锁 五.数据恢复粒度 六.数据年龄 七.事务冻结 八.垃圾回收 九.flash back query 第四章:事务和锁 https://www.postgresql.org/docs/9.6/static/mvcc.html 1. 什么是事务 ACID介绍 1. 原子性:同一个事务中的所有操作,要么全部成功,要么全部失败.即使数据库恢复,也不能

权衡Apache Geronimo EJB事务选项,第2部分: Bean管理事务

既然您已经在 第 1 部分 学习了有关 Enterprise JavaBeans (EJB) 容器管理的事务的所有细节,那么您可能对 EJB bean 管理的事务以及如何在 Apache Geronimo 应用服务器中实现它感到好奇.在由三部分组成的 系列文章 的这一期文章(第 2 部分)中,您可以获得所有细节. 简介 本系列分为三部分,将探索 Geronimo 和 OpenEJB 可以为您提供什么帮助,以及在 EJB 2.1 中现在可以实现的 EJB 事务概念(让您顺利进入 EJB 3.0).

权衡Apache Geronimo EJB事务选项,第1部分: 容器管理事务

本系列分为三部分,将探索 Apache Geronimo 中的 Enterprise JavaBeans (EJB) 容器管理事务和 bean 管理事务.在第 1 部分中,将找出两种事务之间的差异,其中包括了解容器管理事务如何帮助您避免事务逻辑和管理的复杂性,从而使您可以专注于企业 bean 的业务逻辑.您还将学会如何在 Geronimo 应用服务器中实现容器管理事务,以及如何使用 Geronimo.OpenEJB 和 XDoclet 将自己从繁重的 EJB 编码工作中解放出来. 简介 Open