Tag: transaction

AOP,Spring和事务范围

想象一个事务性的,multithreading的java应用程序,使用spring,jdbc和aop,m个包中的n个类都参与数据库转换。 现在让我们说需要在一个事务中确定一组任意类的范围。 此外,在调用事务时提交事务的范围内始终有一个类T. 让我举一个清晰的例子:给定包A,B,Z和类A.Foo,B.Bar和ZT调用各个类的以下实例(可能由不同的调用者和其他类之间):A。 Foo,B.Bar,A.Foo,ZT只有在调用ZT后才会提交事务。 如果应用程序因任何原因而关闭,除非ZT参与,否则交易将永远不会被提交。 实例可以相互调用,并且如前所述,没有公共入口点从单个入口点(如服务层)调用所有实例,这将成为spring的事务标记的简单目标。 现在的问题是:可以使用方面来解决这个问题吗? 如果是这样,那么基本方法是什么? 谢谢。

Spring Transaction:rollbackfor和norollbackfor都定义了

这是我必须维护的应用程序中遇到的问题: 我有一个带注释的第一个类@Transactional(rollbackFor = CustomExceptionA.class)然后在下面的代码中我调用@Transactional(noRollbackFor = CustomExceptionB.class)的方法@Transactional(noRollbackFor = CustomExceptionB.class)注意: CustomExceptionA或CustomExceptionB只有一个共同的祖先,它是Exception 。 当然,当我执行代码时,会引发exception,它既不是CustomExceptionA类型也不是CustomExceptionB类型,也不是它们的子类。 所以问题很简单: 在这种情况下交易会发生什么? 它承诺了吗? 它会回滚吗? 它是否保持未完成状态等待应用程序执行某些操作(这实际上是一个可以解释此应用程序中看到的一些丑陋事情的答案)? 而且: 为什么? 谢谢你的帮助和时间。

使用Wicket + Spring + Hibernate的三层分层应用程序。 你会如何处理交易?

我正在考虑使用Spring附带的Open Session In View(OSIV)filter或拦截器,因为对于我作为开发人员来说,这似乎是一种方便的方式。 如果这是你推荐的,你建议使用filter或拦截器吗?为什么? 我也想知道它将如何与HibernateTemplate混合,如果我将失去将方法标记为@Transactional(readOnly = true)等的能力,从而失去了获得更细粒度的事务控制的能力? 对于如何使用Hibernate和Spring将这种解决方案与三层架构集成,我是否有某种最佳实践(因为我认为我决定使用Wicket进行演示应该不重要)? 如果我使用OSIV,我将至少永远不会遇到延迟加载exception,另一方面,我的事务将更长寿,然后才能通过在视图中未提交来提交。

关于春季交易传播的问题

我有一个关于spring transaction传播的问题。 如果我使用@Transactional(propagation = Propagation.REQUIRED)来注释方法m1。 当执行逻辑输入m1时,如果已有事务,则m1将使用该事务。 在m1之后,交易怎么样? 它结束或仍然打开?(如果我在另一个方法中调用m1,并且在调用之后还有其他事情要做)。 总之,我想知道退出带注释的方法时,交易结束还是仍然开放? 十分感谢。

具有@Transactional注释的多个事务管理器

我们有基础通用管理器,由所有管理员inheritance。 基本管理器使用@Transactional注释进行注释。 有两组交易服务: xyservice1.* – 必须由transactionManager1管理 xyservice2.* – 必须由transactionManager2管理 如何在没有必要的情况下配置事务来覆盖所有事务方法并指定事务管理器? @Transactional(readOnly = true) public abstract class GenericManagerImpl implements IGenericManager { protected D dao; @Autowired public void setDao(D dao) { this.dao = dao; } @Transactional(readOnly = false) public void save(T object) { dao.save(object); } @Transactional(readOnly = false) public void remove(T object) { dao.remove(object); } } @Service […]

Spring事务内部

情况如下: Method1中有四种数据库更新方法。 Method1使用Spring事务管理语义进行注释。 Method2中有一个数据库读取方法,并在Method1完成所有数据库更新后调用它。 Method2也使用Spring事务语义进行注释。 有一个Web请求进入,控制器拦截请求并调用method1然后调用method2。 事务也包含在Web请求中。 我有兴趣知道的是: 1. Spring如何知道在成功交易后提交数据库更新? 是否有一些引用进行事务管理的Spring实现? 2.由于我们有一个事务层次结构:围绕web-request-> Transaction with Propagation的事务= RequestNew for Method1-> Transaction with Propagation = Method2是必需的,Spring如何进行事务管理以确保事务在正确的上下文与正确的顺序? 简而言之,通过游戏来了解Spring如何在其所有最复杂的细节中执行事务管理或者不仅仅是简单地手动挥动以JTA或其他缩写为中心的解释的文档。 谢谢

SOA中的事务

是否有可能在来自.NET或Java等不同平台的不同SOA服务之间传播事务? 我知道事务可以在来自.NET的WCF服务之间流入和流出。 但我不熟悉Java平台。 现在我在一个项目中工作,该项目传达来自不同平台的服务。 如何保持业务的一致性?

Propagation.REQUIRES_NEW导致LockWaitTimeOutException

有两个函数A和B,它们使用Transactional注释定义。 我是从A打电话给B. @Transactional(value=Constants.READ_WRITE_REQUEST) public int A(….){ B(); } @Transactional(propagation=Propagation.REQUIRES_NEW,value=Constants.READ_WRITE_REQUEST) public int B(….){ C(); } @Transactional(value=Constants.READ_WRITE_REQUEST) public int C(….){ … } 它产生了 Caused by: java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2542) 我从函数B中删除了Propagation.REQUIRES_NEW并解决了问题。 是因为旧事务持有锁并且创建了新事务? 有什么想法吗?

Spring从另一个项目导入应用程序上下文

我有两个项目,其中一个包含在另一个构建路径中,它们都有自己的应用程序上下文定义他的bean。 我想管理全局事务,所以我必须在一个应用程序上下文中导入它们,但我没有找到这样做的方法。 在不同的项目中可以有2个应用程序上下文,并将其中一个导入到另一个项目中。 如果没有可能哪个是最好的解决方案? 我认为成为1中的2个项目。

Spring中具有多个事务管理器的多个DataSource

我在Junit应用程序上下文文件中定义了三个DataSource (JDBC)。 其中两个需要进行交易管理; 使用这两个数据源时,我不必链接任何方法(它们完全相互独立)。 当我使用单个事务管理器进行dataSource2 ,我没有遇到任何问题,即使dataSource3正在被使用但未在相应的方法中进行管理。 尽管如此,在需要同时管理来自仅使用dataSource3各种DAO类的方法时,我添加了第二个事务txManager2 。 上下文文件包含以下内容: 由于正在定义多个事务管理器,因此我使用自己的值对它们进行了限定 。 如您所见,使用setter方法注入dataSource3 : package my.pkg; @Component public class MyDAO { private DataSource dataSource3; // Read only from datasource @Autowired @Qualifier(“dataSource”) public void setDataSource(DataSource ds) { template = new NamedParameterJdbcTemplate(ds); } // Performs reads/updates/inserts from datasource2 @Autowired @Qualifier(“dataSource2”) public void setDataSource2(DataSource ds) { iTemplate = new […]