注意,只有会话和消息驱动bean 可以用于bean 管理的事务分隔。
容器必须按下列方式管理客户对使用bean 管理事务分隔的企业bean 实例的调用。当客户通过企业bean 的客户端视图接口调用它的业务方法时,容器挂起所有可能与和客户请求相关的事务。如果实例关联有事务(如果有状态会话bean实例在前面的业务方法中启动了这个事务),容器就使用者事务和方法执行关联。
如果有拦截器方法和bean 实例关联,则会在拦截器方法调用之前进行关联。
容器必须可以让企业bean 的业务方法、消息监听器方法、拦截器方法或超时回调方法通过依赖注入和通过javax.ejb.EJBContext 接口查找,以及使用JNDI命名上下文java:/UserTransaction 获得javax.transaction.UserTransaction。当实例使用javax.transaction.UserTransaction 来分隔事务时,容器必须在begin 和commit或rollback 之间征用实例使用的所有资源管理器。当实例提交事务时,容器负责事务提交的全局协调(通常容器依赖事务管理器,它是EJB 服务器跨所有征用的资源管理器执行两阶段提交的一部分。如果事务只涉及一个资源管理器并且配置为可以使用连接共享,那么容器可以使用本地事务优化。)。
对于有状态bean,可以在没有提交或回滚事务的情况下完成启动事务的业务方法。在这种情况下,容器必须在多个客户端调用之间保留事务和实例的关联直到实例提交或回滚事务。当客户端调用下一个业务方法时,容器必须在事务上下文中调用这个业务方法(以及任何应用到这个bean 上的拦截器方法)。
如果有状态会话bean 实例在业务方法或拦截器方法内启动一个事务,那么它必须在业务方法(或所有的拦截器方法)返回之前提交事务。容器必须检测这种情况:一个事务在业务方法或拦截器方法中被启动但是没有完成。这种情况的处理如下:
记录为应用错误以警告系统管理员
回滚启动的事务
丢弃会话bean 实例
抛出javax.ejb.EJBException(如果业务接口是一个继承java.rmi.Remote的远程业务接口,那么抛出java.rmi.RemoteException)。如果使用EJB2.1客户端视图, 如果客户端是远程客户端则容器应当抛出java.rmi.RemoteException ; 如果客户端是本地客户端则抛出javax.ejb.EJBException。
如果消息驱动bean 实例在消息监听器方法或拦截器方法内启动事务,那么它必须在消息监听器方法(或所有的拦截器方法)返回之前提交事务。容器必须检测这种情况:事务在消息监听器方法或拦截器方法内被启动但没有完成,并且按照以下方式处理:
记录为应用错误以警告系统管理员。
回滚启动的事务
丢弃消息驱动bean 实例
如果会话bean 或消息驱动bean 实例在超时回调方法内启动事务,则它必须在超时回调方法返回之前提交事务。容器必须检测这种情况:事务在超时回调方法内被启动但没有完成,并按以下方式处理:
记录为应用错误以警告系统管理员。
回滚启动的事务
丢弃bean 的实例
对使用bean 管理的事务容器执行的动作总结在下表中。T1 是一个和客户端请求关联的事务,T2 是一个当前和实例关联的事务(也就是说,是一个由前一个业务方法启动但没有完成的事务)。对使用bean 管理事务的bean 方法容器的动作如下
客户端事务 当前和实例关联的事务 和方法关联的事务
None None None
T1 None None
None T2 T2
T1 T2 T2
对每一个条目描述如下:
如果客户端请求没有关联事务而且实例也没有关联事务,或者如果bean是消息驱动bean,容器调用未指定事务上下文的实例。
如果客户端请求关联了事务T1,但是实例没有关联事务,那么容器挂起客户端关联的事务并且调用未指定事务上下文的方法。当方法(包括它关联的拦截器方法)完成后再次唤醒客户端事务T1。对于消息驱动bean 或无状态bean 的web 服务终端方法调用来说,永远都不会发生这种情况。
如果客户端请求没有关联事务但实例已经关联了事务T2,那么容器容器调用管理事务T2 的实例。对于无状态会话bean 或消息驱动bean,永远都不会发生这种情况:只会发生在有状态会话bean 上。
如果客户端关联了事务T1,但实例关联事务T2,容器挂起客户端事务然后调用使用T2 事务上下文的实例方法。当方法(包括它的所有拦截器方法)完成后,容器重新使用客户端事务T1. 对于无状态会话bean或消息驱动bean,永远都不会发生这种情况:只会发生在有状态会话bean 上。
容器必须允许企业bean 实例在一个方法内按顺序执行几个事务。
在实例没有提交前一个事务时, 如果实例使用javax.transaction.UserTransaction 的方法begin 启动事务,那么容器必须在begin方法内抛出javax.transaction.NotSupportedException。
如果使用bean管理事务分隔的bean 实例调用javax.ejb.EJBContext的setRollbackOnly 或getRollbackOnly 方法,那么容器必须抛出java.lang.IllegalStateException。
分享到:
相关推荐
2. 遵循模块化原则,将不同功能的bean分隔在不同的EJB模块中。 3. 对于并发访问的场景,考虑使用无状态会话bean,以优化性能。 4. 对于持久化的实体bean,利用JPA(Java Persistence API)进行数据访问,简化数据库...
通过以上步骤,可以在JBuilder环境中成功创建和配置实体Bean,为后续的EJB开发打下坚实的基础。这个过程涵盖了从安装软件、配置服务器到最终在开发工具中使用的一系列关键步骤,对于初学者来说非常实用。
EJB3.0是EJB规范的一个重要版本,引入了简化开发的新特性,如注解驱动、实体管理的自动持久化和轻量级会话bean,使得EJB更易于使用,减少了大量的XML配置。 5. **Java编程**: Java是一种广泛使用的面向对象的编程...
156、在jsp:useBean语法中使用beanName有何好处? 37 157、当我使用时,在浏览器的地址栏没有改变? 37 158、如何转换JSP 0.9版本的文件到JSP1.1? 37 160、JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么...
12. **EJB事务级别**:EJB支持七级事务隔离级别,分别是Read Uncommitted、Read Committed、Repeatable Read、Serializable、Read Only、Batch Read Only、Client Controlled,每级对应不同的并发控制策略。...
1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔。 61 2、编写一个程序,将d:\java目录下的所有.java文件复制到d...
14. EJB的7个事务级别(略)。 15. JDBC查询学生成绩单示例代码(略)。 16. Tomcat 5中文乱码问题: 设置请求编码,如`request.setCharacterEncoding("UTF-8")`,并在JSP中使用`<%@page pageEncoding="UTF-8"%>`...
**解答**: EJB (Enterprise JavaBeans) 提供了多种事务管理策略,其中 Transaction Level 指的是 EJB 方法调用时的事务级别。共有 7 种 Transaction Level: - **Required**: 如果当前线程中已经存在事务,则加入该...
1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔。 61 2、编写一个程序,将d:\java目录下的所有.java文件复制到d...
1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔。 61 2、编写一个程序,将d:\java目录下的所有.java文件复制到d...
1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔。 61 2、编写一个程序,将d:\java目录下的所有.java文件复制到...
1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔。 67 2、编写一个程序,将d:\java目录下的所有.java文件复制到d...
- 采用无状态Session Bean进行事务处理,保证并发安全性。 9. **JPA(Java Persistence API)与Hibernate**: - 设计合理的数据模型,避免过度设计。 - 使用注解配置实体类,简化数据库操作。 10. **Web服务**...
1. **字符串转数组**:在Java中,可以通过`split()`方法将逗号分隔的字符串转换为数组。例如,`String str = "a,b,c"; String[] arr = str.split(",");` 2. **请求处理方法的区别**: - `request.getAttribute()`...
13. **EJB的7个事务级别**: - NO_TRANSACATION、SUPPORTS、MANDATORY、REQUIRED、REQUIRES_NEW、NOT_SUPPORTED、NEVER,分别对应不同的事务控制策略。 14. **JDBC查询示例**: ```java Connection conn = null;...
2. AOP(面向切面编程):Spring框架中的`@Transactional`注解,用于声明式事务管理。 3. 框架集成:比如EJB、JPA、Hibernate等框架,注解用于简化配置。 4. 自动化测试:JUnit中的`@Test`注解标记测试方法。 5. Web...
- 适当地使用事务管理,确保数据的一致性。 - 使用EJB的生命周期方法,如`@PostConstruct`和`@PreDestroy`。 【其他杂项规则】 - 遵守版权和许可声明,特别是在开源项目中。 - 使用适当的日志记录,便于调试和故障...
- **事务处理**:事务的概念、ACID属性,以及如何实现事务管理。 4. **JDBC** (Java Database Connectivity) - **数据库连接**:使用DriverManager获取数据库连接。 - **Statement与PreparedStatement**:理解...