gpt4 book ai didi

java - 可以缓存对 javax.persistence.EntityManager 的引用吗?

转载 作者:行者123 更新时间:2023-11-30 05:10:20 25 4
gpt4 key购买 nike

我们可以缓存对 EntityManager 的引用吗?

对于我们的要求,我们没有将 EntityManger 注入(inject)到其他 EJB 中,而是使用实用程序类来返回对实体管理器的引用。问题是每次我们需要获取引用时,我们都会进行 JNDI 查找。

为了避免 JNDI 查找,我们希望在 hashmap 等中缓存对实体管理器的引用。

它似乎有效,但我有几个疑问:1. 如果我们缓存entityManager,那么只要引用处于 Activity 状态,它就会保持连接吗?2、交易管理会有什么变化吗?

提前谢谢您。

最佳答案

EntityManager 不是线程安全的,因此至少您需要将它们缓存在本地线程或通过线程标识符或其他内容缓存在映射中。

问题 1)这是特定于您的底层提供商的,但在大多数情况下,是的,打开 EntityManager 意味着您正在持有数据库连接。

问题 2)有可能,但您没有说明当前使用什么策略进行事务管理。

另一个大问题是,如果您按照规范正确使用 EM,那么每当出现异常时,您就需要将其丢弃并获取新的。这意味着您需要正确管理该缓存,无论何时可能出现异常。

听起来您可能正在尝试将 JPA 用作 JDBC 包装器。为每个单独的 SQL 语句获取一个新的 EM,然后将其处理掉。您没有提供有关系统架构的任何信息,也许像 View 模式中的 Open EntityManager 这样的中间立场可以缓解您的问题,而无需尝试发明新轮子?

关于java - 可以缓存对 javax.persistence.EntityManager 的引用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3636745/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com