Library Version 12.1.3.0

Creating a Sequence
Prev | Chapter 13. Executing a Sequence of Operations | Next

## Creating a Sequence

You create a sequence by using the `OperationFactory` class to create `Operation` class instances, each of which represents exactly one operation in the store. You obtain an instance of `OperationFactory` by using `KVStore.getOperationFactory()`.

For example, suppose you are using the following keys:

    /Products/Hats/-/baseball
    /Products/Hats/-/baseball/longbill
    /Products/Hats/-/baseball/longbill/blue
    /Products/Hats/-/baseball/longbill/red
    /Products/Hats/-/baseball/shortbill
    /Products/Hats/-/baseball/shortbill/blue
    /Products/Hats/-/baseball/shortbill/red
    /Products/Hats/-/western
    /Products/Hats/-/western/felt
    /Products/Hats/-/western/felt/black
    /Products/Hats/-/western/felt/gray
    /Products/Hats/-/western/leather
    /Products/Hats/-/western/leather/black
    /Products/Hats/-/western/leather/gray

And further suppose each of the following records has some information (such as a price refresh date) that you want to update in such a fashion as to make sure that the information is consistent for all of the records:

    /Products/Hats/-/western
    /Products/Hats/-/western/felt
    /Products/Hats/-/western/leather

Then you can create a sequence in the following way:

    package kvstore.basicExample;

    ...

    import oracle.kv.Key;
    import oracle.kv.Value;
    import oracle.kv.Operation;
    import oracle.kv.OperationFactory;
    import java.util.ArrayList;

    import org.apache.avro.Schema;
    import oracle.kv.avro.GenericAvroBinding;
    import oracle.kv.avro.GenericRecord;

    ...

    // Get the operation factory. Note that we do not show the
    // creation of the kvstore handle here.

    OperationFactory of = kvstore.getOperationFactory();

    // We need a List to hold the operations in the
    // sequence.
    ArrayList<Operation> opList = new ArrayList<Operation>();

    ...

    ArrayList<String> majorComponents = new ArrayList<String>();
    ArrayList<String> minorComponents1 = new ArrayList<String>();
    ArrayList<String> minorComponents2 = new ArrayList<String>();
    ArrayList<String> minorComponents3 = new ArrayList<String>();

    ...

    // Define the major and minor path components for our keys
    majorComponents.add("Products");
    majorComponents.add("Hats");

    minorComponents1.add("western");
    minorComponents2.add("western");
    minorComponents2.add("felt");
    minorComponents3.add("western");
    minorComponents3.add("leather");

    // Create the three keys that we will need
    Key key1 = Key.createKey(majorComponents, minorComponents1);
    Key key2 = Key.createKey(majorComponents, minorComponents2);
    Key key3 = Key.createKey(majorComponents, minorComponents3);

    ...

    // Binding and schema creation omitted

    ...

    final GenericRecord hat1 = new GenericData.Record(hatSchema);
    hat1.put("randomHatData", "someRandomData");
    final Value value1 = binding.toValue(hat1);

    final GenericRecord hat2 = new GenericData.Record(hatSchema);
    hat2.put("randomHatData", "someMoreRandomData");
    final Value value2 = binding.toValue(hat2);

    final GenericRecord hat3 = new GenericData.Record(hatSchema);
    hat3.put("randomHatData", "someMoreRandomData");
    final Value value3 = binding.toValue(hat3);

    ...

    // Here we would perform whatever actions we need to create
    // our record values. We won't show how the values get created,
    // but assume it results in three Value objects: value1, value2,
    // and value3.

    ...

    // Now create our list of operations for the key pairs
    // key1/value1, key2/value2, and key3/value3. In this
    // trivial example we will put store all three records
    // in a single atomic operation.

    opList.add(of.createPut(key1, value1));
    opList.add(of.createPut(key2, value2));
    opList.add(of.createPut(key3, value3));

Note in the above example that we create three unique keys that differ only in their minor path components. If the major path components were different for any of the three keys, we could not successfully execute the sequence.

Prev | Up | Next
Chapter 13. Executing a Sequence of Operations | Home | Executing a Sequence