/** Generic persist test. */
 public void verifyPersist(Object object) {
   EntityManager em = createEntityManager();
   try {
     beginTransaction(em);
     em.persist(object);
     commitTransaction(em);
     beginTransaction(em);
     verifyObjectInCacheAndDatabase(object);
     rollbackTransaction(em);
     closeEntityManager(em);
   } catch (RuntimeException exception) {
     if (isTransactionActive(em)) {
       rollbackTransaction(em);
     }
     closeEntityManager(em);
     throw exception;
   }
 }
  /** Generic remove test. */
  public void verifyPersistAndRemove(Object object) {
    EntityManager em = createEntityManager();
    try {
      beginTransaction(em);
      em.persist(object);
      commitTransaction(em);
      closeEntityManager(em);

      em = createEntityManager();
      beginTransaction(em);
      object = em.find(object.getClass(), getServerSession(getPersistenceUnitName()).getId(object));
      em.remove(object);
      commitTransaction(em);
      verifyDelete(object);
      closeEntityManager(em);
    } catch (RuntimeException exception) {
      if (isTransactionActive(em)) {
        rollbackTransaction(em);
      }
      closeEntityManager(em);
      throw exception;
    }
  }
 /** Verifies the object in a new EntityManager. */
 public void verifyObjectInEntityManager(Object writtenObject, String persistenceUnit) {
   EntityManager em = createEntityManager(persistenceUnit);
   try {
     Object readObject =
         em.find(writtenObject.getClass(), getServerSession(persistenceUnit).getId(writtenObject));
     if (!getServerSession(persistenceUnit).compareObjects(readObject, writtenObject)) {
       fail(
           "Object: "
               + readObject
               + " does not match object that was written: "
               + writtenObject
               + ". See log (on finest) for what did not match.");
     }
   } finally {
     closeEntityManager(em);
   }
 }
 /** Close the entity manager. If a transaction is active, then roll it back. */
 public void closeEntityManagerAndTransaction(EntityManager entityManager) {
   if (isTransactionActive(entityManager)) {
     rollbackTransaction(entityManager);
   }
   closeEntityManager(entityManager);
 }