【问题标题】:Cache Isolation Level Warning on Parent Entity父实体上的缓存隔离级别警告
【发布时间】:2012-05-30 21:26:19
【问题描述】:

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

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 类的隔离级别为“受保护”。该文档没有说明可能导致它被自动分配到该级别的原因——请参阅user guide

对单个用户进行的小规模测试表明,该应用程序似乎可以按预期工作,但这条警告消息让我觉得将其推广给大众并不方便。

谁能解释一下这条信息?我的担忧有效吗?

【问题讨论】:

    标签: caching jpa-2.0 eclipselink glassfish-3 isolation-level


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

      • 这很奇怪......我没有在我的任何实体上指定缓存隔离级别,默认情况下它们都被缓存。一时兴起,我什至尝试将“@Cache(isolation=CacheIsolationType.SHARED)”注释放在 BaseEntity 类上,但仍然收到此“受保护”警告。我的问题的根源是我试图弄清楚为什么 eclipselink 会自动降低其隔离级别。在我对原始问题中提到的更改进行更改之前,这些日志语句不会发生。想法?
      【解决方案3】:

      经过一番研究,我发现这个警告与使用 XADataSource 无关。我之前开始对 EclipseLink 的 Multitenancy 进行了一些探索,结果发现这是罪魁祸首。

      参考http://wiki.eclipse.org/EclipseLink/Examples/JPA/Multitenant#Persistence_Usage_for_Multiple_Tenants

      使用此架构时,有一个可用于常规实体类型的共享缓存,但多租户类型必须在缓存中受到保护,因此 MULTITENANT_SHARED_EMF 属性必须设置为 true。

      仅供参考——在查看代码时,ClassDescriptor.initializeCaching() 中还有 3 种情况,其中缓存隔离被降级为 PROTECTED:

      1. 如果实体有 DatabaseMapping 将其标记为不可缓存。
      2. 如果实体具有不具有共享隔离级别的 ForeignReferenceMapping。
      3. 如果实体具有不具有共享隔离级别的 AggregateObjectMapping。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-02
        • 2015-08-02
        • 2011-04-15
        • 2011-03-23
        • 2012-08-01
        • 2013-01-25
        相关资源
        最近更新 更多