Tag: transactions

Apache Jackrabbit和Spring中的交易

我想在使用Apache Jackrabbit存储库的Spring webapp上运行事务。 然后,JackRabbit使用关系数据库(MySQL / PgSQL)来处理文本数据。 二进制数据存储到FileSystem。 到目前为止,我有这个Jackrabbit bean的function配置: 还有其他的jackrabbit配置在repository.xml文件中。 如何在JackRabbit存储库上成功运行事务我该怎么办? 我应该使用哪种技术? 我在Tomcat / Glassfish上运行Spring 3.1,Jackrabbit 2.3.3。 而且我不想使用过时的弹簧模块。

JBoss-AS7 @TransactionTimeout:缺少Maven依赖项

我正在使用JBoss AS 7.1.1.Final“Brontes”并在@Stateless -Bean中遇到长时间运行的方法调用,该调用在5分钟后被取消: [com.arjuna.ats.arjuna] (Transaction Reaper) ARJUNA012117: TransactionReaper::check timeout 搜索这个问题我找到了一些答案Jboss 7.1 ejb 2.1自定义事务超时配置和wiki JBoss-AS7参考指南或JBoss Wiki 。 答案似乎很简单:用@TransactionTimeout注释方法但是 :这个类在我的类路径中不可用! 我有一个带有EAR结构的Maven项目, ejb模块具有以下相关的依赖关系,我在几个使用EJB3的项目中使用它们: org.jboss.spec.javax.ejb:jboss-ejb-api_3.1_spec (已提供) javax.enterprise:cdi-api (已提供) org.hibernate.javax.persistence:hibernate-jpa-2.0-api (已提供) org.hibernate:hibernate-validator (提供) 缺少哪种依赖?

Hibernate和Spring事务 – 使用私有构造函数/静态工厂方法

我们有一个Hibernate / Spring应用程序,它有以下Spring bean: 将应用程序连接在一起时,在我们的hibernate实体中使用私有构造函数时会出现以下错误: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: No visible constructors in class ‘ourclass’ 实体是典型的域对象,例如Employee等。 将构造函数的可见性修饰符更改为包(或公共)时,应用程序运行正常,实体将存储/加载到数据库中。 我们/我们如何/可以在Spring / Hibernate事务管理中使用私有构造函数/静态工厂方法? 我们使用Hibernate注释来映射实体/关系。 applicationContext.xml中没有为与该问题相关的域类声明bean定义。 它是一个pojo,应该有一个静态工厂方法和一个私有构造函数。 我怎样才能使Hibernate(org.springframework.spring-orm.hibernate3类)使用静态工厂方法而不是构造函数? 或者可能在必要时调用私有构造函数? 使用spring factory-method配置是有意义的,但实体不会在applicationContext.xml中映射为bean。 它们仅使用Hibernate持久性的@Entity注释进行注释。 希望这个编辑能够澄清(而不是神秘)这个问题。 🙂

使用Spring和Hibernate的嵌套事务

在我的应用程序中,有多个步骤,通过多种方法顺序进行数据库的许多提交。 例: A -> B -> C -> D ->E -> F -> G A呼叫B,呼叫C.然后B呼叫D. D呼叫E,依此类推。 所有这些方法都有一些数据库操作。 据我所知, PROPAGATION_REQUIRED (声明式事务管理 – 弹簧推荐方式),如果E成功完成,则事务(以及E中的操作将被提交)。 现在,由于一些例外, F应该导致回滚。 我希望从A所做的一切开始回滚。 这可以通过声明式事务管理吗? 或者我应该使用程序化事务管理? 谢谢。

无法填充池(没有可用的缓冲区)

我正在使用Wildfly 8.2并在打开某个网页时触发一系列数据库请求。 所有查询都通过JPA Criteria API调用,按预期返回结果 – 并且 – 它们都不会发出警告,错误或exception。 这一切都在Parallel Plesk中运行。 现在,我注意到在2到3天内出现以下错误,并且网站无响应。 我重新开始,我再等3天,直到它再次发生(取决于我的请求数量)。 我检查了我的linux服务器上的tcpsndbuf,我注意到它一直处于最大值。 除非我重新启动Wildfly。 显然它无法释放连接。 连接由JPA / Hibernate和Wildfly容器管理。 我不做任何特殊或自定义的交易处理,例如开盘,收盘。 等我把它留给了Wildfly。 我正在使用的MySQL驱动程序是5.1.21(mysql-connector-java-5.1.21-bin.jar) 在standalone.xml中,我定义了以下数据源数据源值(以及其他值): TRANSACTION_READ_COMMITTED 3 10 32 true </statement 有没有人经历过相同的tcpsndbuf值(或这个错误)的上升? 如果您需要更多配置或日志文件,请告诉我们。 谢谢! 更新尽管有以下额外的超时设置,它仍然会进入挂钩。 因此,每当达到最大tcpsndbuf时,它将使用100%的CPU时间。 ,

使用JUnit4进行测试时,Spring @transactional不会启动事务

我有以下配置。 org.hibernate.dialect.SQLServerDialect true true org.hibernate.dialect.SQLServerDialect false false true true 然后,当我运行带有insert语句的测试时,它们会产生错误消息: javax.persistence.TransactionRequiredException: Executing an update/delete query at org.hibernate.ejb.QueryImpl.executeUpdate(QueryImpl.java:47) 经过深思熟虑,我试过这个: @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { “classpath:services.xml” }) @Transactional(propagation = Propagation.REQUIRED) @TransactionConfiguration(defaultRollback = true) @TestExecutionListeners(value = { DependencyInjectionTestExecutionListener.class, TransactionalTestExecutionListener.class}) public class SimpleUnitTest { @Test public void simpleTest() throws Exception { System.out.println(entityManager.getTransaction().isActive()); assertTrue(entityManager.getTransaction().isActive()); } } 它失败了。 entityManager.getTransaction()。isActive()实际上是假的。 为什么Transactional测试不会开始交易?

一个事务中的Hibernate和JDBC

我有一个标记为@Transactional的方法。 它由几个函数组成,其中一个使用JDBC,第二个是Hibernate,第三个是JDBC。 问题是Hibernate函数所做的更改在最后一个与JDBC一起使用的函数中是不可见的。 @Transactional void update() { jdbcUpdate1(); hibernateupdate1(); jdbcUpdate2(); // results of hibernateupdate1() are not visible here } 所有函数都配置为使用相同的数据源: myDataSource bean用于代码中。 myDataSource.getConnection()用于处理jdbc函数和中的连接 getHibernateTemplate().execute(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { … } }); 用于hibernate函数。 谢谢。

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

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

应用命令模式的真实世界示例

命令模式可用于实现Transactional behavior (和Undo )。 但是我用谷歌搜索找不到这些例子。 我只能找到switched on或off灯泡的一些简单例子。 在哪里可以找到使用Command Pattern实现的/这些行为的编码示例(最好是Java )?

使用Hibernate和Guice管理JavaSE中的事务

我正在编写一个使用GWT,Hibernate和Google Guice(使用GIN)的相当简单的应用程序。 我想要做的是使用外部管理器管理事务(比如在Spring中使用@Transactional ),而不是使用EntityManager#getTransaction 。 我尝试使用@Transactional ,但它似乎对我不起作用。 我已经使用Providers注入了EntityManager,如下所示: /* import stuff */ public class DbProvider implements Provider { public EntityManager get() { EntityManagerFactory emf = Persistence.createEntityManagerFactory(“persdb”); return emf.createEntityManager(); } } 在手动管理事务时,它似乎正常工作。 我希望自动管理事务,也可以使用DBUnit进行自动化测试。 有谁知道如何解决这个问题?