public void testPostPersistSportsCarInheritAndExcludeDefault() {
    int fueledVehiclePostPersistCountBefore = FueledVehicleListener.POST_PERSIST_COUNT;
    int defaultListenerPostPersistCountBefore = DefaultListener.POST_PERSIST_COUNT;

    EntityManager em = createEntityManager();
    beginTransaction(em);

    try {
      SportsCar sportsCar = new SportsCar();
      sportsCar.setPassengerCapacity(new Integer(4));
      sportsCar.setFuelCapacity(new Integer(55));
      sportsCar.setDescription("Porshe");
      sportsCar.setFuelType("Gas");
      em.persist(sportsCar);
      commitTransaction(em);
    } catch (RuntimeException ex) {
      if (isTransactionActive(em)) {
        rollbackTransaction(em);
      }

      closeEntityManager(em);
      throw ex;
    }

    int fueledVehiclePostPersistCountAfter = FueledVehicleListener.POST_PERSIST_COUNT;
    int defaultListenerPostPersistCountAfter = DefaultListener.POST_PERSIST_COUNT;

    assertFalse(
        "The PostPersist callback method on FueledVehicleListener was not called.",
        fueledVehiclePostPersistCountBefore == fueledVehiclePostPersistCountAfter);
    assertTrue(
        "The PostPersist callback method on DefaultListener was called.",
        defaultListenerPostPersistCountBefore == defaultListenerPostPersistCountAfter);
  }
  public void testPrePersistSportsCarOverride() {
    int carPrePersistCountBefore = Car.PRE_PERSIST_COUNT;
    int sportsCarPrePersistCountBefore = SportsCar.PRE_PERSIST_COUNT;

    EntityManager em = createEntityManager();
    beginTransaction(em);

    try {
      SportsCar sportsCar = new SportsCar();
      sportsCar.setPassengerCapacity(new Integer(2));
      sportsCar.setFuelCapacity(new Integer(90));
      sportsCar.setDescription("Viper");
      sportsCar.setFuelType("Gas");
      em.persist(sportsCar);
      commitTransaction(em);
    } catch (RuntimeException ex) {
      if (isTransactionActive(em)) {
        rollbackTransaction(em);
      }

      closeEntityManager(em);
      throw ex;
    }

    closeEntityManager(em);

    int carPrePersistCountAfter = Car.PRE_PERSIST_COUNT;
    int sportsCarPrePersistCountAfter = SportsCar.PRE_PERSIST_COUNT;

    assertTrue(
        "The PrePersist callback method on Car was called.",
        carPrePersistCountBefore == carPrePersistCountAfter);
    assertFalse(
        "The PrePersist callback method on Sports car was not called.",
        sportsCarPrePersistCountBefore == sportsCarPrePersistCountAfter);
  }
  public void testPrePersistSportsCarInheritAndExcludeDefault() {
    int listenerSuperclassPrePersistCountBefore = ListenerSuperclass.COMMON_PRE_PERSIST_COUNT;
    int defaultListenerPrePersistCountBefore = DefaultListener.PRE_PERSIST_COUNT;

    EntityManager em = createEntityManager();
    beginTransaction(em);

    try {
      SportsCar sportsCar = new SportsCar();
      sportsCar.setPassengerCapacity(new Integer(2));
      sportsCar.setFuelCapacity(new Integer(60));
      sportsCar.setDescription("Corvette");
      sportsCar.setFuelType("Gas");
      em.persist(sportsCar);
      commitTransaction(em);
    } catch (RuntimeException ex) {
      if (isTransactionActive(em)) {
        rollbackTransaction(em);
      }

      closeEntityManager(em);
      throw ex;
    }

    closeEntityManager(em);

    int listenerSuperclassPrePersistCountAfter = ListenerSuperclass.COMMON_PRE_PERSIST_COUNT;
    int defaultListenerPrePersistCountAfter = DefaultListener.PRE_PERSIST_COUNT;

    assertFalse(
        "The PrePersist callback method on ListenerSuperclass was not called.",
        listenerSuperclassPrePersistCountBefore == listenerSuperclassPrePersistCountAfter);
    assertTrue(
        "The PrePersist callback method on DefaultListener was called.",
        defaultListenerPrePersistCountBefore == defaultListenerPrePersistCountAfter);
  }