当前位置: 首页 > 知识库问答 >
问题:

在Java-EE中透明地管理每请求事务

商俊智
2023-03-14
@Override
public void updateSalaries(float factor)
{
    initializeTransaction();
    // Actual business code...
    commitTransaction();
}

不幸的是,事务管理应该更加透明:这是开发人员在编写业务方法时不应该关心的。

因此,一些方法来“装饰”这些商业方法将是很好的,但我想不出一个可能的方法来做到这一点。

我想到的另一个可能的解决方案是在一个中央DataAccessBean类中处理它,在这个类中,我将在@PostConstruct上启动事务,并在@PreDestroy上提交事务:

@Stateless
public class DataAccessBean implements IDataAccessBean
{
    @PostConstruct
    public void initializeTransaction() { /* ... */ }

    @PreDestroy
    public void endTransaction() { /* ... */ }

    @Override
    public <T implements Serializable> T getObjectById(
        Class<T> objectType, Object key) { /* ... */ }

    @Override
    public void saveObject(Serializable object) { /* ... */ }
}
  • 解决方案不应依赖于特定的非标准框架或jee-server
  • 解决方案应与JEE 6和JEE 7兼容

谢谢你的建议。

共有1个答案

宰父宾实
2023-03-14

您需要的是由Java事务API(JTA)解决的。来自JEE6教程(第八部分-第42章):

Java事务API(JTA)允许应用程序访问amanner中独立于特殊实现的事务。JTA提供了transactionmanager与分布式事务系统中涉及的各方之间的标准Java接口:事务应用程序、Java EE服务器和控制对事务所产生的共享资源的访问的Manager。

您希望使用容器管理的事务。在这个策略中,您只需要用适当的事务属性修饰bean/方法,即:

@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) 
public void myMethod() {
...
}
 类似资料:
  • 10.5. 声明式事务管理 大多数Spring用户选择声明式事务管理。这是对应用代码影响最小的选择,因此也最符合非侵入式轻量级容器的理念。 Spring的声明式事务管理是通过Spring AOP实现的,因为事务方面的代码与Spring绑定并以一种样板式风格使用,不过尽管如此,你一般并不需要理解AOP概念就可以有效地使用Spirng的声明式事务管理。 从考虑EJB CMT和Spring声明式事务管理

  • 问题内容: 我将文件的属性(大小,更新时间…)存储在数据库中。因此,问题在于如何管理数据库和文件的事务。 在Java EE环境中,JTA只能管理数据库事务。万一数据库更新成功但文件操作失败,是否应该为此编写文件回滚方法?此外,EJB容器中的文件操作违反了EJB规范。 你怎么看? 问题答案: 理想情况下,对外部资源(例如文件系统)的访问应通过 JCA连接器进行 。尽管围绕此讨论的文章很多,但我从未找

  • 一、透明代理 使用透明代理时,流量将重定向到网络层的代理中,而无需任何客户端配置。这使得透明代理非常适合那些您无法更改客户端行为的情况-代理不兼容的移动应用程序是一个常见示例。 要设置透明代理,我们需要两个新组件。第一种是重定向机制,可以透明地将发往Internet上服务器的TCP连接重新路由到侦听代理服务器。这通常采用与代理服务器位于同一主机上的防火墙的形式 -Linux上的iptables或O

  • 本文向大家介绍SpringMVC+MyBatis声明式事务管理,包括了SpringMVC+MyBatis声明式事务管理的使用技巧和注意事项,需要的朋友参考一下 采用的基本搭建环境:SpringMVC、MyBatis、MySQL、tomcat         Spring事务管理分解了传统的全局事务管理和本地事务管理的劣势,使得在任何环境中都可以使用统一的事务管理模型,你可以写一次代码,然后在不同的

  • 我正在编写一个可视化洞穴的OpenGL程序,所以当我可视化地表地形时,我希望它是透明的,这样你就可以看到下面的洞穴了。我假设我可以将来自数字高程模型的数据归一化为一个网格,该网格以规则的间距对准x/z轴,并将每个网格单元格渲染为两个三角形。使用对齐的网格,我可以避免在应用画家的算法时进行排序的成本(以确保适当的透明度效果);相反,我可以逐行呈现单元格,从最远的行和每行最远的单元格开始。 这一切都很

  • 本文向大家介绍spring声明式事务管理解析,包括了spring声明式事务管理解析的使用技巧和注意事项,需要的朋友参考一下 前沿:通过对spring事务管理有了比较深入学习,本文将不做实例,而是指定具体的类和配置文件进行讲解。 本文内容:   1、了解什么是声明式事务?   2、声明式事务管理分别有哪几种?   3、这几种事务管理之间的区别是什么? 一、什么是声明式事务?   声明式事务(decl