package io.ebean.event;
import io.ebean.config.ServerConfig;
import java.util.Set;
/**
* Listens for committed bean events.
* <p>
* These listen events occur after a successful commit. They also occur in a
* background thread rather than the thread used to perform the actual insert
* update or delete. In this way there is a delay between the commit and when
* the listener is notified of the event.
* </p>
* <p>
* It is worth noting that BeanPersistListener is different in two main ways
* from BeanPersistController postXXX methods.
* <ul>
* <li>
* BeanPersistListener only sees successfully committed events.
* BeanPersistController pre and post methods occur before the commit or a
* rollback and will see events that are later rolled back
* </li>
* <li>
* BeanPersistListener runs in a background thread and will not effect the
* response time of the actual persist where as BeanPersistController code will
* </li>
* </ul>
* </p>
* <p>
* A BeanPersistListener is either found automatically via class path search or
* can be added programmatically via {@link ServerConfig#add(BeanPersistListener)}}.
* </p>
*
* @see ServerConfig#add(BeanPersistListener)
*/
public interface BeanPersistListener {
/**
* Return true if this BeanPersistListener should be registered for events
* on this entity type.
*/
boolean isRegisterFor(Class<?> cls);
/**
* Notified that a bean has been inserted.
*
* @param bean The bean that was inserted.
*/
void inserted(Object bean);
/**
* Notified that a bean has been updated.
*
* @param bean The bean that was updated.
* @param updatedProperties The properties that were modified by this update.
*/
void updated(Object bean, Set<String> updatedProperties);
/**
* Notified that a bean has been deleted.
*
* @param bean The bean that was deleted.
*/
void deleted(Object bean);
/**
* Notified that a bean has been soft deleted.
*
* @param bean The bean that was soft deleted.
*/
void softDeleted(Object bean);
}