全局禁用jboss中的EntityManager缓存

时间:2012-11-23 14:21:42

标签: caching jboss entitymanager

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

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

因此,对于测试,我想禁用EntityManager缓存,但不能在应用程序级别禁用它,只能在jboss级别禁用。

简而言之:我需要应用程序始终来重新加载实际的实体状态,因为它可以在其他应用程序中在数据库中进行编辑。并且无法在应用程序级别禁用缓存(hibernate.xml和其他)

PS:jboss 4.2.3,ejb3,hibernate3

1 个答案:

答案 0 :(得分:1)

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

@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)

方法返回后,将提交所有更改。

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

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