在EJB3.0的业务方法中,我们可以一般都猜想,可以调用EntityManager的getTransaction()方法得到一个事务对象,然后再通过该事务的begin()、commit()方法,可以开启、提交事务,然后关闭连接。然而,在开发过程中却发现这样做会抛出异常:java.lang.IllegalStateException: Illegal to call this method from injected, managed EntityManager。
在Hibernate中,我们明明可以手动开启、提交事务的,为什么在EJB3.0中却不行呢?上网找了一下,终于发现了问题的所在。
原来,我们在使用EntityManager的时候,是通过注解@PersistenceContext注入到EJB容器中,并由这个容器管理我们的事务,而且必须对指定的业务方法添加@Local或@Remote注释才能正常工作,所以我们根本就不用手动控制事务。但往往我们需要在一个业务方法中对数据库多次访问,这会涉及到事务的传播行为,如果不手动控制,我们又如何让不同的数据库操作设定到指定的事务中呢?
不怕,EJB3.0还是帮我们做了很多事情的。我们很容易想起Spring对Hibernate的事务管理,而事实上EJB容器也具备这样的功能,我们可以在相应的业务方法前添加形如@TransactionAttribute(TransactionAttributeType.REQUIRED)的注解(具体含义就不再多讲了),给该方法中的数据库操作指定事务传播行为,这样我们就无需手动开启、提交事务、关闭连接了,而程序也就不会再抛java.lang.IllegalStateException: Illegal to call this method from injected, managed EntityManager异常了。
转自:
http://hi.baidu.com/waltertan/blog/item/045249739b66e5108601b01a.html
分享到:
相关推荐
1. Beginning EJB3 Application Development From Novice to Professional联接http://download.csdn.net/source/1865607 2. EJB3 in Action 2007联接http://download.csdn.net/source/1865636 3. Mastering EJB3联接...
1. Beginning EJB3 Application Development From Novice to Professional联接http://download.csdn.net/source/1865607 2. EJB3 in Action 2007联接http://download.csdn.net/source/1865636 3. Mastering EJB3联接...
Here are some of the key goals and features that define EJB3: 1. **Simplification of Developer's Life**: EJB3 greatly reduces the complexity involved in developing enterprise applications by ...
1. Beginning EJB3 Application Development From Novice to Professional联接http://download.csdn.net/source/1865607 2. EJB3 in Action 2007联接http://download.csdn.net/source/1865636 3. Mastering EJB3联接...
### EJB原理图详解 #### 一、EJB工作原理概览 EJB(Enterprise JavaBeans)是Java EE平台中的一个重要组成部分,它主要用于构建企业级应用。EJB提供了一种面向服务的方式,允许开发者专注于业务逻辑,而将复杂的...
### EJB3_Persistence开发手册-EJB3_QL查询知识点详解 #### 一、EJB3与实体Bean操作概述 EJB(Enterprise JavaBeans)3规范中的持久化部分(即EJB3 Persistence)提供了一种简化的方式来管理和操作企业级应用程序...
在源码学习过程中,你可以通过以下步骤深入理解EJB3: 1. **阅读源码结构**:了解项目目录结构,找出bean、实体类、DAO(数据访问对象)、服务接口和服务实现等关键组件。 2. **分析注解**:查看各组件上的注解,...
【实战角度比较EJB2和EJB3的架构异同】 EJB,即Enterprise JavaBeans,是Java EE(企业版Java)平台的核心组件之一,用于构建可复用、分布式的服务器端应用程序。EJB2和EJB3是EJB技术的两个主要版本,它们在架构上...
"ejb3 带源码"的资源,如"Mastering EJB3"和"Beginning EJB3 Application Development"等,提供了深入学习和实践EJB3技术的宝贵材料。 1. **EJB3核心概念**: - **实体Bean(Entity Bean)**:代表数据库中的持久...
在ejb3中,可以使用`EntityManager`和`EntityTransaction`来处理数据库操作,如CRUD(创建、读取、更新、删除)操作。ejb3的实体管理器提供了事务管理和懒加载等功能,大大提高了开发效率。 **3. MessageDriven ...
**EJB3(Enterprise JavaBeans 3)是Java EE(Enterprise Edition)平台中用于构建企业级应用程序的重要组件模型。这个PPT教程详细介绍了EJB3的各种核心概念和技术,旨在帮助学习者掌握EJB3的核心特性并能实际应用到...
### Hibernate EntityManager 概述 本文档为Hibernate 3.3.0.GA版本的EntityManager使用指南,主要介绍了如何在不同的环境中使用EntityManager管理持久化对象,包括实体的状态管理、查询操作、事务处理等内容。 ##...
EJB(Enterprise JavaBeans)3是Java平台企业版(Java EE)的一个核心组件,用于简化大型企业级应用的开发。自从EJB 3版本推出以来,它在简化实体管理、依赖注入和声明式服务等方面有了重大改进,使得开发者可以更加...
ejb3-persistence.jar文件是EJB3持久化模块的实现库,它包含了EJB3规范中关于持久化的API和实现,如EntityManager和EntityManagerFactory等接口,以及它们的实现类。这些类和接口提供了CRUD(创建、读取、更新、删除...
**EJB3应用实例** EJB(Enterprise JavaBeans)3是Java EE(Enterprise Edition)平台中的核心组件之一,主要用于构建可扩展、可移植且高度模块化的企业级应用程序。EJB3引入了许多重大改进,简化了开发流程,降低...
《ejb3-persistence.jar:Java企业级持久化框架详解》 在Java开发领域,ejb3-persistence.jar是一个至关重要的组件,它涉及到Java企业版(Java EE)中的企业级bean(EJB)3.0规范,特别是持久化(Persistence)部分...
**简单EJB3例子** EJB(Enterprise JavaBeans)是Java平台上的企业级组件模型,用于构建可扩展、可移植和可信赖的企业级应用程序。EJB3是EJB规范的一个重要版本,它引入了许多简化开发的新特性,如注解驱动的编程...
**EJB Dev 1: EJB入门例子** Enterprise JavaBeans(EJB)是Java平台企业版(Java EE)的一部分,用于构建可扩展、安全且事务处理能力强大的分布式应用程序。EJB提供了一种标准的方式来实现业务逻辑,使得开发人员...
### EJB3: 企业级Java Bean的现代实践 #### 一、EJB3概览与适用场景 **EJB3(Enterprise JavaBeans 3)**是Java平台为构建企业级应用提供的一套规范,旨在简化Java应用服务器上的组件开发。EJB3引入了许多重要的...
EJB3是EJB规范的一个重大改革版本,引入了许多简化开发的新特性,使得Java开发者能够更高效地构建分布式企业应用。 1. **EJB的概述** EJB是一种组件模型,它定义了如何在服务器端部署和管理业务逻辑。EJB3是基于...