private void postCommitUpdate(boolean success) {
   final EventListenerGroup<PostUpdateEventListener> listenerGroup =
       listenerGroup(EventType.POST_COMMIT_UPDATE);
   if (listenerGroup.isEmpty()) {
     return;
   }
   final PostUpdateEvent event =
       new PostUpdateEvent(
           getInstance(),
           getId(),
           state,
           previousState,
           dirtyFields,
           getPersister(),
           eventSource());
   for (PostUpdateEventListener listener : listenerGroup.listeners()) {
     if (PostCommitUpdateEventListener.class.isInstance(listener)) {
       if (success) {
         listener.onPostUpdate(event);
       } else {
         ((PostCommitUpdateEventListener) listener).onPostUpdateCommitFailed(event);
       }
     } else {
       // default to the legacy implementation that always fires the event
       listener.onPostUpdate(event);
     }
   }
 }
  @Override
  protected boolean hasPostCommitEventListeners() {
    final EventListenerGroup<PostUpdateEventListener> group =
        listenerGroup(EventType.POST_COMMIT_UPDATE);
    for (PostUpdateEventListener listener : group.listeners()) {
      if (listener.requiresPostCommitHanding(getPersister())) {
        return true;
      }
    }

    return false;
  }
 private void postUpdate() {
   final EventListenerGroup<PostUpdateEventListener> listenerGroup =
       listenerGroup(EventType.POST_UPDATE);
   if (listenerGroup.isEmpty()) {
     return;
   }
   final PostUpdateEvent event =
       new PostUpdateEvent(
           getInstance(),
           getId(),
           state,
           previousState,
           dirtyFields,
           getPersister(),
           eventSource());
   for (PostUpdateEventListener listener : listenerGroup.listeners()) {
     listener.onPostUpdate(event);
   }
 }