- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正致力于将一个项目从 BC4J 迁移到 JPA + Hibernate。刚开始时,我们迁移了一个范围有限的实体,并且发生了意外行为。
作为使用 native 查询查询实体,hibernate 首先检查 ehcache 以查看查询是否存在,如果不存在,则执行查询。
DEBUG 2015-01-28 13:23:19,465 AbstractEntityManagerImpl: Looking for a JTA transaction to join
DEBUG 2015-01-28 13:23:19,465 AbstractEntityManagerImpl: No JTA transaction found
DEBUG 2015-01-28 13:23:19,466 StandardQueryCache: checking cached query results in region: org.hibernate.cache.StandardQueryCache
DEBUG 2015-01-28 13:23:19,466 EhcacheGeneralDataRegion: key: sql: select linearepro0_.C_ID as C1_215_, linearepro0_.C_ID_ACCION as C2_215_, linearepro0_.C_LINEA_OBS as C3_215_, linearepro0_.C_LINEA_REPROCESO as C4_215_ from PISOPLTA.LNA_LINEA_REPROCESO linearepro0_ where (linearepro0_.C_LINEA_OBS=? ); parameters: DEC3_CHU, ; named parameters: {}
DEBUG 2015-01-28 13:23:19,466 Cache: Cache: org.hibernate.cache.StandardQueryCache store hit for sql: select linearepro0_.C_ID as C1_215_, linearepro0_.C_ID_ACCION as C2_215_, linearepro0_.C_LINEA_OBS as C3_215_, linearepro0_.C_LINEA_REPROCESO as C4_215_ from PISOPLTA.LNA_LINEA_REPROCESO linearepro0_ where (linearepro0_.C_LINEA_OBS=? ); parameters: DEC3_CHU, ; named parameters: {}
DEBUG 2015-01-28 13:23:19,466 StandardQueryCache: Checking query spaces for up-to-dateness: [PISOPLTA.LNA_LINEA_REPROCESO]
DEBUG 2015-01-28 13:23:19,467 EhcacheGeneralDataRegion: key: PISOPLTA.LNA_LINEA_REPROCESO
DEBUG 2015-01-28 13:23:19,467 Cache: org.hibernate.cache.UpdateTimestampsCache cache - Miss
DEBUG 2015-01-28 13:23:19,467 EhcacheGeneralDataRegion: Element for key PISOPLTA.LNA_LINEA_REPROCESO is null
DEBUG 2015-01-28 13:23:19,467 StandardQueryCache: returning cached query results
DEBUG 2015-01-28 13:23:19,467 Loader: loading entity: [com.business.entity.jpa.LineaReproceso#1906]
在那之后,似乎 hiberate 正在为查询返回的每个实体进入数据库以填充它。
DEBUG 2015-01-28 13:23:19,467 Loader: loading entity: [com.business.entity.jpa.LineaReproceso#1906]
DEBUG 2015-01-28 13:23:19,468 AbstractBatcher: about to open PreparedStatement (open PreparedStatements: 0, globally: 0)
DEBUG 2015-01-28 13:23:19,468 ConnectionManager: opening JDBC connection
DEBUG 2015-01-28 13:23:19,468 SQL: select linearepro0_.C_ID as C1_215_0_, linearepro0_.C_ID_ACCION as C2_215_0_, linearepro0_.C_LINEA_OBS as C3_215_0_, linearepro0_.C_LINEA_REPROCESO as C4_215_0_ from PISOPLTA.LNA_LINEA_REPROCESO linearepro0_ where linearepro0_.C_ID=?
DEBUG 2015-01-28 13:23:19,471 AbstractBatcher: about to open ResultSet (open ResultSets: 0, globally: 0)
DEBUG 2015-01-28 13:23:19,471 Loader: result row: EntityKey[com.business.entity.jpa.LineaReproceso#1906]
DEBUG 2015-01-28 13:23:19,471 AbstractBatcher: about to close ResultSet (open ResultSets: 1, globally: 1)
DEBUG 2015-01-28 13:23:19,471 AbstractBatcher: about to close PreparedStatement (open PreparedStatements: 1, globally: 1)
DEBUG 2015-01-28 13:23:19,471 ConnectionManager: aggressively releasing JDBC connection
DEBUG 2015-01-28 13:23:19,472 ConnectionManager: releasing JDBC connection [ (open PreparedStatements: 0, globally: 0) (open ResultSets: 0, globally: 0)]
DEBUG 2015-01-28 13:23:19,472 TwoPhaseLoad: resolving associations for [com.business.entity.jpa.LineaReproceso#1906]
DEBUG 2015-01-28 13:23:19,472 TwoPhaseLoad: adding entity to second-level cache: [com.business.entity.jpa.LineaReproceso#1906]
DEBUG 2015-01-28 13:23:19,473 TwoPhaseLoad: done materializing entity [com.business.entity.jpa.LineaReproceso#1906]
DEBUG 2015-01-28 13:23:19,473 StatefulPersistenceContext: initializing non-lazy collections
DEBUG 2015-01-28 13:23:19,473 Loader: done entity load
DEBUG 2015-01-28 13:23:19,474 Loader: loading entity: [com.business.entity.jpa.LineaReproceso#2659]
DEBUG 2015-01-28 13:23:19,474 AbstractBatcher: about to open PreparedStatement (open PreparedStatements: 0, globally: 0)
DEBUG 2015-01-28 13:23:19,474 ConnectionManager: opening JDBC connection
DEBUG 2015-01-28 13:23:19,474 SQL: select linearepro0_.C_ID as C1_215_0_, linearepro0_.C_ID_ACCION as C2_215_0_, linearepro0_.C_LINEA_OBS as C3_215_0_, linearepro0_.C_LINEA_REPROCESO as C4_215_0_ from PISOPLTA.LNA_LINEA_REPROCESO linearepro0_ where linearepro0_.C_ID=?
DEBUG 2015-01-28 13:23:19,477 AbstractBatcher: about to open ResultSet (open ResultSets: 0, globally: 0)
DEBUG 2015-01-28 13:23:19,477 Loader: result row: EntityKey[com.business.entity.jpa.LineaReproceso#2659]
DEBUG 2015-01-28 13:23:19,477 AbstractBatcher: about to close ResultSet (open ResultSets: 1, globally: 1)
DEBUG 2015-01-28 13:23:19,477 AbstractBatcher: about to close PreparedStatement (open PreparedStatements: 1, globally: 1)
DEBUG 2015-01-28 13:23:19,477 ConnectionManager: aggressively releasing JDBC connection
DEBUG 2015-01-28 13:23:19,477 ConnectionManager: releasing JDBC connection [ (open PreparedStatements: 0, globally: 0) (open ResultSets: 0, globally: 0)]
DEBUG 2015-01-28 13:23:19,478 TwoPhaseLoad: resolving associations for [com.business.entity.jpa.LineaReproceso#2659]
DEBUG 2015-01-28 13:23:19,478 TwoPhaseLoad: adding entity to second-level cache: [com.business.entity.jpa.LineaReproceso#2659]
DEBUG 2015-01-28 13:23:19,479 TwoPhaseLoad: done materializing entity [com.business.entity.jpa.LineaReproceso#2659]
DEBUG 2015-01-28 13:23:19,479 StatefulPersistenceContext: initializing non-lazy collections
DEBUG 2015-01-28 13:23:19,479 Loader: done entity load
最糟糕的是,似乎每次打开和释放 JDBC 连接。以下日志正在重复多次。
DEBUG 2015-01-28 13:23:19,474 ConnectionManager: opening JDBC connection
DEBUG 2015-01-28 13:23:19,474 SQL: select linearepro0_.C_ID as C1_215_0_, linearepro0_.C_ID_ACCION as C2_215_0_, linearepro0_.C_LINEA_OBS as C3_215_0_, linearepro0_.C_LINEA_REPROCESO as C4_215_0_ from PISOPLTA.LNA_LINEA_REPROCESO linearepro0_ where linearepro0_.C_ID=?
DEBUG 2015-01-28 13:23:19,477 AbstractBatcher: about to open ResultSet (open ResultSets: 0, globally: 0)
DEBUG 2015-01-28 13:23:19,477 Loader: result row: EntityKey[com.business.entity.jpa.LineaReproceso#2659]
DEBUG 2015-01-28 13:23:19,477 AbstractBatcher: about to close ResultSet (open ResultSets: 1, globally: 1)
DEBUG 2015-01-28 13:23:19,477 AbstractBatcher: about to close PreparedStatement (open PreparedStatements: 1, globally: 1)
DEBUG 2015-01-28 13:23:19,477 ConnectionManager: aggressively releasing JDBC connection
DEBUG 2015-01-28 13:23:19,477 ConnectionManager: releasing JDBC connection [ (open PreparedStatements: 0, globally: 0) (open ResultSets: 0, globally: 0)]
知道是什么导致了这种行为吗?
提前致谢。
最佳答案
虽然 JTA 规范没有强制要求在每个语句之后释放连接,但 Hibernate 会这样做,因为 some strange behavior in old application servers这导致引入了AFTER_STATEMENT
connection release mode其行为如下:
The connection is released after each statement execution andreacquired prior to running the next statement. Although not requiredby either JDBC or JTA specifications, this strategy is meant toprevent application servers from mistakenly detecting a connectionleak between successive EJB (Enterprise Java Beans) calls
所以,这是因为您使用的是 JTA 环境,而不是 RESOURCE_LOCAL
环境。
您可以通过设置以下 Hibernate 属性来覆盖此行为:
hibernate.connection.release_mode=after_transaction
您应该知道,在每个语句之后释放连接会导致性能下降,因为这是在 after_statement
之后。连接 Release模式。
关于java - Hibernate 在 JTA 事务期间从池中获取多个 JDBC 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28223394/
JTA 和本地事务有什么区别? 如果有一个示例可以展示何时使用 JTA 以及何时使用本地事务,那就太好了。 最佳答案 JTA 是用于管理 Java 事务的通用 API。它允许您以资源中立的方式启动、提
我正在使用 Atomikos 进行 JTA 事务。 我对 JTA 有以下设置: UserTransactionImp userTransactionImp = new UserTransactionI
已结束。此问题不符合 Stack Overflow guidelines .它目前不接受答案。 我们不允许提出有关书籍、工具、软件库等方面的建议的问题。您可以编辑问题,以便用事实和引用来回答它。 关闭
我想找到一种方法来应用带有 JTA @Transactional 注释的自定义拦截器。 我有一个带有 @Transactional 的方法,它是业务事务之一。在该方法中我想: 进行一些数据库操作 使用
我正在更新旧的应用程序,并尽可能少地重新编程。我创建了一个与旧页面类似的页面,其中仅包含一些测试数据,以确保我可以创建与 ejb/jpa 的链接,但我遇到了问题。我将发布 jsp、persistenc
本文整理了Java中com.arjuna.ats.internal.jta.tools.osb.mbean.jta.XAResourceRecordBean类的一些代码示例,展示了XAResource
我们将 JPA 1.0 用于基于 ORM 的操作,并且我们希望我们的应用程序拥有 JTA 数据源。我们只有 1 个数据库,我们的应用程序将连接到该数据库。 我们在 Controller 类中开始我们的
本文整理了Java中com.arjuna.ats.internal.jta.tools.osb.mbean.jta.XAResourceRecordBean.()方法的一些代码示例,展示了XAReso
本文整理了Java中com.arjuna.ats.internal.jta.tools.osb.mbean.jta.XAResourceRecordBean.getUid()方法的一些代码示例,展示了
我如何定义 在 persistence.xml 中? 我的项目在 Tomcat 6 和 Tomcat 7 中运行良好。 现在我正在使用 Struts 2 Spring 3.0.5 JPA 2 Jbos
我想为我正在处理的应用程序编写集成测试。它使用 JTA(多资源)并在应用程序服务器内运行。为这种情况编写自动化测试的最佳方法是什么?使用像 atomikos 这样的独立事务管理器,或者以某种方式利用应
我们正在使用 jboss 管理的 EntityMangerFactory 使用以下 spring bean 现在在我们的 spring bean 中,我们使用 @PersistenceContext
从 JTA 规范中,我了解到它仅用于调用线程的分布式事务(或支持)。这是否意味着事务不能跨越多个线程?还是取决于实现? 是否有任何 JTA 实现支持跨线程 XA? 谢谢! 最佳答案 您可以使用 Tra
本地交易和BMT相同吗? 我们需要 transactionManager 来进行本地事务吗? 我读到 transactionManager 对于本地事务将无效。这是正确的吗? JTA 是否为 CMT
我是 Spring 和 hibernate 新手,请帮忙, 我正在使用(Jboss 6.0 Final 作为服务器) org.springframework.transaction.jta.JtaTr
假设我有一个托管 bean 并且定义了一个 EntityManager。我想知道交易是如何运作的以及它们在各种不同情况下的表现如何。从文档中我了解到,flush()实际上用于覆盖提交上的延迟并立即执行
试图将我的头脑围绕在 JTA 上并任意选择 Bitronix 作为 impl,因为文档更容易获得(与 Atmikos 相反,Atmikos 让你注册并注册以获得 src/docs/jars/等等)。
我使用以下我在网上找到的代码 ( Here ) 作为 JTA 事务处理的示例: // Get a UserTransaction UserTransaction txn = new I
我有 2 个 MySQL 架构和各自的 MysqlXADataSource 配置如下 - @Bean(name = "sourceDataSource") @Primary public DataSo
我正在开发一个Web应用程序,我必须使用我从未使用过的JTA。我开始使用 EntityManager 但它似乎在这里不起作用。当我使用 EntityManager 时,我收到此消息: Only per
我是一名优秀的程序员,十分优秀!