我有一个像EntityManager这样的bean定义:
@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="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>
我的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) { ...
我的standalone.xml与数据源:
<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>
我正在收到:
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 (?, ?, ?, ?, ?, ?, ?, ?, ?)
因此,实际上存在将2个实体持久(插入)到表中的问题。我试图在我的公共写作方法和我的api上添加@Transactional批注,但是它不起作用。我也在尝试使用@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驱动程序postresql>
9.3-1102-jdbc41 wildfly 8.2或wildfly 8.0
来自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]
从野蝇追踪
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
我还看到在postgressql中我的事务处于空闲状态:
"idle in transaction";"select nextval ('hibernate_sequence')"
"idle in transaction";"select nextval ('hibernate_sequence')"
每个建议对我都会非常有帮助:)
org.apache.log4j.JBossAppenderHandler.doPublish(JBossAppenderHandler.java:42)
这行对我来说毫无意义,但是最近我发现了含义……我的项目结构为 WebContent / META-INF
文件夹中的log4j.xml,并且我使用的是 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。
问题内容: 我有一个托管bean,其中包含当前页面的实体对象列表。在我创建一个新对象并在事务中使用persist()将其持久保存到数据库之后;在另一个事务中,当我调用merge时(由于该实体由于先前的事务提交而处于分离状态);实体管理器无法在持久性上下文中找到对象,并向数据库抛出选择查询。我是否缺少某些东西,或者是正常行为? 更新:当我使用mysql数据库和自动生成的ID列时,存在上述问题。当我在
我有一个实体,它已经持久化,并希望将其添加到新生成的父实体(尚未持久化)。如果我尝试持久化父级,我会得到错误“分离的实体传递到持久化:model.child”。我想我必须以某种方式为孩子调用“EntityManager.merge()”,而不是“EntityManager.persisted()”。但是我没有显式调用persisted。这由“cascade=cascadetype.all”注释处理
我正试图实现与hibernate的许多单向关系。问题是,当我试图向数据库中添加一些值时,我遇到了以下错误: 运行时发生异常。null:InvocationTargetException:未能执行ApplicationRunner:传递给persist:dnd35cg的分离实体。模型DND类;嵌套的异常是org。冬眠PersistentObjectException:传递给persist:dnd35
我正在使用MySQL Workbench设计一个数据库。我定义了一堆表并通过外键建立关系。我正准备将此模型转发到数据库模式。我从那里去哪里? 我想做的是使用新的数据库并创建Java实体,这些实体将对应于上述表以在SpringBoot应用程序中使用。我看到了一些帖子,其中谈到了不同的方法,包括生成这些人工制品的基于Eclipse的解决方案,但其中许多是较旧的解决方案,我不确定当前的“热门”工具是什么
我有一个物品清单。它们是JPA“位置”实体。 我有一个无状态EJB,它在列表中循环并持久化每一个。 代码运行良好。我没有任何问题。然而,问题是:我希望这是一个全有或全无的交易。当前,每次通过for循环,persist()方法都会在数据库中插入一个新行。假设我有100个location对象,而第54个对象有问题,并且抛出了一个异常。将有53条记录插入数据库。我想要的是:在任何一个成功之前,他们必须全
为了理解为什么要持久化子实体,下面是映射。 我有作者(id,姓名,书籍)和书籍(id,标题,作者)实体。他们的关系是很多的,因为任何作者可能有多个书,任何书可能有多个作者。此外,我有BookClient(id,名称,rentDate,books) - 与Book实体的关系是OneToMany,因为任何客户都可以向许多书籍租用零。 Author.java Book.java BookClient.j