在上一篇blog中我写到了一个困饶我的问题,就是如何在stateless session bean中的一个方法内如果有多个数据库操作,怎样维持它们的事务性,经过实验,下面给出它的一种解决方法。
首 先像这样的问题我们应该相信ejb是能够解决的,因为ejb的事务机制是很强大的,而上述的问题并不是很特殊的情况,而是种普遍的情形。怎样解决了,其实 也是很简单的,但这里有个前提,就是你的数据库操作中的数据库连接不能用simple的jdbc连接(这也是为什么我开始的demo总是不行的原因),必 须要用连接池来获得connection,原因我后面再说,当我们进行跨数据库的操作时,每一个dao的操作我们必须要抛出异常,即在dao中我们的操作 方法遇到异常时,在catch部分处理掉了异常后,要再抛出一个异常(任意的都可以,其实也可以在dao中不捕获异常,直接让异常到上一层),这样异常就 会传到session bean的方法中,然后session bean再捕获它,在session bean 的方法的catch部分加上sessionContext.setRollbackOnly()这样就能做到整体操作的事务一致性的维护了。
我感觉这里面的实际情况还是用到了ejb容器提供的强大的事务性机制,只是我们要让异常得以通知到ejb容器,然后在catch部分实现回滚。至于为什么 非要用数据源了,我感觉是因为在数据源中当我将connection.close()是有可能并没有真正的close()(数据源是有优化的,所以它还可 能保留了连接的信息),而simple的jdbc可能要是close()就真正的close了,但这只是猜测!
当然ejb的声明性事务处理还要再学习学习,这也是它强大的一个地方,感觉与spring的有几分相似!
分享到:
相关推荐
虽然EJB 3.0规范主要讨论Session Bean,但还包含了对实体Bean(Entity Bean)的支持,这些Bean与数据库中的记录对应。`@Entity`注解用于声明一个持久化的Java类,而`@Table`, `@Id`, `@GeneratedValue`等注解则用于...
与Stateful Session Bean(有状态会话Bean)不同,它维护了客户端会话状态,而Stateless Session Bean(无状态会话Bean)则不保留任何客户端状态,每次调用都独立于其他调用。Session Bean主要用于表示业务逻辑,...
无状态SessionBean通常用于执行计算或事务性的操作,如数据库查询或事务管理。由于它们不需要维护状态,因此可以更有效地处理大量的并发请求。 在给定的"Java EJB中有、无状态SessionBean的两个例子"压缩包中,可能...
2. **Stateless Session Bean**:无状态会话Bean不维护与客户端会话的任何持久状态。它们适用于执行无关联的独立操作,例如计算或数据验证。 Session Bean可以有接口(Remote或Local),客户端通过调用这些接口的...
Session Bean不直接映射数据库中的共享数据,其状态是非持久化的,不需要写入数据库。它们由EJB容器管理,提供了远程访问的安全性、并行性和事务支持。 **编写EJB的规则** 1. **编写Enterprise Bean** - **...
在Java企业级应用开发中,SessionBean是Java服务器端组件(Java EE)的一部分,它扮演着客户端和数据库之间的重要中介角色。本教程将通过具体的例子深入解析SessionBean与客户端的结合,以及如何与Oracle数据库进行...
在"压缩包子文件的文件名称列表"中,我们有一个名为"Stateful sessionbean.doc"的文件。这很可能是文档形式的教程,详细介绍了如何创建和使用有状态会话Bean。文档可能包含了以下内容: 1. **概念解释**:对有状态...
它可以是无状态的(Stateless Session Bean),为每个请求创建新的实例,或者有状态的(Stateful Session Bean),维护与特定客户端会话的状态。 - **Entity Bean**:用于表示数据库中的持久化对象,实现业务实体的...
根据其设计模式,Session Bean分为有状态(Stateful Session Bean)和无状态(Stateless Session Bean)两种类型。本压缩包文件提供了这两个类型的实例,让我们深入探讨它们的概念、用途以及如何在实际应用中使用。 ...
在EJB2.x版本中,SessionBean扮演了服务代理的角色,执行特定的业务任务,并且可以分为无状态(Stateless)和有状态(Stateful)两种类型。 **无状态SessionBean**不保留任何会话信息,每个调用都是独立的,适合...
- `StatelessSession`没有事务管理,通常需要手动开启和提交JDBC事务。 在实际开发中,结合使用这些技巧,可以优化数据库操作,提高系统性能。SSH笔记中的Session管理和批量操作部分,深入讲解了这些概念和实践,...
本资料包"基于Java的EJB中有、无状态SessionBean的两个例子.zip"包含的是关于有状态和无状态SessionBean的实例代码,帮助开发者理解和掌握这两种类型SessionBean的用法。 1. **无状态SessionBean(Stateless ...
对于无状态session bean(Stateless session bean),EJB容器会在启动时预先创建一定数量的bean实例放入实例池。当客户端请求服务时,容器会从池中取出一个实例,处理完请求后,再将实例放回池中。这样,池中的每个...
Java Bean不能跨进程访问,适合在同一进程中使用。 - EJB则是面向服务的、分布式的组件,可被远程调用,类似于DCOM(分布式组件对象模型)。EJB必须部署在特定的容器(如WebSphere、WebLogic)中,由容器管理其生命...
与Stateful Session Beans(有状态会话Bean)和Stateless Session Beans(无状态会话Bean)相比,EJB 3.0更倾向于使用无状态的Session Beans,因为它们更容易管理和伸缩。 **2. 注解驱动的开发** EJB 3.0引入了注解...
根据是否维护状态,Session Bean又分为Stateful Session Bean和Stateless Session Bean。Stateful Session Bean能记住客户端的状态,为每个客户端创建单独的实例;而Stateless Session Bean不保存状态,可能多个...
1. **Session Bean**:提供临时的业务逻辑服务,可以是有状态(Stateful Session Bean)或无状态(Stateless Session Bean)。有状态的Session Bean可以跟踪用户会话状态,而无状态的Session Bean不维护用户状态,更...
Stateful Session Bean能够保持客户端状态,为每个客户端维护一个独立的实例,而Stateless Session Bean则不维护状态,多个客户端请求可能会由同一个实例处理,这使得Stateless Session Bean更高效,但不适用于需要...
- **Stateless Session Bean**:不保存客户端状态,在一个方法调用过程中可以维持客户端状态,但方法执行完毕后状态会被清除。 - **Stateful Session Bean**:可以保存客户端状态,并在不同的方法调用之间维持这种...