Interface KryoShimService

  • public interface KryoShimService
    This interface exists to decouple HadoopPools from TinkerPop's shaded Kryo.

    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).

    • Method Detail

      • readClassAndObject

        Object readClassAndObject​(InputStream source)
        Deserializes an object from an input stream.
        source - the stream from which to read an object's serialized form
        the first deserialized object available from source
      • writeClassAndObject

        void writeClassAndObject​(Object o,
                                 OutputStream sink)
        Serializes an object to an output stream. This may flush the output stream.
        o - the object to serialize
        sink - the stream into which the serialized object is written
      • getPriority

        int getPriority()
        Returns this service's relative priority number. Unless explicitly overridden through a system property (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.

        this implementation's priority value
      • applyConfiguration

        void applyConfiguration​(org.apache.commons.configuration2.Configuration conf)
        Attempt to incorporate the supplied configuration in future read/write calls. 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 serializer
      • close

        void close()
        Release all resources associated with the shim service. This is called on a forced reload or when the KryoShimServiceLoader is closed.