Tag: transactions

如何在EJB中提交事务?

我有以下场景, public void someEjbMethod1() { for (int i=0; i=10; i++) { em.merge(arr[i]); em.flush(); } } 我需要分别合并( arr[i] )的每个对象。 因为上面的代码将提交函数末尾的所有arr[i]实例。 我想做以下事情: public void someEjbMethod1() { for (int i=0; i=10; i++) { saveObj(arr[i]); } } // should I use a transaction attribute here?? public void saveObj(SomeObject obj) { em.merge(arr[i]); em.flush(); }

如何在Cassandra中执行批处理语句和LWT作为事务

我有两张下面的模型表: CREATE TABLE IF NOT EXISTS INV ( CODE TEXT, PRODUCT_CODE TEXT, LOCATION_NUMBER TEXT, QUANTITY DECIMAL, CHECK_INDICATOR BOOLEAN, VERSION BIGINT, PRIMARY KEY ((LOCATION_NUMBER, PRODUCT_CODE))); CREATE TABLE IF NOT EXISTS LOOK_INV ( LOCATION_NUMBER TEXT, CHECK_INDICATOR BOOLEAN, PRODUCT_CODE TEXT, CHECK_INDICATOR_DDTM TIMESTAMP, PRIMARY KEY ((LOCATION_NUMBER), CHECK_INDICATOR, PRODUCT_CODE)) WITH CLUSTERING ORDER BY (CHECK_INDICATOR ASC, PRODUCT_CODE ASC); 我有一个业务操作,我需要更新表中的CHECK_INDICATOR和INV表中的QUANTITY。 由于CHECK_INDICATOR是LOOK_INV表中键的一部分,我需要先删除该行并插入一个新行。 以下是我需要以批处理方式执行的三个操作(要么所有操作都要成功执行,要么不执行任何操作) […]

NamingException:jta.UserTransaction

我有一个直接使用Java Transaction API资源的hibernate应用程序。 我正在尝试使用UserTransaction来完成一些基本的数据库事务 UserTransaction接口定义允许应用程序显式管理事务边界的方法 在hibernate.cfg.xml文件中,我有以下属性: true java:comp/env/myDataSource java:comp/UserTransaction org.hibernate.transaction.JTATransactionFactory 在应用程序的web.xml中,UserTransaction在 Object factory for MyBean instances. UserTransaction javax.transaction.UserTransaction 在代码中,我尝试使用InitialContext以其JNDI名称查找UserTransaction public UserTransaction getTransactionContext() throws Exception { if (this.ut == null) { ut = (UserTransaction)new InitialContext().lookup(“java:comp/UserTransaction”); } return ut; } 但是返回以下exception: 03:27:37,530 ERROR [someServlet:555] Error in someMethod javax.naming.NamingException: Cannot create resource instance at org.apache.naming.factory.ResourceEnvFactory.getObjectInstance(ResourceEnvFactory.java:117) at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:321) at […]

Wildfly 8.0.0.Final JTA交易问题

由于我们在事务中使用了大量的@ApplicationScoped bean,但我们不想使用EJB(ApplicationScoped bean不能与无状态bean一起使用),我们创建自己的事务拦截器,例如: @Resource UserTransaction tx; @Resource(mappedName=”java:jboss/TransactionSynchronizationRegistry”) TransactionSynchronizationRegistry tsr; @AroundInvoke public Object manageTransaction(InvocationContext context) throws Exception { Object result; if (Status.STATUS_NO_TRANSACTION == tsr.getTransactionStatus()) { tx.begin(); // System.out.println(“Starting transaction”); result = context.proceed(); tx.commit(); } else { result = context.proceed(); } // System.out.println(“Committing transaction”); return result; } 但是,在JTA事务的情况下,我们遇到如下错误: 使用自己的TransactionInterceptor导致 引发者:java.sql.SQLException:java.sql.SQLException:XAER_RMFAIL:当全局事务处于IDLE状态时,无法执行命令 我们曾经使用Seam3托管交易,它似乎工作正常。 但它不再适用于Wildfly。 我们尝试了Deltaspike的jpa模块,但是即使我们遵循他们的指令,它似乎也存在围绕多个数据源的事务问题(非JTA似乎很好)。 我们还尝试了@Applicationscoped @TransactionalManagement,但它没有给我们交易。 我有什么选择使用Wildfly而不是@Stateful或@Statelss @Singleton等?

OSGi中的事务回滚

我有一个OSGi包,我在其中声明了一个服务并用蓝图注入一个事务: 在这个服务中,我有两个方法,每个方法都在数据库中写入数据,如下所示: public void createParent() throws MyException { Parent parent = new Parent(); … // Set parent fields em.persist(parent); createChild(); // Checks that could throw MyException } public void createChild() throws MyException { Child child = new Child(); … // Set child fields em.persist(child); // Checks that could throw MyException } 我的问题如下: 如果我在em.persist(parent);之间的createParent方法中抛出运行时exceptionem.persist(parent); 和createChild(); 事务回滚(正如我所料)并且父级不会保留在数据库中。 […]

即使在日志中看到“添加事务方法”,方法也不被事务顾问拦截

我有一个@Transactional @Controller ,但它的方法是由Spring MVC框架调用的,没有事务。 在exception跟踪中,我找不到拦截调用的事务顾问: org.hibernate.HibernateException: No Session found for current thread org.springframework.orm.hibernate4.SpringSessionContext.currentSession(SpringSessionContext.java:106) org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:1014) org.example.businesslogic.MyController.userLoggedIn(SwiperRest.java:48) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method.invoke(Method.java:483) org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215) org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132) org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104) org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:749) org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:689) org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83) org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938) 另一方面,日志清楚地表明控制器方法被检测为事务性: DEBUG osbfsDefaultListableBeanFactory – Returning cached instance of singleton bean ‘org.springframework.transaction.config.internalTransactionAdvisor’ DEBUG osbfsDefaultListableBeanFactory – Returning cached instance of singleton bean ‘metaDataSourceAdvisor’ DEBUG ostaAnnotationTransactionAttributeSource – Adding transactional method ‘MyController.userLoggedIn’ […]

TransactionAttribute注释(@REQUIRES_NEW)被忽略

我有一个问题,两个单独的事务以与它们实际执行的相反的顺序刷新到数据库。 这是商业案例:RemoteJob-RemoteJobEvent一对多关系。 每次创建新事件时,都会获取一个时间戳,并在RemoteJob和RemoteJobEvent的lastModified字段中设置,并保留两个记录(一个更新+一个插入)。 这是代码中的样子: class Main { @TransactionAttribute(TransactionAttributeType.REQUIRED) public void mainMethod(…) { RemoteJob job = remoteJobDAO.findById(…); // … addEvent(job, EVENT_CODE_10); // Here the separate transaction should have ended and its results // permanently visible in the database. We refresh the job then // to update it with the added event: remoteJobDAO.refresh(job); // calls EntityManager.refresh() // […]

c3p0说 – “java.lang.Exception:DEBUG ONLY:过期资源检出堆栈跟踪”启动一个hibernate事务

最近,我的tomcat开始挂起。 这些请求从未得到回复。 我发现这是因为连接永远不会返回到连接池。 我使用了c3p0和hibernate,数据库是mysql 5.5 为了调试连接泄漏,我在hibernate.cfg.xml添加了以下属性 30 true 添加后,在日志中说: [2013-10-12 23:40:22.487] [ INFO] BasicResourcePool.removeResource:1392 – A checked-out resource is overdue, and will be destroyed: com.mchange.v2.c3p0.impl.NewPooledConnection@1f0c0dd [2013-10-12 23:40:22.487] [ INFO] BasicResourcePool.removeResource:1395 – Logging the stack trace by which the overdue resource was checked-out. java.lang.Exception: DEBUG ONLY: Overdue resource check-out stack trace. 指向at dao.DAOBasicInfo.getBean(DAOBasicInfo.java:69) public static Basicinfo […]

处理Hibernate事务

目前,我在每个 Controller方法中都复制了此代码: Transaction transaction = HibernateUtil.getSessionFactory().getCurrentSession().getTransaction(); if (!HibernateUtil.getSessionFactory().getCurrentSession().getTransaction().isActive()) { transaction.begin(); } 这是正确的方法,还是有更好的方法,也许在我可以参考的单独的课程中? 如果是这样,怎么样? 每当我试图将它放在一个单独的类中并从其他类引用它时,它就失败了。 编辑 :我正在尝试使用尽可能少的外部库。 如果Java在JDK中内置了ORM / JPA实现,我就不会使用Hibernate

如何使用JOOQ启动事务和回滚?

是! 我已经阅读了有关的文档 jOOQ永远不会在Connection上提交或回滚(如果CSV导入除外,如果在Import API中明确配置) jOOQ永远不会开始任何交易。 … 但是当我需要一些事务管理时,最好的做法是什么? 我说过我是JOOQ方式的忠实粉丝!