/** 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;
    }
  }
 /** 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);
 }