Custom - dbPostSave
Page
- dernière modification par Thomas Bazin le 2014/10/06 15:27
Cette méthode est appelée après l’enregistrement d’une entité en base de données (insertion ou modification).
Java
L’exemple suivante explique comment réaliser des traces techniques. Voir dbOnSave pour le complément.
private static final String BEAN_TO_LOG = ”beanToLog”;
@Override
public void dbPostSave(E bean, Action action, RequestContext ctx) {
if (isHistoryEnabled(bean)) {
LibHistory history = new LibHistory();
history.setEntity(bean.name());
history.setAction(action.getCode());
// L’utilisateur courant est stocké dans le contexte de session.
history.setUser(ctx.getSessionContext().getUser().getLogin());
// L’ancienne valeur est stockée uniquement en modification.
if (action.getPersistence() == Persistence.UPDATE) {
history.setOldValue(ctx.getAttributes().get(BEAN_TO_LOG).toString());
ctx.getAttributes().remove(BEAN_TO_LOG);
}
history.setNewValue(bean.toString());
DB.insert(history, ctx);
}
super.dbPostSave(bean, action, ctx);
}
private boolean isHistoryEnabled(E bean) {
// Pour éviter une StackOverflowError compte tenu que LibHistory est une entité comme les autres, donc
dbPostSave est également appelée quand LibHistory est enregistré en base.
boolean isBeanOk = !bean.getClass().isAssignableFrom(LibHistory.class);
// La méthode MessageUtils.getServerProperty retourne une propriété stockée dans le fichier server.properties.
return isBeanOk && Boolean.valueOf(MessageUtils.getServerProperty(”history.enabled”));
}