public void test() {
    UnitOfWork uow = getSession().acquireUnitOfWork();
    Vector allDepts = uow.readAllObjects(Dept.class);
    Dept cloneDept = (Dept) allDepts.get(0);
    this.initialSize = cloneDept.getEmpCollection().size();

    Dept deptToEdit = (Dept) allDepts.get(0);
    Iterator empIter = deptToEdit.getEmpCollection().iterator();
    empIter.next();
    Emp empToEdit = (Emp) empIter.next();
    empToEdit.setEname("whatever");

    uow.revertAndResume();
    Vector allDeptsAgain = uow.readAllObjects(Dept.class);
    cloneDept = (Dept) allDepts.get(0);
    if (cloneDept.getEmpCollection().size() != this.initialSize) {
      throw new TestErrorException(
          "Revert cause duplicates to be entered in relationship maintenanced collection");
    }
  }
  /*
   * This test creates an object and registers it with a unit of work.  It then serializes that
   * object and deserializes it.  Adds an object onto the origional then performs serialization
   * sequence again.  Then deepMergeClone is attempted and the results are compared to verify that
   * the merge worked.
   */
  public void test() {
    try {
      ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
      ObjectOutputStream stream = new ObjectOutputStream(byteStream);

      // create the phoneNumber object
      Session session = getSession();
      UnitOfWork uow = session.acquireUnitOfWork();
      this.deptObject =
          (Dept)
              session.readObject(
                  Dept.class,
                  new org.eclipse.persistence.expressions.ExpressionBuilder()
                      .get("deptno")
                      .equal(5.0));
      Dept deptClone = (Dept) uow.registerObject(this.deptObject);

      // force instantiations of value holders before serialization
      deptClone.getEmpCollection().size();
      Emp empClone = null;
      if ((deptClone.getEmpCollection() != null) && (deptClone.getEmpCollection().size() > 1)) {
        empClone = (Emp) deptClone.getEmpCollection().iterator().next();
        deptClone.getEmpCollection().remove(empClone);
        empClone.setDeptno(null);
      }

      // serialize object by writing to a stream
      stream.writeObject(deptClone);
      stream.writeObject(empClone);
      stream.flush();
      byte[] arr = byteStream.toByteArray();
      ByteArrayInputStream inByteStream = new ByteArrayInputStream(arr);
      ObjectInputStream inObjStream = new ObjectInputStream(inByteStream);
      Dept deserialDept;
      Emp deserialEmp = null;

      // deserialize the object
      try {
        deserialDept = (Dept) inObjStream.readObject();
        deserialEmp = (Emp) inObjStream.readObject();

      } catch (ClassNotFoundException e) {
        throw new TestErrorException("Could not deserialize object " + e.toString());
      }

      // add a new manager, test 1-m's
      /*            if (deserialDept.getEmpCollection() != null && deserialDept.getEmpCollection().size() > 1) {
                    deserialEmp =  (Emp)deserialDept.getEmpCollection().iterator().next();
                    deserialDept.getEmpCollection().remove(deserialEmp);
                    deserialEmp.setDeptno(null);
                }
      */
      deserialDept.getEmpCollection().add(deserialEmp);
      deserialEmp.setDeptno(deserialDept);
      int collectionSize = deserialDept.getEmpCollection().size();

      byteStream = new ByteArrayOutputStream();
      stream = new ObjectOutputStream(byteStream);
      // send the ammended object back through the serialization process
      stream.writeObject(deserialDept);
      stream.flush();
      arr = byteStream.toByteArray();
      inByteStream = new ByteArrayInputStream(arr);
      inObjStream = new ObjectInputStream(inByteStream);
      try {
        deserialDept = (Dept) inObjStream.readObject();
      } catch (ClassNotFoundException e) {
        throw new TestErrorException("Could not deserialize object " + e.toString());
      }

      // merge the ammended clone with the unit of work
      deptClone = (Dept) uow.deepMergeClone(deserialDept);
      if (deptClone.getEmpCollection().size() != collectionSize) {
        throw new TestErrorException("Failed to merge the collection correctly not enough Emps");
      }
      for (Iterator iterator = deptClone.getEmpCollection().iterator(); iterator.hasNext(); ) {
        Emp emp = (Emp) iterator.next();
        if (emp.getDeptno() != deptClone) {
          throw new TestErrorException("Failed to merge the back pointer");
        }
      }
      uow.commit();
    } catch (IOException e) {
      throw new TestErrorException("Error running Test " + e.toString());
    }
  }