ignite-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Fred (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (IGNITE-3429) org.hibernate.cache.spi.CacheKey not properly serialized by binary marshaller
Date Wed, 05 Oct 2016 17:36:20 GMT

    [ https://issues.apache.org/jira/browse/IGNITE-3429?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15549447#comment-15549447
] 

Fred commented on IGNITE-3429:
------------------------------

I put in a temporary workaround in the time being which sets SessionFactory to null:

```
public class SgrOptimizedMarshaller extends OptimizedMarshaller {

	@Override
	public byte[] marshal(Object obj) throws IgniteCheckedException {

		if (obj instanceof CacheKey) {
			CacheKey key = (CacheKey) obj;
			Class<?> cacheKeyClazz = obj.getClass();

			try {
				Field typeField = cacheKeyClazz.getDeclaredField("type");
				typeField.setAccessible(true);
				Type hibernateType = (Type) typeField.get(key);
				if (hibernateType instanceof ComponentType) {
					ComponentType componentType = (ComponentType) hibernateType;
					Class<?> componentTypeClazz = componentType.getClass();
					Field componentTypeField = componentTypeClazz.getDeclaredField("typeScope");
					componentTypeField.setAccessible(true);
					componentTypeField.set(componentType, null);
				}
			} catch (Exception ex) {
				System.out.println(ex.toString());
			}
		}
		return super.marshal(obj);
	}

}
```

> org.hibernate.cache.spi.CacheKey not properly serialized by binary marshaller
> -----------------------------------------------------------------------------
>
>                 Key: IGNITE-3429
>                 URL: https://issues.apache.org/jira/browse/IGNITE-3429
>             Project: Ignite
>          Issue Type: Bug
>          Components: cache
>    Affects Versions: 1.6
>            Reporter: Valentin Kulichenko
>            Priority: Critical
>             Fix For: 1.8
>
>
> {{org.hibernate.cache.spi.CacheKey}} is a class used as a key for all entries in the
Hibernate L2 cache. This class contains {{type}} field and custom {{equals}} logic where the
type is used as a helper and does not participate in comparison. Instances of the same type
are producing different hash codes in different JVMs, which actually breaks comparison when
binary format is used, where byte arrays are compared.
> The issue is described in more detail here: http://stackoverflow.com/questions/38132263/apache-ignite-as-hibernate-l2-cache-storing-duplicate-entities



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message