protected void writeInternal(ObjectDataOutput out) throws IOException {
   super.writeInternal(out);
   out.writeInt(opList.size());
   for (Operation op : opList) {
     out.writeObject(op);
   }
   out.writeUTF(caller);
   out.writeLong(threadId);
 }
 protected void readInternal(ObjectDataInput in) throws IOException {
   super.readInternal(in);
   int size = in.readInt();
   opList = new ArrayList<Operation>(size);
   for (int i = 0; i < size; i++) {
     opList.add((Operation) in.readObject());
   }
   caller = in.readUTF();
   threadId = in.readLong();
 }