Tag: spring transactions

Spring Transactional注释,隔离不适用于READ_UNCOMMITTED

我在Java中有一个方法,它由spring Transactional注释包装。 我里面有2个操作,一个是delete ,另一个是insert 。 我的插入语句必须依赖于第一个操作(即delete ),但是由于第一个操作尚未提交,我的插入失败(唯一约束)。 但有趣的是,通常在同一个事务中,我应该能够在同一个事务中读取/查看未经授权的操作(我的旧专有框架能够做到这一点),但这不适用于我的场景,第二个插入仍然失败,因为它看到数据尚未删除。 我尝试使用隔离READ_UNCOMMITTED ,但它不起作用。 我必须将这两个操作放在同一个事务中,因为任何一个失败都应该回滚两个操作,我不能提交第一个操作然后继续第二个操作。 我怎么能在Spring框架中做到这一点?

Spring Transaction Management:使用@Transactional与使用AOP(<aop:advisor)

我对Spring事务管理感到困惑。 在我的应用程序中,我使用服务类中的@Transactional实现了事务管理。 我配置我的spring.xml就像: ${jdbc.dialect} false update 如果我在配置文件中实现事务管理,而不在服务类中使用@Transactional: 它是否比@Transactional给我任何好处? 有人告诉我使用@Transactional也是在spring实施AOP。 谁能解释我怎么样?

Spring + Websphere 8.5:无法查找JNDI名称

有一个运行XA Datasource的Websphere AS 8.5。 还有一个Spring应用程序必须在此环境中工作并连接到数据源。 应用程序上下文由servlet加载,应用程序使用RmiExporters提供对某些服务的RMI访问(在单独的线程中共享),所有DAO的方法都用@Transactional标记。 如果我尝试从主线程向数据库写一些东西(例如在任何类的初始化期间),它可以正常工作。 但是如果我尝试通过RMI调用来编写(或使用HQL SELECT-query读取),我会看到一个exception: org.hibernate.service.jndi.JndiException: Unable to lookup JNDI name [java:comp/websphere/ExtendedJTATransaction] at org.hibernate.service.jndi.internal.JndiServiceImpl.locate(JndiServiceImpl.java:68) at org.hibernate.service.jta.platform.internal.WebSphereExtendedJtaPlatform$TransactionManagerAdapter$TransactionAdapter.(WebSphereExtendedJtaPlatform.java:156) at org.hibernate.service.jta.platform.internal.WebSphereExtendedJtaPlatform$TransactionManagerAdapter$TransactionAdapter.(WebSphereExtendedJtaPlatform.java:152) at org.hibernate.service.jta.platform.internal.WebSphereExtendedJtaPlatform$TransactionManagerAdapter.getTransaction(WebSphereExtendedJtaPlatform.java:124) at org.hibernate.service.jta.platform.internal.WebSphereExtendedJtaPlatform$TransactionManagerAdapter.getStatus(WebSphereExtendedJtaPlatform.java:119) at org.hibernate.engine.transaction.internal.jta.JtaStatusHelper.getStatus(JtaStatusHelper.java:73) at org.hibernate.engine.transaction.internal.jta.JtaStatusHelper.isActive(JtaStatusHelper.java:115) at org.hibernate.service.jta.platform.internal.TransactionManagerBasedSynchronizationStrategy.canRegisterSynchronization(TransactionManagerBasedSynchronizationStrategy.java:56) at org.hibernate.service.jta.platform.internal.AbstractJtaPlatform.canRegisterSynchronization(AbstractJtaPlatform.java:148) at org.hibernate.engine.transaction.internal.TransactionCoordinatorImpl.attemptToRegisterJtaSync(TransactionCoordinatorImpl.java:240) at org.hibernate.engine.transaction.internal.TransactionCoordinatorImpl.pulse(TransactionCoordinatorImpl.java:268) at org.hibernate.ejb.AbstractEntityManagerImpl.joinTransaction(AbstractEntityManagerImpl.java:1202) at org.hibernate.ejb.AbstractEntityManagerImpl.postInit(AbstractEntityManagerImpl.java:178) at org.hibernate.ejb.EntityManagerImpl.(EntityManagerImpl.java:89) at org.hibernate.ejb.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:179) at org.hibernate.ejb.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:174) at com.ibm.ws.jpa.management.JPAEMFactory.createEntityManager(JPAEMFactory.java:297) at org.springframework.orm.jpa.EntityManagerFactoryUtils.doGetTransactionalEntityManager(EntityManagerFactoryUtils.java:202) at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:211) at […]

在MVC请求完成之前,Hibernate事务不会启动

我正在使用spring MVC 3和Hibernate 3.6,使用Spring tx来管理hibernate事务, 现在我正在向控制器发出一个ajax请求,当控制器返回一个值时,我导航到另一个页面,我继续检查控制器,直到返回值。 这个控制器方法调用也有一些数据库事务要做,而我想要做的是在每个事情完成并且数据库tx完成并且一切都很好时导航,但是会发生什么是hibernate的persist()或save( )方法退出但事务未启动。 我调试了代码并发现spring对事务执行了某种队列,直到对控制器的请求完成为止,这意味着它不会执行事务,而是表示方法已完成,并对事务进行排队然后执行此操作后来。 编辑 这是我的相关代码 $(“#kse_search”).click(function (e){ $.get(‘updateProgress’,function(data){ if(data == ‘NaN’ || data < 0){ $(".modal-backdrop").removeClass("hidden"); $("#bar_carrier").removeClass("hidden"); $.get('kse.htm'); interval = setInterval("ajaxP()",1000); }else{ alert("There is an ongoing query for the same session, please wait until its finished"); } }); }) // updata progress function ajaxP(){ $.get('updateProgress',function(data){ datain = data; if(data […]

使用@Async嵌套@Transactional方法

我正在使用Spring和JPA。 我打开了@EnableAsync和@EnableTransactionManagement 。 在我的用户注册服务方法中,我有一些我称之为@Async其他服务方法。 这些方法可以执行各种操作,例如发送欢迎电子邮件以及使用我们的第三方支付系统注册新创建的用户。 一切正常,直到我想validation第三方支付系统是否成功创建了用户。 此时, @Async方法尝试创建UserAccount (引用新创建的User )并使用javax.persistence.EntityNotFoundException: Unable to find com.dk.st.model.User with id 2017输出错误javax.persistence.EntityNotFoundException: Unable to find com.dk.st.model.User with id 2017 注册调用如下所示: private User registerUser(User newUser, Boolean waitForAccount) { String username = newUser.getUsername(); String email = newUser.getEmail(); // … Verify the user doesn’t already exist // I have tried all manner of […]

hibernate session.flush with spring @transactional

我在我的应用程序中使用spring和hibernate并使用spring事务。 所以我在方法和带有数据库查询方法的DAO层上有注释@transaction的服务层。 @Transactional(readOnly = false) public void get(){ } 问题是当我想在数据库中保存一个对象时,我必须在DAO层方法结束时使用session.flush() 。为什么? 我想如果我有注释@ transaction,那么spring应该在完成服务方法时自动提交事务。 DAO层: public BaseEntity saveEntity(BaseEntity entity) throws Exception { try { Session session = sessionFactory.getCurrentSession(); session.saveOrUpdate(entity); session.flush(); } catch (HibernateException he) { throw new Exception(“Failed to save entity ” + entity); } return entity; } 服务层: @Transactional(readOnly = false) public BaseEntity saveEntity(BaseEntity entity) […]

仅在确定要提交但在提交之前拦截事务

Context是Java – 带有Hibernate和Spring的JPA。 我们来看两阶段提交协议的场景(但只有一个资源): 查询从应用程序提交 投票是/否(在我们的案例中来自数据库) 3.1。 如果是,来自数据库 3.1.1。 ( 在代码中进行回调 ) – 不是协议的一部分 3.1.2。 提交数据库 3.2如果没有 3.2.1回滚到数据库 我想要的是一种在代码中从3.1.1进行回调的方法,但只有当知道事务将被提交但在实际提交之前。 此外,如果在此处抛出exception,则应回滚该事务。 使用Spring的TransactionSynchronization (*),允许您在事务提交/完成之前或提交/完成之后拦截事务。 beforeCommit()回调表示在调用方法后仍然可以发生回滚; 即使事务失败,也会调用beforeComplete() 在事务实际提交到数据库之后afterCommit/Complete()并且无法回滚。 现在我看起来似乎我想要的是另一个完整的两阶段提交协议; 但我想知道Spring中是否有解决方法。 区别在于回调中完成的调用无法回滚。 来自Spring 4.2的(*)与@TransactionalEventListener和TransactionPhase非常简单,它很好地抽象了TransactionSynchronization

java.lang.ClassCastException:com.sun.proxy。$ Proxy0无法强制转换为org.andrea.myexample.myDeclarativeTransactionSpring.StudentJDBCTemplate

我试图在Spring Framework应用程序中实现关于声明式事务的本教程但是不起作用,因为当我尝试执行MainApp类来测试应用程序行为时,我得到一个错误: http://www.tutorialspoint.com/spring/declarative_management.htm 所以我有StudentDAO接口我只定义了我想要的CRUD方法: package org.andrea.myexample.myDeclarativeTransactionSpring; import java.util.List; import javax.sql.DataSource; /** Interfaccia che definisce i metodi che implementano le operazioni di CRUD * che vogliamo implementare nel nostro DAO: */ public interface StudentDAO { /** * Questo metodo viene usato per inizializzare le risorse del database cioè * la connessione al database: */ public void […]

使用Spring Batch进行事务管理

我发现实际上是Spring,我可以设置一些工作。 现在,我想使用Hibernate / JPA将我导入的数据保存在数据库中,并且我不断收到此错误: 14:46:43.500 [main] ERROR osbcore.step.AbstractStep – Encountered an error executing the step javax.persistence.TransactionRequiredException: no transaction is in progress 我看到问题出在交易上。 这是我对entityManager和transactionManager spring java配置: @Configuration public class PersistenceSpringConfig implements EnvironmentAware { @Bean public LocalContainerEntityManagerFactoryBean entityManagerFactory() throws Exception { // Initializes the entity manager LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean(); factoryBean.setPersistenceUnitName(PERSISTENCE_UNIT_NAME); factoryBean.setJpaVendorAdapter(new HibernateJpaVendorAdapter()); factoryBean.setDataSource(dataSource()); // Scans […]

@EnableTransactionManagement的范围是什么?

我试图了解在多个JavaConfig上下文的情况下将@EnableTransactionManagement注释放在哪里的正确位置? 请考虑以下场景:我在JPAConfig.java中有JPA配置,在AppConfig.java中有一组服务bean。 然后我在RootConfig.java中编写整个应用程序配置。 我在JPAConfig.java中定义事务管理器以及启用JPA存储库的扫描 – 因为那些暴露事务行为,我将@EnableTransactionManagement放在JPAConfig上并且它可以工作。 但是,一些服务bean还需要具有事务方法,例如在单个事务中访问多个存储库。 我是否也应该在AppConfig上放置@EnableTransactionManagement ? 在我看来,这种注释的实现看起来会导致某些bean的重新定义。 实际上这样做对我来说似乎并不适用。 @Configuration @EnableTransactionManagement @EnableJpaRepositories(“com.mypackage.repositories”) public class JPAConfig { // … here are EntityManager and PlatformTransactionManager beans } @Configuration @ComponentScan(“com.mypackage.services”) // @EnableTransactionManagement // – ??? public class AppConfig { } @Configuration @Import({AppConfig.class, JPAConfig.class}) public class RootConfig { } 感谢任何建议。