Class SplittableHolder

All Implemented Interfaces:
ExternalizableLite, Externalizable, Serializable

public class SplittableHolder extends OptimizedHolder
An immutable object to hold attribute values and related information. In this AttributeHolder sub-class, the binary value will be null if it has not been serialized, empty if it is external and has not been fetched yet, or a valid binary value.
See Also:
  • Constructor Details

    • SplittableHolder

      public SplittableHolder()
      Default constructor for ExternalizableLite.
    • SplittableHolder

      public SplittableHolder(SplitHttpSessionModel model)
      Construct an AttributeHolder for a value.
      Parameters:
      model - the split http session model
    • SplittableHolder

      public SplittableHolder(String sName, Object oValue, SplitHttpSessionModel model)
      Construct an AttributeHolder for a value.
      Parameters:
      sName - the attribute name
      oValue - the value of the attribute; not null
      model - the split http session model
  • Method Details

    • getValue

      public Object getValue()
      Obtain the object form of the value.
      Overrides:
      getValue in class OptimizedHolder
      Returns:
      the object form of the value
    • onBound

      public void onBound(AttributeHolder holderOrig)
      Called when the attribute is bound.
      Overrides:
      onBound in class AttributeHolder
      Parameters:
      holderOrig - the holder that this new bound holder is replacing, if any, otherwise null
    • onUnbound

      public void onUnbound(boolean fReplaced, boolean fAll)
      Called when the attribute is unbound.
      Overrides:
      onUnbound in class AttributeHolder
      Parameters:
      fReplaced - set to true of this is the result of a bind operation (so the holder is being replaced)
      fAll - true if this method is called within the context of an AbstractHttpSessionModel.unbind() call
    • flush

      protected void flush() throws IOException
      Called to flush the value to its data storage.
      Overrides:
      flush in class AttributeHolder
      Throws:
      IOException - on I/O error
    • writeExternal

      public void writeExternal(DataOutput out) throws IOException
      Helper to write the object state to a stream.
      Specified by:
      writeExternal in interface ExternalizableLite
      Overrides:
      writeExternal in class OptimizedHolder
      Parameters:
      out - the stream to write the object to
      Throws:
      IOException - if an I/O exception occurs
    • ensureInternalBinary

      protected Binary ensureInternalBinary()
      Obtain the non-null internally managed binary value. This method allows sub-classes to lazily load the cached binary.

      This method is explicitly NOT a "MAKE BINARY OUT OF VALUE" method. It is only intended to allow lazy loading of the pre-existing binary value, for example from a distributed cache.

      Overrides:
      ensureInternalBinary in class OptimizedHolder
      Returns:
      the binary form of the value, but never null
    • isExternal

      protected boolean isExternal()
      Determine if the value is stored in the external cache. The value in the external cache is not necessarily up to date; this only indicates whether it is there at all.
      Returns:
      true if the holder's value is stored in the external cache
    • setExternal

      protected void setExternal(boolean fExternal)
      Specify that the value is stored in the external cache.
      Parameters:
      fExternal - true if the object is stored in the external cache
    • isExternalDesirable

      protected boolean isExternalDesirable(Binary binValue)
      Decide whether or not this holder will choose to store the passed binary value in its external storage.
      Parameters:
      binValue - the binary value to evaluate to determine whether it should be stored internally or externally
      Returns:
      true if this holder will store the passed value in an external cache, false otherwise
    • getExternalKey

      protected Object getExternalKey()
      Build a key that will be used to access the binary value for this attribute holder that in the external cache.
      Returns:
      the key for this attribute holder's value in the external cache
    • assignExternalKey

      protected Object assignExternalKey(String sId)
      Generate and set the key that will be used to access the binary value for this attribute holder that is in the external cache.
      Parameters:
      sId - the session ID associated with this key
      Returns:
      the key for this attribute holder's value in the external cache
    • getExternalBinary

      protected Binary getExternalBinary()
      Obtain the binary form of the value from the external cache.
      Returns:
      the binary form of the value or null if it hasn't been stored in the external cache yet
    • getExternalValue

      protected Object getExternalValue()
      Obtain the value from the external cache. For a session with a large Binary value that is split into multiple segments, its value is the key set of the split segments. Otherwise, the value is Binary and this method returns null.
      Returns:
      the value of the session if the value of the session is split into multiple segments, or null if the value is in binary form.
      Since:
      12.2.1.4.16
    • setExternalBinary

      protected void setExternalBinary(Binary binValue)
      Store the binary form of the value in the external cache.
      Parameters:
      binValue - the binary form of the value to store in the external cache
    • removeExternalBinary

      protected void removeExternalBinary()
      Remove the binary form of the value from the external cache.
    • prepareWrite

      protected void prepareWrite() throws IOException
      Called to test serialization; if the holder cannot serialize its value, it should throw an IOException at this point. Note that this method should only be called as part of the "write" processing for the model, as the holder will expect an immediate follow-up call to actually write itself out.
      Overrides:
      prepareWrite in class OptimizedHolder
      Throws:
      IOException - if the holder cannot serialize its value
    • readBinary

      protected Binary readBinary(DataInput in) throws IOException
      Read the binary value. This is part of deserialization processing, and is separated out to enable subclassing.
      Overrides:
      readBinary in class OptimizedHolder
      Parameters:
      in - the DataInput that this holder is being deserialized from
      Returns:
      the binary value
      Throws:
      IOException - on I/O error
    • writeBinary

      protected void writeBinary(DataOutput out) throws IOException
      Write the binary value. This is part of serialization processing, and is separated out to enable subclassing.
      Overrides:
      writeBinary in class OptimizedHolder
      Parameters:
      out - the DataOutput that this holder is being serialized to
      Throws:
      IOException - on I/O error
    • isInstanceOfElasticKeys

      protected static boolean isInstanceOfElasticKeys(Object object)
      Determine if a given object is an ElasticKey or a collection of ElasticKeys.
      Parameters:
      object - the object
      Returns:
      true if the given object is of the ElasticKey type or its collection; false otherwise
      Since:
      12.2.1.4.16