org.apache.tinkerpop.gremlin.structure.io.gryo.kryoshim

## Interface KryoShimService

- All Known Implementing Classes:
    HadoopPoolShimService, UnshadedKryoShimService

      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 Summary

    All Methods Instance Methods Abstract Methods
    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.

- - ### Method Detail

    - #### readClassAndObject

          Object readClassAndObject(InputStream source)

      Deserializes an object from an input stream.
      Parameters:
        `source` - the stream from which to read an object's serialized form
      Returns:
        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.
      Parameters:
        `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.

      Returns:
        this implementation's priority value

    - #### applyConfiguration

          void applyConfiguration(Configuration conf)

      Attempt to incorporate the supplied configuration in future read/write calls.

      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.

      Parameters:
        `conf` - the configuration to apply to this service's internal serializer

Copyright © 2013–2019 Apache Software Foundation. All rights reserved.