首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >父实体上的缓存隔离级别警告

问父实体上的缓存隔离级别警告
EN

Stack Overflow用户
提问于 2012-05-31 05:26:19
回答 3查看 915关注 0票数 1

在添加第二个持久化单元并将应用程序的数据源更改为XADataSource (MySQL)后,我现在在glassfish日志中收到一条关于父实体上的隔离级别的令人困惑的警告:

代码语言:javascript
复制
WARN  o.e.p.s.f.j.ejb_or_metadata : Parent Entity BaseEntity has an isolation
level of: PROTECTED which is more protective then the subclass Contact with
isolation: null so the subclass has been set to the isolation level PROTECTED.

经过一些研究,我认为这个隔离级别的警告消息来自EclipseLink的缓存机制。但我没有在我的应用程序中指定任何隔离级别,所以似乎我的配置中的某些东西触发了BaseEntity类,使其具有'PROTECTED‘的隔离级别。文档中没有说明是什么原因可能导致它被自动分配到该级别--请参阅user guide。

对单个用户进行的小测试表明,该应用程序似乎可以按预期工作,但这条警告消息并不能让我放心地将其推广到大众。

有没有人能解释一下这条信息?我的担忧是正确的吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-27 09:34:30

经过一些研究,我发现这个警告与使用XADataSource没有任何关系。我早些时候开始对EclipseLink的多租户进行了一些探索,结果发现这是罪魁祸首。

谈到http://wiki.eclipse.org/EclipseLink/Examples/JPA/Multitenant#Persistence_Usage_for_Multiple_Tenants

使用此体系结构时,常规实体类型可以使用共享缓存,但多租户类型必须在缓存中受到保护,因此必须将MULTITENANT_SHARED_EMF属性设置为true。

仅供参考--在审查代码时,ClassDescriptor.initializeCaching()中还有另外3种缓存隔离降级为PROTECTED的情况:

  1. 如果实体具有将其标记为non-cacheable.
  2. If的DatabaseMapping,则该实体具有不具有shared隔离级别的ForeignReferenceMapping。如果该实体具有没有shared隔离级别的ForeignReferenceMapping,则为
  3. 。
票数 0
EN

Stack Overflow用户

发布于 2012-05-31 20:47:43

这里的缓存实现只是尝试同步parnet和子实体的隔离级别。但我认为您应该覆盖默认的保护性隔离级别。因为"Serializeable“隔离级别是最具保护性且性能较差的级别。根据您的需求,您可以使用已提交读取或可重复读取级别。

票数 0
EN

Stack Overflow用户

发布于 2012-05-31 21:45:32

这只是一个关于缓存隔离的警告,它与数据库隔离无关,因此您可以忽略它。

有关缓存隔离的更多信息,请参见

http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Caching/Shared_and_Isolated

不过,如果您没有进行任何缓存配置,那就很奇怪了。默认情况下,所有内容都应该是共享的,要获得受保护的内容,您必须禁用相关实体的缓存,例如使用@Cacheable(false)?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10824508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档