Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Caching 父实体上的缓存隔离级别警告_Caching_Jpa 2.0_Eclipselink_Glassfish 3_Isolation Level - Fatal编程技术网

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

Caching 父实体上的缓存隔离级别警告,caching,jpa-2.0,eclipselink,glassfish-3,isolation-level,Caching,Jpa 2.0,Eclipselink,Glassfish 3,Isolation Level,在添加第二个持久化单元并将我的应用程序的数据源更改为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 isolatio

在添加第二个持久化单元并将我的应用程序的数据源更改为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类的隔离级别为“PROTECTED”。文档没有说明是什么原因导致它自动分配到该级别--请参阅

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


有人能解释一下这个消息吗?我的担心有效吗?

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

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

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


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

经过一些研究,我发现此警告与使用XADataSource无关。早些时候,我开始研究日食的多重性,结果证明这就是罪魁祸首

指:

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

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

  • 如果实体具有将其标记为不可缓存的数据库映射
  • 如果实体具有不具有共享隔离级别的ForeignReferenceMapping
  • 如果实体的AggregateObjectMapping没有共享的隔离级别

  • 这就是奇怪的地方。。。我没有在我的任何实体上指定缓存隔离级别,默认情况下它们都被缓存。一时兴起,我甚至尝试将“@Cache(isolation=CacheIsolationType.SHARED)”注释放在BaseEntity类上,但仍然收到这个“PROTECTED”警告。我的问题的根源是我试图弄明白为什么日食会自动降低它的隔离度。这些日志声明直到我在原始问题中做了更改后才出现。思想?