[
https://issues.jboss.org/browse/IPROTO-56?page=com.atlassian.jira.plugin....
]
Gustavo Fernandes edited comment on IPROTO-56 at 6/15/18 7:46 AM:
------------------------------------------------------------------
One solution (or hack), similar to OGM, is to have a ThreadLocal object that would store
the type. The MarshallerProvider would then use this storage to return the correct
marshaller:
{code:java}
class MarshallerProvider implements SerializationContext.MarshallerProvider {
...
public MarshallerProvider(ThreadLocalStorage typeContainer) {
this.threadLocalStorage = ...
}
@Override
public BaseMarshaller<?> getMarshaller(Class<?> javaClass) {
return new EntityMarshaller(threadLocalStorage.getType());
}
{code}
This solution needs careful testing and as it's not guaranteed that the SerCtx is used
to marshall and unmarshall from the same thread (this happens in the Hot Rod client)
was (Author: gustavonalle):
One solution (or hack), similar to OGM, is to have a ThreadLocal object that would store
the type. The MarshallerProvider would then use this storage to return the correct
marshaller:
{code:java}
class MarshallerProvider implements SerializationContext.MarshallerProvider {
...
public MarshallerProvider(ThreadLocalStorage typeContainer) {
this.threadLocalStorage = ...
}
@Override
public BaseMarshaller<?> getMarshaller(Class<?> javaClass) {
return new EntityMarshaller(threadLocalStorage.getType());
}
{code}
This solution needs careful testing as it's not guaranteed that the SerCtx is used to
marshall and unmarshall from the same thread (this happens in the Hot Rod client)
DynamicEntity support in MarshallerProvider
-------------------------------------------
Key: IPROTO-56
URL:
https://issues.jboss.org/browse/IPROTO-56
Project: Infinispan ProtoStream
Issue Type: Bug
Reporter: Gustavo Fernandes
The use case is a class that describe the entity. This class contains a 'type'
and a list of properties. MarshallerProvider is used to associate a type with a marshaller
that uses this 'type' to understand the fields and data types to read/write the
stream.
The type of the entity is contained in the entity itself, and when reading from the
stream, this type is used to figure out the fields to read. During writes, though, the
type is not involved so it's not possible to use the same strategy.
Attached is a unit test to illustrate the situation. This is not necessarily a bug, it
may be possible to achieve the usage of Dynamic Entities under other circumstances, or
maybe the API needs to be extended.
--
This message was sent by Atlassian JIRA
(v7.5.0#75005)