`
suhuanzheng7784877
  • 浏览: 704270 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
Ff8d036b-05a9-33b5-828a-2633bb68b7e6
读金庸故事,品程序人生
浏览量:47749
社区版块
存档分类
最新评论

JavaEE5学习笔记05-EJB之会话Bean(sessionBean)总结-----5

阅读更多

1.      有状态的会话Bean的本地、远程调用

其实这和无状态的会话Bean调用是一样的,这里需要补充的就是:一般可以远程调用的会话Bean实现类内部是不会直接调用业务增删改等等操作的,而是调用本地local的一个EJB组件作为其远程EJB实现类的一个注入的、内部变量。真正执行核心业务逻辑的是这个内部EJB组件。还有一点就是SessionBean的生命周期是可以被监听的,像@PostConstruct@PreDestroy都是对EJB生命周期的监听方法(和JPA实体的生命周期监听器的意思差不多,有关JPA实体的生命周期具体请参考博客:

http://suhuanzheng7784877.iteye.com/admin/blogs/892041)。

2.      SessionBean的事务处理CMTBMT

因为EJB事务管理建立在JTA基础上,换句话说就是EJB应用容器会处理事务的底层细节,而开发人员只需要关系事务的传播、边界就可以了。

1):CMT叫做容器式管理事务,采用这种策略管理Bean的事务的时候,基本上只需要简单的注解+回滚代码即可完成事务的容器管理。容器管理事务总是以组件的方法为一个管理单位,方法开始,事务开始;方法结束,事务提交。这点类似于Spring的声明式事务,下面看一个容器管理事务的例子,接口就不给出了:

 

 

/**

 * CMT容器管理事务

 *

 * @author liuyan

 *

 * 容器遇到异常就将事务回滚

 * CONTAINER必须指定@TransactionAttribute

 */

@Stateless

@TransactionManagement(TransactionManagementType.CONTAINER)

@TransactionAttribute(TransactionAttributeType.REQUIRED)

public class CMTServerEAOImpl implements CMTServer {

 

    private DataSource dataSource;

 

    @Resource

    private SessionContext sessionContext;

 

    public CMTServerEAOImpl() throws NamingException {

       Context context = new InitialContext();

       dataSource = (DataSource) context.lookup("java:/jbossdemo");

    }

 

    @Override

    public void insert() {

       Connection connection = null;

       Statement statement = null;

       try {

           connection = dataSource.getConnection();

           statement = connection.createStatement();

           String insert1 = "insert into person values(15,'史艳文')";

           String insert2 = "insert into person values(14,'史青青')";

           statement.executeUpdate(insert1);

           statement.executeUpdate(insert2);

           statement.close();

           connection.close();

       } catch (Exception e) {

           System.out.println("事务回滚~~");

           sessionContext.setRollbackOnly();

           e.printStackTrace();

       }

    }

}

客户调用代码和JTA章节的测试代码差不多,在此不赘述了,主键为15的史艳文在数据库中没有记录,而主键为14的记录确因为主键重复插不进去,sessionContext.setRollbackOnly();就是事务回滚的操作。笔者的数据库记录如下:

 开启JBoss服务器,执行测试代码,服务端控制台如下

 

14:51:01,869 INFO  [STDOUT] 事务回滚~~

14:51:01,869 ERROR [STDERR] com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '14' for key 'PRIMARY'

14主键重复,主键为15的史艳文也没能插进去……

那假如我们把史青青的主键修改为16,看看事务能否自动提交呢?

 

String insert2 = "insert into person values(16,'史青青')";

执行测试代码后数据库效果如下

看来事务提交也不需您来管理了。但是有一个必须注意的地方,就是sessionContext.setRollbackOnly();必须在异常处理的时候加上,否则事务不会回滚,15号史艳文依然会插入数据库,16号史青青没有插进去。

CMT管理的好处就是,方便,不需要开发者在代码上做太多,只需要注解就可以。缺点就是缺乏灵活性,因为它总是以方法的开始做为事务的开始,方法结束后也就commit了,对于特殊业务处理的时候,CMT方式的策略就显得不是很灵活。

  • 大小: 44 KB
  • 大小: 47.8 KB
分享到:
评论

相关推荐

    JavaEE5学习笔记05-EJB之会话Bean总结

    ### JavaEE5学习笔记05-EJB之会话Bean总结 #### EJB(Enterprise JavaBeans)简介 EJB(Enterprise JavaBeans)是Java EE平台的一部分,用于开发和部署可重用的服务组件。EJB规范定义了如何编写、部署以及管理企业...

    JavaEE5学习笔记07-Web层与EJB集成总结

    ### JavaEE5学习笔记07-Web层与EJB集成总结 #### 一、JavaEE5框架中的Web层与EJB集成概述 在JavaEE5(即Java Platform, Enterprise Edition 5)中,Web层与EJB(Enterprise JavaBeans)的集成是构建企业级应用的...

    JavaEE5学习笔记02-JNDI与RMI

    在JavaEE环境中,RMI经常与EJB结合使用,尤其是无状态SessionBean,因为它们不需要维持客户端的会话状态,适合RMI的轻量级通信模式。 当一个EJB被标记为远程接口时,它可以通过RMI在不同 JVM(Java Virtual ...

    javaee思维导图版笔记-吉林大学

    "javaee思维导图版笔记-吉林大学" 本笔记主要涵盖了Java EE的基础知识,包括Servlet、JSP、JNDI、JPA等方面的内容。 一、Servlet概述 Servlet是Java EE中的一种服务器端组件,用于处理HTTP请求并返回响应。...

    javaee学习笔记

    - **会话Bean**:在整个用户会话期间保持,用于跟踪用户状态。 - **应用Bean**:在整个应用程序范围内共享,用于全局数据。 **自定义标签(Custom Tags)**提供了一种扩展JSP语法的方式,通过定义标记库描述符(TLD...

    JavaEE2017最新版基础班学习笔记

    包括会话Bean(Session Beans)负责业务逻辑,实体Bean(Entity Beans)作为持久化对象,以及消息驱动Bean(Message-Driven Beans)处理JMS消息。 6. **JMS (Java Message Service)**:JMS允许应用程序之间异步通信...

    Java/JavaEE 学习笔记

    第四章 Session Bean(会话Bean).....322 第五章 消息驱动Bean(MDB).........327 EJB3.0.....329 第一章 EJB3.0 Foundation...............329 第二章 Session Bean........................330 第三章 消息驱动Bean...

    JavaEE学习笔记

    EJB是JavaEE的核心,提供了三种类型的Bean:会话Bean(Session Beans)处理业务逻辑,实体Bean(Entity Beans)代表持久化数据,消息驱动Bean(Message-Driven Beans)处理消息队列。Spring框架则以其依赖注入和面向...

    JavaEE基础笔记.zip

    分为会话Bean(Session Beans)、实体Bean(Entity Beans)和消息驱动Bean(Message-driven Beans),分别处理业务逻辑、持久化数据和消息通信。 5. **JMS(Java Message Service)**:JMS是JavaEE的消息中间件接口...

    J2EE学习笔记(J2ee初学者必备手册)

    第四章 Session Bean(会话Bean).....322 第五章 消息驱动Bean(MDB).........327 EJB3.0.....329 第一章 EJB3.0 Foundation...............329 第二章 Session Bean........................330 第三章 消息驱动Bean...

    达内培训笔记

    - **EJB(Enterprise JavaBeans)**:分为会话Bean(Session Beans)、实体Bean(Entity Beans)和消息驱动Bean(Message-driven Beans),用于实现业务逻辑和持久化数据。 - **JPA(Java Persistence API)与ORM*...

    javaWeb学习笔记+狂神说

    EJB是Java企业级应用的组件模型,分为会话bean、实体bean和消息驱动bean。它们提供了一种在分布式环境中构建可复用的、事务处理的服务器端组件的方法。虽然现代JavaEE应用更多采用轻量级框架如Spring,但了解EJB的...

    JAVA-EE-master (4).zip

    EJB分为三种类型:会话bean(Session Beans)处理客户端请求,实体bean(Entity Beans)代表持久化的业务对象,消息驱动bean(Message-Driven Beans)用于处理JMS消息。 4. **JMS**:Java Message Service允许在...

Global site tag (gtag.js) - Google Analytics