我们正在从JBoss 4.2.3GA和MS 2008 R2迁移到Wildfly 11和PostgreSQL 10。
我们有一个非常复杂的应用程序,在这个应用程序中,我们使用了一个无法由我自己调试的外部API。我们使用此API的EJB远程代理来执行操作。
在一个容器管理事务中,有几个使用JPA (实体上的NamedQuery)执行的DB-操作(xa-在Wildfly 11中配置的数据源)。
NamedQuery在大多数情况下运行良好,但有一种情况发生时,日志文件中没有任何可见的通知就会发生错误。
事务被标记为状态回滚,但我不知道为什么。没有例外,没有调试消息,什么都没有。
在这个场景中,同一个NamedQuery的唯一不同之处是,在同一事务中之前几步就从表中删除了行。
我们的PostgreSQL和我们的应用程序已经出现了一些问题,因为PostgreSQL没有像MS那样实现标准事务隔离级别“读未实现”,请参阅https://www.postgresql.org/docs/10/static/transaction-iso.html
我不知道这是否与我的问题有关。
我现在唯一的猜测是外部API或org.jboss.jca.adapters.jdbc.WrapperDataSource.中的错误和抑制异常。
这是相关的Stacktrace,Hibernate未能准备语句:
原因: org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:47):无法准备在org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:111) at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:182) at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareQueryStatement(StatementPreparerImpl.java:148) at org.hibernate.loader的陈述。Loader.prepareQueryStatement(Loader.java:1934) at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1903) at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1881) at org.hibernate.loader.Loader.doQuery(Loader.java:925) at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:342) at org.hibernate.loader.Loader.doList(Loader.java:2622) at org.hibernate.loader.Loader.org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2434),org.hibernate.loader.Loader.list(Loader.java:2429),org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:501),org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:371),org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:216),org.hibernate.internal.SessionImpl.list(SessionImpl.java:1339) at org.hibernate.internal.QueryImpl.list(QueryImpl.java:87) at org.hibernate.jpa.internal.QueryImpl.list(QueryImpl.java:606) at org.hibernate.jpa.internal.QueryImpl.getResultList(QueryImpl.java:483) 172个 由: org.jboss.jca.adapters.jdbc.WrapperDataSource.checkTransactionActive(WrapperDataSource.java:245):IJ031070:事务无法进行: STATUS_MARKED_ROLLBACK at org.jboss.jca.adapters.jdbc.WrappedConnection.checkTransactionActive(WrappedConnection.java:1928) at org.jboss.jca.adapters.jdbc.WrappedConnection.checkStatus(WrappedConnection.java:1943) at org.jboss.jca.adapters.jdbc.WrappedConnection.checkTransaction(WrappedConnection.java:1917) atorg.jboss.jca.adapters.jdbc.WrappedConnection.prepareStatement(WrappedConnection.java:447) at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$5.doPrepare(StatementPreparerImpl.java:146) at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:172) .189号
有没有人知道什么会导致事务在没有任何通知的情况下被标记为状态回滚?
发布于 2017-12-19 15:55:08
我发现了真正的问题。正如已经猜到的,抛出的异常被应用程序吞没并导致事务被设置为状态回滚。
我发布的堆栈跟踪是以下错误,因为当事务已经设置为回滚时,不允许准备语句(签入WrapperDataSource)。
在将Arjuna的日志级别设置为跟踪后,我终于发现了错误。
真正的异常是由于数据(业务逻辑)中的不一致性而抛出的,并且来自不同的事务/连接配置以及Server和PostgreSQL的行为。但那是另一个故事..。
https://stackoverflow.com/questions/47797803
复制相似问题