Tag: transactions

Spring:如何使用GenericDao获取多个数据源?

我有一个使用Spring 3.1.1的Web应用程序。 我们有一个使用JdbcTemplate的genericDao。 Datasource在GenericDaoImpl中这样注入。 public class GenericDaoImpl implements GenericDao { protected Class entityClass; protected JdbcTemplate jdbcTemplate; @Autowired public void setDataSource(DataSource dataSource) { this.jdbcTemplate = new JdbcTemplate(dataSource); } …. @Override public List findAll(String sql, ParameterizedRowMapper mapper, Object… args) { return jdbcTemplate.query(sql, mapper, args); } } 这是一个简单的DAO。 @Repository public class ElementDaoImpl extends GenericDaoImpl implements ElementDao { private […]

Hibernate抛出org.hibernate.exception.LockAcquisitionException

我有这个方法: mymethod(long id){ Person p = DAO.findPerson(id); Car car = new Car(); car.setPerson(p); p.getCars().add(car); DAO.saveOrUpdate(car); DAO.saveOrUpdate(p); DAO.delete(p.getCars().get(0));//A person have many cars } 映射: Person.hbm.xml Cars.hbm.xml 这种方法适用于单个线程,并且在多个线程上,给出了一个错误: 02/08/2014 – 5:19:11 pm – [pool-1-thread-35] – WARN – org.hibernate.util.JDBCExceptionReporter – SQL Error: 60, SQLState: 61000 02/08/2014 – 5:19:11 pm – [pool-1-thread-35] – ERROR – org.hibernate.util.JDBCExceptionReporter – ORA-00060: deadlock […]

Hibernate UnknownServiceException:在事务完成时请求未知服务

我有一个简单的类,它启动3个线程并在每个线程中保存一个新对象。 但是我得到了一些我无法理解的exception。 任何人都可以帮助我理解为什么例外? package test; import java.util.Date; import org.hibernate.Session; import domain.Event; import util.HibernateUtil; public class EventBeanTest { public static void main(String [] args) { Event e1 = new Event(); e1.setTitle(“111”); e1.setDate(new Date()); Event e2 = new Event(); e2.setTitle(“222”); e2.setDate(new Date()); Event e3 = new Event(); e3.setTitle(“333”); e3.setDate(new Date()); Thread t1 = new Thread(new EventRunnable(e1)); Thread […]

从JMS MessageListener发出回滚信号

我一直在使用JMS和ActiveMQ。 一切都在创造奇迹。 我不是用spring,也不是我。 接口javax.jms.MessageListener只有一个方法onMessage 。 在实现中,可能会抛出exception。 如果实际上抛出exception,那么我说消息没有正确处理,需要重新尝试。 所以,我需要ActiveMQ等待一段时间,然后重试。 即我需要抛出exception来回滚JMS事务。 我怎样才能完成这样的行为? 也许ActiveMQ中有一些我无法找到的配置。 或者……也许可以取消将MessageListener注册到消费者并自己使用消息,如下所示: while (true) { // … some administrative stuff like … session = connection.createSesstion(true, SESSION_TRANSACTED) try { Message m = receiver.receive(queue, 1000L); theMessageListener.onMessage(m); session.commit(); } catch (Exception e) { session.rollback(); Thread.sleep(someTimeDefinedSomewhereElse); } // … some more administrative stuff } 在几个线程中,而不是注册监听器。 或者……我可以以某种方式装饰/ AOP /字节操作MessageListener来自己做。 你会采取什么途径?为什么? […]

什么交易经理使用? (JPA,spring)

我正在开发一个基于JPA + Hibernate,Spring和Wicket的Web应用程序。 我想知道在我的代码中实现事务的最佳方法是什么? 我应该使用什么交易经理? 应该是org.springframework.orm.jpa.JpaTransactionManager ,还是org.springframework.jdbc.datasource.DataSourceTransactionManager或其他什么? 我想用Spring来管理我的交易。

Java:许multithreading中的XA事务传播

如何在Java SE(非Java EE或Spring)中使用事务管理器(如Bitronix , JBoss TS或Atomikos )来支持以下用例: 我们假设我们有以下类: public class Dao { public void updateDatabase(DB db) { connet to db run a sql } } 我们从中创建一个Java Runnable,如下所示: public class MyRunnable extends Runnable { Dao dao; DB db; public MyRunnable(Dao dao, DB db) { this.dao=dao; this.db = db; } public run() throws Exception { return dao.updateDatabase(db); […]

UserTransaction和EntityTransaction之间的区别

标题说明了一切: UserTransaction和EntityTransaction之间有什么区别? 我的基本理解是,当需要JTA时使用UserTransaction (例如,对多个事物进行查询),并且仅在需要JPA时使用EntityTransaction (例如,当查询是primefaces的时)。 这是两者之间的唯一区别还是还有更多呢?

JDBC和JMS的Spring事务同步

我有一个在jboss上运行的spring web app,当前配置为使用HibernateTransactionManager进行db事务,JmsTransactionManager用于jms。 对于jms,我们使用Camel和ActiveMQ,我们的数据库是DB2。 在一个事务中,我需要将一些记录写入数据库并发送两个异步jms消息。 jms消息是事件通知,我只希望在数据库事务提交时发送它们。 我愿意接受在jdbc事务已经提交之后与代理通信失败的风险(因此没有发送消息但是db已经提交)所以我认为我不需要正确的XA。 我相信我需要的是使用spring transaction同步的“尽力而为”的事务管理。 Spring文档提示了spring将同步两个事务并仅在jdbc事务提交后提交jms事务这一事实 – 但我不认为它非常清楚。 这里的spring文档http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/transaction.html#tx-resource-synchronization没有详细介绍它是如何工作的。 我发现了一些其他的消息来源说spring会做我想要的,包括下面的一些javadoc,我已经编写了一些集成测试,也显示了它。 http://static.springsource.org/spring/docs/3.0.x/api/org/springframework/jms/support/JmsAccessor.html#setSessionTransacted%28boolean%29这里的setSessionTransacted上的javadoc听起来就像我想要的那样。 从我所看到的,我认为创建Camel JmsConfiguration并将事务处理设置为true就足够了: 然而,我需要说服我工作的人有点怀疑并且认为我的集成测试只能起作用,因为副作用很少而不是有意的弹簧特征。 所以我的问题是 – 我是否正确可以依赖Spring来同步事务并始终在jdbc事务之后提交jms事务,或者这不是我应该依赖的东西,你能否指出我所说的任何官方文档那清楚吗? 我想一般来说这是一个很好的方法,或者我们应该以不同的方式管理这些交易吗?

示例或用途解释EJB事务属性的案例

EJB事务属性(和注释)有一些很好的解释,例如, OpenEJB 。 但有时当我试图用一些没有使用过很多交易资源的人来掩盖这一点时,我看到他们的眼睛开始茫然。 所以我的问题 – 你如何向祖母解释EJB交易属性? 需要 RequiresNew 强制性 不支持 支持 决不 我在想一个人为的例子,类比或简洁的现实用例会有所帮助。

如果无法传递POST响应,如何回滚事务

使用Spring MVC,假设我已经实现了一个处理POST请求的控制器,在事务中执行数据库操作,并在响应体中返回一个结果。 这是控制器和服务层: @RestController @RequiredArgsConstructor public class SomeController { private final SomeService someService; @PostMapping(“/something”) public SomeResult postSomething(Something something) { return someService.handle(something); } } @Service @RequiredArgsConstructor public class SomeService { private final SomeRepository someRepository; @Transactional public SomeResult handle(Something something){ // changes to the database } } 问题: 假设有人在服务呼叫后立即拔出网络电缆 ,那么交易就会被调整。 1)如果无法传递响应,Spring会抛出exception吗? 2)如果无法传递响应,是否可以回滚事务? 3)如何在客户端重试时确保数据库保持一致? (POST不是幂等的)。 谢谢!