Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Cache configuration changes

Adding ability to set a marshaller to cache configuration:

...

Code Block
languagejava
/**
 * Abstracted binary representation of objects.
 */
public interface IgniteObject {
    /**
     * Gets portable object type ID.
     *
     * @return Type ID.
     */
    public int typeId();

    /**
     * Gets fully deserialized instance of portable object.
     *
     * @return Fully deserialized instance of portable object.
     */
    @Nullable public <T> T deserialize() throws IgniteException;

    /**
     * Gets field value.
     *
     * @param fieldName Field name.
     * @return Field value.
     */
    @Nullable public <T> T field(String fieldName);

    /**
     * Checks whether field is set.
     *
     * @param fieldName Field name.
     * @return {@code true} if field is set.
     */
    public boolean hasField(String fieldName);
} 

...

New component: CacheObjectManager

Default implementation of CacheObjectManager assumes that it is impossible to read a field from an object without deserialization.

 

Code Block
languagejava
titleCacheObjectManager
/**
 *
 */
public abstract class CacheObjectManager extends GridCacheManagerAdapter {
    /**
     * ChecksGets whetherthe thissource functionalityinput isstream globallythat supported.
was used to create  *
     * @return {@code true} if enabledthis IgniteObject.
     */
    public abstractSeekableDataInput boolean isFieldsIndexingEnabledsource();

    /**
     * @param obj Key value.
     * @param userObj If {@code true} then given object is object provided by user and should be copied
     * before stored in cache.
     * @return Cache key object.
     */
    public abstract KeyCacheObject toCacheKeyObject(Object obj, boolean userObj);

    }

 

IgniteObjectMarshaller
 

Code Block
languagejava
public interface IgniteObjectMarshaller extends Marshaller {    
    //**
     * @param objinput Object.
     * @param userObj If {@code true} then given object is object provided by user and should be copied
     * before stored in cacheSeekable input.
     * @return Cache object.
     */
    @Nullable public abstractIgniteObject CacheObject toCacheObjecttoIgniteObject(@Nullable Object obj, boolean userObjSeekableDataInput input);

    /**
     * @param typeinput ObjectSeekable typeinput.
     * @param bytes Object bytes.
     * @return Cache object.
     */
    @Nullable public abstractIgniteObject CacheObject toCacheObjecttoIgniteObject(byte type, byte[] bytes);

    /**
     * @param valPtr Value pointer.
     * @param tmp If {@code true} can return temporary instance which is valid while entry lock is held.
     * @return Cache object.
     * @throws IgniteCheckedException If failed.
     */
    public abstract CacheObject toCacheObject(long valPtr, boolean tmp) throws IgniteCheckedException[] data);

    /**
     * @param typeName Type name.
     * @return Type ID.
     */
    public abstract int typeId(String typeName);

    /**}
Code Block
languagejava
public interface SeekableDataInput extends DataInput {
    public * @param obj Object to get type ID for.
     * @return Type ID.
     */long position();
 
    public void seek(long pos) throws IOException;
 
    public abstractvoid int typeId(Object obj);
...
}

 If marshaller implementation supports fields read without deserialization, it should provide an implementation of CacheObjectManager that is able to convert a user object to the specific CacheObject implementation.

Code Block
languagejava
@CacheObjectProcessor(impl=MyCacheObjectProcessor.class)
public class MyMarshaller implements Marshaller {ensureOnHeap();
}