【问题标题】:Globally disable EntityManager cache in jboss在 jboss 中全局禁用 EntityManager 缓存
【发布时间】:2012-11-11 22:18:24
【问题描述】:

是否可以在某些 jboss 配置中使用 EntityManager 禁用缓存?

我会解释的。我有一些我们产品的最终“耳朵”,它通过休眠使用 EntityManager(类似这样,我是新手),我需要测试一些行为。对我来说,最简单的方法是直接在数据库中更改(删除、创建)实体的状态。但是在我这样做之后,应用程序仍然需要一段时间才能找到旧值。我读过一些用于实体管理器的 jboss 缓存。

所以,为了测试,我想禁用 EntityManager 缓存,但它不能在应用程序级别禁用,只能在 jboss 级别禁用。

简而言之:我需要应用程序总是重新加载实际的实体状态,因为它可以在数据库中与其他应用程序一起编辑。并且不可能在应用程序级别(hibernate.xml 和其他)禁用缓存

PS:jboss 4.2.3、ejb3、hibernate3

【问题讨论】:

    标签: caching jboss entitymanager


    【解决方案1】:

    您所指的缓存可能是PersistenceContext。它不能被禁用。你只能调整它的范围。在 Java EE 环境中,持久化上下文的范围是默认的事务。因此,如果您需要一些更改立即生效,您可以将这些更改(包括获取相关实体)提取到单独的方法中,并对其进行注释以要求新的事务:

    @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
    

    一旦方法返回,所有更改都会提交。

    您也可以使用 bean 管理的事务,这样您就可以自己控制提交。为此,请使用 @TransactionManagement( TransactionManagementType.BEAN ) 注释您的 bean 并使用 UserTransaction

    @Resource
    private UserTransaction tx;
    ...
    tx.begin();
    //do stuff
    tx.commit();
    

    【讨论】:

    • 为了测试问题编辑生产代码不好,所以我想配置测试准备环境。在我将 smth 提交到数据库后,我需要更改才能立即生效。也许不允许禁用缓存,但应该有一些属性来调整刷新时间或类似这样。
    猜你喜欢
    • 1970-01-01
    • 2014-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-11
    • 2011-02-09
    • 2014-06-24
    • 1970-01-01
    相关资源
    最近更新 更多