在持久化实体期间挂起的多线程事务通过wildfly进行postgresql [英] Multithreading transactions hanging during persisting entity to postgresql via wildfly

查看:838
本文介绍了在持久化实体期间挂起的多线程事务通过wildfly进行postgresql的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

  @Stateless 
public class JPABean< T> {

private static final Logger LOG = Logger.getLogger(JPABean.class);

@PersistenceContext(unitName =myPersistanceSettings)
private EntityManager em;

public void write(T o){
LOG.info(PERSISTING);
em.persist(o);
LOG.info(FLASHING);
em.flush();
LOG.info(SUCCESS);
}

我的persistance.xml

 < persistence-unit name =eSystemJPAtransaction-type =JTA> 
< provider> org.hibernate.ejb.HibernatePersistence< / provider>
< jta-data-source> java:jboss / datasources / myDS< / jta-data-source>
<属性>
< property name =hibernate.show_sqlvalue =true/>
< property name =hibernate.hbm2ddl.autovalue =validate/>
< property name =hibernate.dialectvalue =org.hibernate.dialect.PostgreSQLDialect/>
< property name =hibernate.transaction.jta.platformvalue =org.hibernate.service.jta.platform.internal.JBossAppServerJtaPlatform/>
< / properties>
< / persistence-unit>

我的api:

  @Path(activityAPI)
public class ActivityAPI {

private static final Logger log = Logger.getLogger(ActivityAPI.class);

@EJB
私人JPABean< ActivityLogEntry> activityJpa;

@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response reportActivity(@Context HttpServletRequest hsr,final ActivityAPIRequest body){ ...

我的standalone.xml与数据源:

 < datasource jta =truejndi-name =java:jboss / datasources / myDSpool-name =PostgrePoolenabled =truespy =true use-ccm =false> 
< connection-url> jdbc:postgresql:// localhost / postgres< / connection-url>
< driver> postgres< / driver>
< pool>
< min-pool-size> 10< / min-pool-size>
< max-pool-size> 100< / max-pool-size>
< prefill> true< / prefill>
< / pool>
< security>
< user-name> postgres< / user-name>
< password> postgres< / password>
< / security>
< validation>
< validate-on-match> false< / validate-on-match>
< background-validation> false< / background-validation>
< / validation>
< statement>
< share-prepared-statements> false< / share-prepared-statements>
< / statement>
< / datasource>

我收到:

  2015-03-11 17:48:39,945 INFO [JPABean.write]:PERSISTING 
2015-03-11 17:48:39,946 INFO [AbstractLoggingWriter.write]:INFO [ JPABean.write]:PERSISTING
2015-03-11 17:48:39,946 DEBUG [TransactionCoordinatorImpl.attemptToRegisterJtaSync]:由于自动加入检查而跳过JTA同步注册
2015-03-11 17:48:39,946 INFO [AbstractLoggingWriter.write]:DEBUG [TransactionCoordinatorImpl.attemptToRegisterJtaSync]:由于自动加入检查跳过JTA同步注册
2015-03-11 17:48:39,947 DEBUG [TransactionCoordinatorImpl.attemptToRegisterJtaSync]:成功注册同步
2015-03-11 17:48:39,947 INFO [AbstractLoggingWriter.write]:DEBUG [TransactionCoordinatorImpl.attemptToRegisterJtaSync]:成功注册同步
2015-03-11 17:48:39,947 DEBUG [AbstractEntityManagerImpl.joinTransaction]:Looking为了JTA交易in
2015-03-11 17:48:39,947 INFO [AbstractLoggingWriter.write]:DEBUG [AbstractEntityManagerImpl.joinTransaction]:寻找JTA交易加入
2015-03-11 17:48:39,948 INFO [AbstractLoggingWriter.write]:Hibernate:select nextval('hibernate_sequence')
2015-03-11 17:48:39,949 DEBUG [LogicalConnectionImpl.obtainConnection]:获取JDBC连接
2015-03-11 17 :48:39,949 INFO [AbstractLoggingWriter.write]:DEBUG [LogicalConnectionImpl.obtainConnection]:获取JDBC连接
2015-03-11 17:48:39,950 DEBUG [LogicalConnectionImpl.obtainConnection]:获取JDBC连接
2015 -03-11 17:48:39,950 INFO [AbstractLoggingWriter.write]:DEBUG [LogicalConnectionImpl.obtainConnection]:获取JDBC连接
2015-03-11 17:48:39,952 DEBUG [LogicalConnectionImpl.releaseConnection]:释放JDBC连接
2015-03-11 17:48:39,952 INFO [AbstractLoggingWriter.write]:DEBUG [LogicalConnectionImpl.releaseConnection]:发布JDBC连接
2015-03-11 17:48:39,953 DEBUG [LogicalConnectionImpl.releaseConnection]:发布JDBC连接
2015-03-11 17:48:39,953 INFO [AbstractLoggingWriter.write]:DEBUG [ LogicalConnectionImpl.releaseConnection]:发布JDBC连接
2015-03-11 17:48:39,954 INFO [JPABean.write]:FLASHING
2015-03-11 17:48:39,955 INFO [AbstractLoggingWriter.write] :INFO [JPABean.write]:FLASHING
2015-03-11 17:48:39,957 INFO [AbstractLoggingWriter.write]:DEBUG [ActivityAPI.reportActivity]:POST已收到PUT reportActivity
2015-03-11 17:48:39,957 DEBUG [EntityPrinter.toString]:上市实体:
2015-03-11 17:48:39,957 INFO [AbstractLoggingWriter.write]:DEBUG [EntityPrinter.toString]:上市实体:
2015-03-11 17:48:39,958 DEBUG [EntityPrinter.toString]:ActivityLogEntry {... body ...}
2015-03-11 17:48:39,958 INFO [AbstractLoggingWriter.write]:DEBUG [ EntityPrinter.toString]:ActivityLogEntry {... body ... }
2015-03-11 17:48:39,959 INFO [JPABean.write]:PERSISTING
2015-03-11 17:48:39,959 INFO [AbstractLoggingWriter.write]:INFO [JPABean.write] :PERSISTING
2015-03-11 17:48:39,962 INFO [AbstractLoggingWriter.write]:Hibernate:insert into activity_log_entry(all columns)values(?,?,?,?,?,?,?,? ?)

所以事实上,将2个实体持久化(插入)到一个表中有一个问题。我试图添加@Transactional注释在我的公共写作方法和我的api,但它不起作用。我也尝试使用@TransactionAttribute(TransactionAttributeType.REQUIRED),但它仍然是一样的。使用EntityManagerFactory创建entityManager也不起作用(文档说entityManager不是线程安全的,但是EntityManagerFactory是线程安全的)。我正在使用:



postgressql - 9.3
jboss-ejb-api_3.2_spec
jboss-servlet-api_3.1_spec
resteasy -jaxrs
hibernate-entitymanager
hibernate-validator
driver postresql> 9.3-1102-jdbc41
wildfly 8.2或wildfly 8.0



日志从hibernate:

  2015-03-11 17:53:39,947 WARN [SynchronizationCallbackCoordinatorTrackingImpl.afterCompletion]:HHH000451:事务afterCompletion由后台线程调用;延迟完成处理直到原来的线程可以处理它。 [status = 4] 

从野猫追踪

  17:53:39,944 WARN [com.arjuna.ats.arjuna](Transaction Reaper)ARJUNA012117:TransactionReaper :: check timeout for TX 0:ffff7f000001:62455507:550071b3:35 in state RUN 
17:53:39,945 WARN [com.arjuna.ats.arjuna](Transaction Reaper Worker 0)ARJUNA012095:中止动作id 0:ffff7f000001:62455507:550071b3:35当多个线程在其中活动时被调用。
17:53:39,946 WARN [com.arjuna.ats.arjuna](Transaction Reaper Worker 0)ARJUNA012108:CheckedAction :: check - atomic action 0:ffff7f000001:62455507:550071b3:35中止1个线程活动!
17:53:39,957 WARN [com.arjuna.ats.arjuna](交易收割者)ARJUNA012117:TransactionReaper ::检查超时TX 0:ffff7f000001:62455507:550071b3:3b在状态RUN
17: 53:40,445 WARN [com.arjuna.ats.arjuna](交易收割者)ARJUNA012117:TransactionReaper ::检查超时TX 0:ffff7f000001:62455507:550071b3:35状态CANCEL
17:53:4046 WARN [com .arjuna.ats.arjuna](交易收割者)ARJUNA012378:ReaperElement似乎被楔入:org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:231)
org.apache.log4j.JBossAppenderHandler.doPublish(JBossAppenderHandler .java:42)
org.jboss.logmanager.ExtHandler.publish(ExtHandler.java:79)
org.jboss.logmanager.LoggerNode.publish(LoggerNode.java:296)
org .jboss.logmanager.LoggerNode.publish(LoggerNode.java:304)
org.jboss.logmanager.LoggerNode.publish(LoggerNode.java:304)
org.jboss.logmanager.LoggerNode.publish(LoggerNode .java:304)
org.j boss.logmanager.LoggerNode.publish(LoggerNode.java:304)
org.jboss.logmanager.LoggerNode.publish(LoggerNode.java:304)
org.jboss.logmanager.LoggerNode.publish(LoggerNode。 java:304)
org.jboss.logmanager.LoggerNode.publish(LoggerNode.java:304)
org.jboss.logmanager.Logger.logRaw(Logger.java:721)
org。 jboss.logmanager.Logger.log(Logger.java:672)
org.jboss.logging.JBossLogManagerLogger.doLogf(JBossLogManagerLogger.java:50)
org.jboss.logging.Logger.logf(Logger。 java:2096)
org.hibernate.internal.CoreMessageLogger_ $ logger.rollbackFromBackgroundThread(CoreMessageLogger_ $ logger.java:1032)
org.hibernate.engine.transaction.synchronization.internal.SynchronizationCallbackCoordinatorTrackingImpl.afterCompletion(SynchronizationCallbackCoordinatorTrackingImpl。 java:85)
org.hibernate.engine.transaction.synchronization.internal.RegisteredSynchronization.afterCompletion(RegisteredSynchronization.java:56)
com.arju na.ats.internal.jta.resources.arjunacore.SynchronizationImple.afterCompletion(SynchronizationImple.java:96)
com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.afterCompletion(TwoPhaseCoordinator.java:532)
com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.afterCompletion(TwoPhaseCoordinator.java:463)
com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.cancel(TwoPhaseCoordinator.java:118)
com。 arjuna.ats.arjuna.AtomicAction.cancel(AtomicAction.java:215)
com.arjuna.ats.arjuna.coordinator.TransactionReaper.doCancellations(TransactionReaper.java:377)
com.arjuna.ats。 internal.arjuna.coordinator.ReaperWorkerThread.run(ReaperWorkerThread.java:78)

17:53:40,457 WARN [com.arjuna.ats.arjuna](Transaction Reaper)ARJUNA012117:TransactionReaper :: check timeout对于TX 0:ffff7f000001:62455507:550071b3:3b状态SCHEDULE_CANCEL
17:53:40,947 WARN [com.arjuna.ats.arjuna](交易收割者)ARJUNA012117:Transactio nReaper ::检查超时TX 0:ffff7f000001:62455507:550071b3:35状态CANCEL_INTERRUPTED
17:53:40,948 WARN [com.arjuna.ats.arjuna](交易收割者)ARJUNA012120:TransactionReaper :: check worker线程[交易收割工人0,5,主]取消发送时不响应中断0:ffff7f000001:62455507:550071b3:35 - 标记为僵尸和TX的工作人员计划进行标记回滚
17:53:40,949 WARN [com.arjuna.ats.arjuna](交易收割者)ARJUNA012110:TransactionReaper ::检查成功标记为TX 0:ffff7f000001:62455507:550071b3:35仅作为回滚
17:53:40,948 WARN [com.arjuna。 ats.arjuna](交易收割者1)ARJUNA012095:中止动作id 0:ffff7f000001:62455507:550071b3:3b在多个线程活动期间被调用。
17:53:40,949 WARN [com.arjuna.ats.arjuna](交易收割员1)ARJUNA012108:CheckedAction :: check - 原子行为0:ffff7f000001:62455507:550071b3:3b中止1个线程活动!
17:53:40,949 WARN [com.arjuna.ats.arjuna](交易收割员1)ARJUNA012121:TransactionReaper :: doCancellations工作线程[Transaction Reaper Worker 1,5,main]成功取消TX 0:ffff7f000001: 62455507:550071b3:3b

我也看到我的转录在postgressql中处于空闲状态:


 在事务中空闲;select nextval('hibernate_sequence')
在事务中空闲;select nextval 'hibernate_sequence')

每个建议对我都是非常有帮助的:)

解决方案

  org.apache.log4j.JBossAppenderHandler.doPublish(JBossAppenderHandler.java:42)

这行对我来说有点无意义,但最近我发现了意义...我有一个我的项目的结构使用log4j.xml在 WebContent / META-INF 文件夹中,我使用的是 org.jboss.logging.Logger 即可。不幸的是,我没有得到任何错误,但这个文件的位置是错误的。文件说:
https://docs.jboss。 org / process-guide / en / html / logging.html


log4j配置从jboss服务器加载 conf / log4j.xml
文件


我认识到这个问题与 org.apache.log4j.ConsoleAppender 即可。删除它后,我现在没有任何多线程问题,我不需要任何注释,因为@TransactionalAttribute()是默认设置为必需的。即使EntityManager不是线程安全的,也不需要使用EntityManagerFactory。
这是我一生中最奇怪的错误。



看看:
Log4j挂起我的应用程序我做错了什么?


I've got a bean definition with an entityManager like this:

@Stateless
public class JPABean<T> {

    private static final Logger LOG = Logger.getLogger(JPABean.class);

    @PersistenceContext(unitName = "myPersistanceSettings")
    private EntityManager em;

    public void write(T o) {
        LOG.info("PERSISTING");
        em.persist(o);
        LOG.info("FLASHING");
        em.flush();
        LOG.info("SUCCESS");
    }

My persistance.xml

<persistence-unit name="eSystemJPA" transaction-type="JTA" >
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <jta-data-source>java:jboss/datasources/myDS</jta-data-source>
    <properties>
        <property name="hibernate.show_sql" value="true" />
        <property name="hibernate.hbm2ddl.auto" value="validate" />
        <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
        <property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.JBossAppServerJtaPlatform" />
    </properties>
</persistence-unit>

My api:

@Path("activityAPI")
public class ActivityAPI {

    private static final Logger log = Logger.getLogger(ActivityAPI.class);

    @EJB
    private JPABean<ActivityLogEntry> activityJpa;

    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public Response reportActivity(@Context HttpServletRequest hsr, final ActivityAPIRequest body) { ...

My standalone.xml with datasource:

    <datasource jta="true" jndi-name="java:jboss/datasources/myDS" pool-name="PostgrePool" enabled="true" spy="true" use-ccm="false">
            <connection-url>jdbc:postgresql://localhost/postgres</connection-url>
            <driver>postgres</driver>
            <pool>
                <min-pool-size>10</min-pool-size>
                <max-pool-size>100</max-pool-size>
                <prefill>true</prefill>
            </pool>
            <security>
                <user-name>postgres</user-name>
                <password>postgres</password>
            </security>
            <validation>
                <validate-on-match>false</validate-on-match>
                <background-validation>false</background-validation>
            </validation>
            <statement>
                <share-prepared-statements>false</share-prepared-statements>
            </statement>
        </datasource>

And i'm receiving:

2015-03-11 17:48:39,945 INFO    [JPABean.write]: PERSISTING
2015-03-11 17:48:39,946 INFO    [AbstractLoggingWriter.write]: INFO   [JPABean.write]: PERSISTING
2015-03-11 17:48:39,946 DEBUG   [TransactionCoordinatorImpl.attemptToRegisterJtaSync]: Skipping JTA sync registration due to auto join checking
2015-03-11 17:48:39,946 INFO    [AbstractLoggingWriter.write]: DEBUG  [TransactionCoordinatorImpl.attemptToRegisterJtaSync]: Skipping JTA sync registration due to auto join checking
2015-03-11 17:48:39,947 DEBUG   [TransactionCoordinatorImpl.attemptToRegisterJtaSync]: successfully registered Synchronization
2015-03-11 17:48:39,947 INFO    [AbstractLoggingWriter.write]: DEBUG  [TransactionCoordinatorImpl.attemptToRegisterJtaSync]: successfully registered Synchronization
2015-03-11 17:48:39,947 DEBUG   [AbstractEntityManagerImpl.joinTransaction]: Looking for a JTA transaction to join
2015-03-11 17:48:39,947 INFO    [AbstractLoggingWriter.write]: DEBUG  [AbstractEntityManagerImpl.joinTransaction]: Looking for a JTA transaction to join
2015-03-11 17:48:39,948 INFO    [AbstractLoggingWriter.write]: Hibernate: select nextval ('hibernate_sequence')
2015-03-11 17:48:39,949 DEBUG   [LogicalConnectionImpl.obtainConnection]: Obtaining JDBC connection
2015-03-11 17:48:39,949 INFO    [AbstractLoggingWriter.write]: DEBUG  [LogicalConnectionImpl.obtainConnection]: Obtaining JDBC connection
2015-03-11 17:48:39,950 DEBUG   [LogicalConnectionImpl.obtainConnection]: Obtained JDBC connection
2015-03-11 17:48:39,950 INFO    [AbstractLoggingWriter.write]: DEBUG  [LogicalConnectionImpl.obtainConnection]: Obtained JDBC connection
2015-03-11 17:48:39,952 DEBUG   [LogicalConnectionImpl.releaseConnection]: Releasing JDBC connection
2015-03-11 17:48:39,952 INFO    [AbstractLoggingWriter.write]: DEBUG  [LogicalConnectionImpl.releaseConnection]: Releasing JDBC connection
2015-03-11 17:48:39,953 DEBUG   [LogicalConnectionImpl.releaseConnection]: Released JDBC connection
2015-03-11 17:48:39,953 INFO    [AbstractLoggingWriter.write]: DEBUG  [LogicalConnectionImpl.releaseConnection]: Released JDBC connection
2015-03-11 17:48:39,954 INFO    [JPABean.write]: FLASHING
2015-03-11 17:48:39,955 INFO    [AbstractLoggingWriter.write]: INFO   [JPABean.write]: FLASHING
2015-03-11 17:48:39,957 INFO    [AbstractLoggingWriter.write]: DEBUG  [ActivityAPI.reportActivity]: POST Received PUT reportActivity
2015-03-11 17:48:39,957 DEBUG   [EntityPrinter.toString]: Listing entities:
2015-03-11 17:48:39,957 INFO    [AbstractLoggingWriter.write]: DEBUG  [EntityPrinter.toString]: Listing entities:
2015-03-11 17:48:39,958 DEBUG   [EntityPrinter.toString]: ActivityLogEntry{... body ...}
2015-03-11 17:48:39,958 INFO    [AbstractLoggingWriter.write]: DEBUG  [EntityPrinter.toString]: ActivityLogEntry{... body ...}
2015-03-11 17:48:39,959 INFO    [JPABean.write]: PERSISTING
2015-03-11 17:48:39,959 INFO    [AbstractLoggingWriter.write]: INFO   [JPABean.write]: PERSISTING
2015-03-11 17:48:39,962 INFO    [AbstractLoggingWriter.write]: Hibernate: insert into activity_log_entry (all columns) values (?, ?, ?, ?, ?, ?, ?, ?, ?)

So in fact there is a problem with persisting (inserting) 2 entities into a table. I was trying to add @Transactional annotation on my public writing method and on my api, but it doesn't work. I was trying also with @TransactionAttribute(TransactionAttributeType.REQUIRED), but it's still the same. Also using EntityManagerFactory to create entityManager doesn't work (documentation says that entityManager is not thread-safe, but EntityManagerFactory is thread-safe). I'm using:

postgressql - 9.3 jboss-ejb-api_3.2_spec jboss-servlet-api_3.1_spec resteasy-jaxrs hibernate-entitymanager hibernate-validator driver postresql>9.3-1102-jdbc41 wildfly 8.2 or wildfly 8.0

logs from hibernate:

2015-03-11 17:53:39,947 WARN    [SynchronizationCallbackCoordinatorTrackingImpl.afterCompletion]: HHH000451: Transaction afterCompletion called by a background thread; delaying afterCompletion processing until the original thread can handle it. [status=4]

Trace from wildfly

17:53:39,944 WARN  [com.arjuna.ats.arjuna] (Transaction Reaper) ARJUNA012117: TransactionReaper::check timeout for TX 0:ffff7f000001:62455507:550071b3:35 in state  RUN
    17:53:39,945 WARN  [com.arjuna.ats.arjuna] (Transaction Reaper Worker 0) ARJUNA012095: Abort of action id 0:ffff7f000001:62455507:550071b3:35 invoked while multiple threads active within it.
    17:53:39,946 WARN  [com.arjuna.ats.arjuna] (Transaction Reaper Worker 0) ARJUNA012108: CheckedAction::check - atomic action 0:ffff7f000001:62455507:550071b3:35 aborting with 1 threads active!
    17:53:39,957 WARN  [com.arjuna.ats.arjuna] (Transaction Reaper) ARJUNA012117: TransactionReaper::check timeout for TX 0:ffff7f000001:62455507:550071b3:3b in state  RUN
    17:53:40,445 WARN  [com.arjuna.ats.arjuna] (Transaction Reaper) ARJUNA012117: TransactionReaper::check timeout for TX 0:ffff7f000001:62455507:550071b3:35 in state  CANCEL
    17:53:40,446 WARN  [com.arjuna.ats.arjuna] (Transaction Reaper) ARJUNA012378: ReaperElement appears to be wedged: org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:231)
    org.apache.log4j.JBossAppenderHandler.doPublish(JBossAppenderHandler.java:42)
    org.jboss.logmanager.ExtHandler.publish(ExtHandler.java:79)
    org.jboss.logmanager.LoggerNode.publish(LoggerNode.java:296)
    org.jboss.logmanager.LoggerNode.publish(LoggerNode.java:304)
    org.jboss.logmanager.LoggerNode.publish(LoggerNode.java:304)
    org.jboss.logmanager.LoggerNode.publish(LoggerNode.java:304)
    org.jboss.logmanager.LoggerNode.publish(LoggerNode.java:304)
    org.jboss.logmanager.LoggerNode.publish(LoggerNode.java:304)
    org.jboss.logmanager.LoggerNode.publish(LoggerNode.java:304)
    org.jboss.logmanager.LoggerNode.publish(LoggerNode.java:304)
    org.jboss.logmanager.Logger.logRaw(Logger.java:721)
    org.jboss.logmanager.Logger.log(Logger.java:672)
    org.jboss.logging.JBossLogManagerLogger.doLogf(JBossLogManagerLogger.java:50)
    org.jboss.logging.Logger.logf(Logger.java:2096)
    org.hibernate.internal.CoreMessageLogger_$logger.rollbackFromBackgroundThread(CoreMessageLogger_$logger.java:1032)
    org.hibernate.engine.transaction.synchronization.internal.SynchronizationCallbackCoordinatorTrackingImpl.afterCompletion(SynchronizationCallbackCoordinatorTrackingImpl.java:85)
    org.hibernate.engine.transaction.synchronization.internal.RegisteredSynchronization.afterCompletion(RegisteredSynchronization.java:56)
    com.arjuna.ats.internal.jta.resources.arjunacore.SynchronizationImple.afterCompletion(SynchronizationImple.java:96)
    com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.afterCompletion(TwoPhaseCoordinator.java:532)
    com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.afterCompletion(TwoPhaseCoordinator.java:463)
    com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.cancel(TwoPhaseCoordinator.java:118)
    com.arjuna.ats.arjuna.AtomicAction.cancel(AtomicAction.java:215)
    com.arjuna.ats.arjuna.coordinator.TransactionReaper.doCancellations(TransactionReaper.java:377)
    com.arjuna.ats.internal.arjuna.coordinator.ReaperWorkerThread.run(ReaperWorkerThread.java:78)

    17:53:40,457 WARN  [com.arjuna.ats.arjuna] (Transaction Reaper) ARJUNA012117: TransactionReaper::check timeout for TX 0:ffff7f000001:62455507:550071b3:3b in state  SCHEDULE_CANCEL
    17:53:40,947 WARN  [com.arjuna.ats.arjuna] (Transaction Reaper) ARJUNA012117: TransactionReaper::check timeout for TX 0:ffff7f000001:62455507:550071b3:35 in state  CANCEL_INTERRUPTED
    17:53:40,948 WARN  [com.arjuna.ats.arjuna] (Transaction Reaper) ARJUNA012120: TransactionReaper::check worker Thread[Transaction Reaper Worker 0,5,main] not responding to interrupt when cancelling TX 0:ffff7f000001:62455507:550071b3:35 -- worker marked as zombie and TX scheduled for mark-as-rollback
    17:53:40,949 WARN  [com.arjuna.ats.arjuna] (Transaction Reaper) ARJUNA012110: TransactionReaper::check successfuly marked TX 0:ffff7f000001:62455507:550071b3:35 as rollback only
    17:53:40,948 WARN  [com.arjuna.ats.arjuna] (Transaction Reaper Worker 1) ARJUNA012095: Abort of action id 0:ffff7f000001:62455507:550071b3:3b invoked while multiple threads active within it.
    17:53:40,949 WARN  [com.arjuna.ats.arjuna] (Transaction Reaper Worker 1) ARJUNA012108: CheckedAction::check - atomic action 0:ffff7f000001:62455507:550071b3:3b aborting with 1 threads active!
    17:53:40,949 WARN  [com.arjuna.ats.arjuna] (Transaction Reaper Worker 1) ARJUNA012121: TransactionReaper::doCancellations worker Thread[Transaction Reaper Worker 1,5,main] successfully canceled TX 0:ffff7f000001:62455507:550071b3:3b

I also saw that my transcations are in idle state in postgressql:

"idle in transaction";"select nextval ('hibernate_sequence')"
"idle in transaction";"select nextval ('hibernate_sequence')"

Every suggestion will be extremely helpful for me :)

解决方案

org.apache.log4j.JBossAppenderHandler.doPublish(JBossAppenderHandler.java:42)

This line was a little bit meaningless for me, but recently i find out the meaning... I had a structure of my project with log4j.xml inside WebContent/META-INF folder and i was using org.jboss.logging.Logger. Unfortunately i didn't get any error but the location of this file was wrong. As documentation says: https://docs.jboss.org/process-guide/en/html/logging.html

The log4j configuration is loaded from the jboss server conf/log4j.xml file.

I recognize that problem is connected exactly with org.apache.log4j.ConsoleAppender. After removed it I don't have any problem with multithreading now and I don't need any annotation cause @TransactionalAttribute() is on default set on required. Also there is no need to use EntityManagerFactory even if EntityManager is not thread-safe. That was the strangest bug which i had in my life.

Look on that: Log4j is hanging my application what am I doing wrong?

这篇关于在持久化实体期间挂起的多线程事务通过wildfly进行postgresql的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆