In the prior example serial keys and serial values were used, and the SerialSerialBinding base class was used for entity bindings. In this example, tuple keys and serial values are used and therefore the TupleSerialBinding base class is used for entity bindings.
As with any entity binding, a key and value is converted to an entity in the TupleSerialBinding.entryToObject method, and from an entity to a key and value in the TupleSerialBinding.objectToKey and TupleSerialBinding.objectToData methods. But since keys are stored as tuples, not as serialized objects, key fields are read and written using the TupleInput and TupleOutput parameters.
The SampleViews
class contains the modified entity
binding classes that were defined in the prior example:
PartBinding
, SupplierBinding
and
ShipmentBinding
.
import com.sleepycat.bind.serial.TupleSerialBinding; import com.sleepycat.bind.tuple.TupleInput; import com.sleepycat.bind.tuple.TupleOutput; ...
public class SampleViews { ... private static class PartBinding extendsTupleSerialBinding
{ private PartBinding(ClassCatalog classCatalog,Class dataClass
) { super(classCatalog, dataClass); } public Object entryToObject(TupleInput
keyInput, Object dataInput) {String number = keyInput.readString();
PartData data = (PartData) dataInput; return new Part(number
, data.getName(), data.getColor(), data.getWeight(), data.getCity()); } public void objectToKey(Object object, TupleOutput output) { Part part = (Part) object;output.writeString(part.getNumber());
} public Object objectToData(Object object) { Part part = (Part) object; return new PartData(part.getName(), part.getColor(), part.getWeight(), part.getCity()); } } ... private static class SupplierBinding extendsTupleSerialBinding
{ private SupplierBinding(ClassCatalog classCatalog,Class dataClass
) { super(classCatalog, dataClass); } public Object entryToObject(TupleInput
keyInput, Object dataInput) {String number = keyInput.readString();
SupplierData data = (SupplierData) dataInput; return new Supplier(number
, data.getName(), data.getStatus(), data.getCity()); } public void objectToKey(Object object, TupleOutput output) { Supplier supplier = (Supplier) object;output.writeString(supplier.getNumber());
} public Object objectToData(Object object) { Supplier supplier = (Supplier) object; return new SupplierData(supplier.getName(), supplier.getStatus(), supplier.getCity()); } } ... private static class ShipmentBinding extendsTupleSerialBinding
{ private ShipmentBinding(ClassCatalog classCatalog,Class dataClass
) { super(classCatalog, dataClass); } public Object entryToObject(TupleInput
keyInput, Object dataInput) {String partNumber = keyInput.readString(); String supplierNumber = keyInput.readString();
ShipmentData data = (ShipmentData) dataInput; return new Shipment(partNumber, supplierNumber
, data.getQuantity()); } public void objectToKey(Object object, TupleOutput output) { Shipment shipment = (Shipment) object;output.writeString(shipment.getPartNumber()); output.writeString(shipment.getSupplierNumber());
} public Object objectToData(Object object) { Shipment shipment = (Shipment) object; return new ShipmentData(shipment.getQuantity()); } } ... }