今天碰到一个 Hibernate flush 里 一些本不想提交的对象。 这个问题在本地的测试版本中不存在, 为什么呢? 同事为了方便调试EJB 的代码 特地搞了一个proxy 在 本地Tomcat 测试代码里面运行, 因此在本地开发人员很方便的验证mass change 的 validation 逻辑。 由于mass change 要将原业务表的数据取出, 并且 merge 用户要想做的mass change, 然后做一系列复杂的validation 校验。 在服务器上的EJB 中 这些所有逻辑都是在一个EJB 中的事务中做的, Hibernate 的 session 也就跟这个transaction 的范围一致, 导致了N 多不想做 提交的对象都 在session 中 , 并且在transaction 结束时flush。
在解决这个问题的时候, 开始的想法是找出所有不需要save 的对象 在load 它们之后 修改之前做一个clone , 用它们的克隆。 由于涉及的对象太多, 在 本人做了 十几次修改, 验证后以失败告终。
最后一招, 想到本地版本是没有问题的, 将所有load 出来validation 的逻辑 都放到一个 方法中, 将这个方法 TransactionType 指定为 Not_Supported. 只有最后保存的逻辑放在一个 TransactionType.Required 的方法里面。 由于load , validation 都是 只读的, 修改后 发表 测试 搞定。
以前还用的比较少 将一个EJB 设定为 TransactionType.Required, 然后将个别 方法 指定为TransactionType Not_Supported。 在WebSphere 中 验证为可行的, 特记录在此。
分享到:
相关推荐
2. **Spring AOP与ejb事务管理**:Spring的声明式事务管理可以与ejb的事务管理相结合,提供更细粒度的事务控制。 3. **Spring与ejb的协作**:在某些场景下,会话bean可能只负责协调工作,而具体的业务逻辑由Spring...
EJB(Enterprise JavaBeans)是Java EE平台中的核心组件,用于构建可扩展的、安全的、事务处理的...通过深入研究提供的代码样例,你可以更好地掌握EJB在实际项目中的运用,以及如何利用EJB的优势来解决企业级问题。
2. **Transaction Management**:EJB容器负责事务管理,而Hibernate则提供了细粒度的事务控制。在整合后,开发者可以利用EJB的声明式事务管理,同时利用Hibernate的事务边界,实现更灵活的事务策略。 3. **Query ...
EJB容器提供了强大的事务管理支持,它自动处理事务的开始、提交、回滚等操作,确保了业务逻辑中数据处理的原子性、一致性、隔离性和持久性(ACID属性)。开发者无需编写复杂逻辑来管理事务,这减少了错误发生的可能...
【ejb】是一个Java企业级应用开发的重要组件,全称为Enterprise JavaBeans,它提供了一种在分布式环境中构建可复用、安全和事务处理的应用服务框架。ejb是Java EE(Java Platform, Enterprise Edition)规范的一部分...
3. **事务管理**:EJB支持事务特性,可以自动处理事务的开始、提交、回滚等操作,确保数据的一致性。 4. **安全模型**:EJB提供了角色基的安全机制,允许对方法访问进行细粒度控制,确保应用的安全性。 5. **远程...
同时,安全性也是EJB3的重要组成部分,书中会讲解如何利用角色和权限进行细粒度的访问控制。 总之,《EJB 3 in Action》这本书详尽地阐述了EJB3的各种特性,从基本的Bean类型到高级的主题,都是Java EE开发者必备的...
声明式事务管理允许开发者通过在EJB方法上添加注解来控制事务边界,而编程式事务管理则允许更细粒度的控制。 7. EJB与JNDI结合的例子: 在压缩包中的"codefans.net"文件中,可能包含了一个简单的EJB项目,其中包括...
EJB运行在EJB容器中,容器负责管理Bean的生命周期、事务、安全性和资源分配等。容器为Bean提供了执行其业务逻辑的环境,减轻了开发者的负担。 3. **EJB 3.0及之后的版本**: EJB 3.0引入了许多改进,包括注解驱动...
开发者只需要关注业务逻辑的实现,而无需关心诸如线程管理、事务处理、安全控制等复杂的问题。 - **RMI**:为EJB提供了远程通信的基础,使得EJB能够在不同的JVM之间进行交互。 - **容器**:通过提供容器管理服务,...
EJB 3.0提供了更加灵活的事务管理机制,支持细粒度的事务控制,包括容器管理的事务(Container Managed Transactions, CMT)和Bean管理的事务(Bean Managed Transactions, BMT)。 ##### 4. 改进了消息驱动Bean ...
3. **安全性**:通过应用服务器,EJB可以实现细粒度的安全控制,限制对资源的访问。 4. **可移植性**:由于基于标准,EJB组件可以在符合Java EE规范的任何应用服务器上运行,增强了系统的可移植性。 5. **并发和性能...
- EJB 3.0继承了Java EE的安全模型,可以通过角色和权限进行细粒度的访问控制。 7. **部署与生命周期** - **元数据驱动部署**: 使用注解简化部署描述符,使得部署更简单。 - **Bean生命周期方法**: 如@...
- 两者都支持声明式服务,如事务管理和安全性,但EJB3.0通常将这些服务更紧密地集成到框架中,例如通过@TransactionAttribute注解控制事务行为。 - Spring的声明式服务可以通过AOP(面向切面编程)实现,允许更细...
在EJB3.0中,引入了诸多改进和新特性,以应对早期版本EJB的一些复杂性问题。以下是EJB3.0的关键知识点: 1. **实体Bean(Entity Beans)的简化**:EJB3.0引入了注解驱动的实体管理,不再需要编写接口或Home接口。...
- EJB 3.1允许通过`@RolesAllowed`等注解来指定方法级别的权限控制,实现细粒度的安全管理。 7. **生命周期方法**: - 如`@PostConstruct`和`@PreDestroy`注解标记的方法,分别在Bean实例创建后和销毁前被调用,...
3. **容器管理的事务**:EJB 3.0支持容器自动管理事务,通过注解如`@TransactionAttribute`可以设置事务的传播行为和隔离级别,让开发者不必关心事务的具体实现。 4. **依赖注入**:EJB 3.0利用Java Dependency ...
在EJB 2.0中,CMP通常与容器管理的事务(Container Managed Transactions, CMT)一起使用,确保数据操作的原子性和一致性。CMT允许开发者通过设置事务属性来控制事务的粒度,如只在特定方法上开启事务。 **6. C++与...