public interface KryoShimService
VertexWritable and ObjectWritable formerly implemented Serializable by resorting to statically-pooled shaded Kryo instances maintained by the HadoopPools class. This is awkward because those shaded Kryo instances require class registration by default.
Consider what happens with custom property datatypes reachable from the reference graph rooted at an ObjectWritable or VertexWritable instance. It is not enough for these property classes to merely implement Serializable, though one think that from skimming ObjectWritable/VertexWritable. Those classes must also register with TinkerPop's internal, shaded Kryo instances as maintained by HadoopPools, or else configure those instances to accept unregistered classes. Otherwise, TinkerPop's shaded Kryo will refuse to serialize those properties (even though they implement Serializable, and even though the user might think they are only using Java's standard Serialization mechanism!).
By hiding the mechanics of serialization behind this interface instead of hardcoding it in HadoopPools, the user can decide how to implement serialization for ObjectWritable/VertexWritable (and whatever other classes in TinkerPop decide to implement Serializable but then delegate all of the implementation details, like ObjectWritable/VertexWritable do now).
Modifier and Type | Method and Description |
---|---|
void |
applyConfiguration(Configuration conf)
Attempt to incorporate the supplied configuration in future read/write calls.
|
int |
getPriority()
Returns this service's relative priority number.
|
Object |
readClassAndObject(InputStream source)
Deserializes an object from an input stream.
|
void |
writeClassAndObject(Object o,
OutputStream sink)
Serializes an object to an output stream.
|
Object readClassAndObject(InputStream source)
source
- the stream from which to read an object's serialized formsource
void writeClassAndObject(Object o, OutputStream sink)
o
- the object to serializesink
- the stream into which the serialized object is writtenint getPriority()
KryoShimServiceLoader.KRYO_SHIM_SERVICE
),
the service implementation with the numerically highest priority will be used
and all others ignored. In other words, the highest priority wins (in the absence of a
system property override).
TinkerPop's current default implementation uses priority value zero.
Third-party implementations of this interface should (but are not technically required) to use a priority value with absolute value greater than 100.
The implementation currently breaks priority ties by lexicographical comparison of fully-qualified package-and-classname, but this tie-breaking behavior should be considered undefined and subject to future change. Ties are ignored if the service is explicitly set through the system property mentioned above.
void applyConfiguration(Configuration conf)
This method is a wart that exists essentially just to support the old
HadoopPools#initialize(Configuration)
use-case.
This method is not guaranteed to have any effect on an instance of this interface
after writeClassAndObject(Object, OutputStream)
or readClassAndObject(InputStream)
has been invoked on that particular instance.
conf
- the configuration to apply to this service's internal serializerCopyright © 2013–2017 Apache Software Foundation. All rights reserved.