Ho bisogno di fare un po 'di elaborazione del database nel listener di revisione degli hernernovest. Per questo ho bisogno di funzionalità inejction di Spring Framework. Come può essere implementato? Ecco il codice che rappresenta la necessità, ma CustomRevisionListener è istanziato da un costruttore nel codice Envers. Spring ha solo SecurityContextHolder
come localizzatore di servizio statico. Come iniettare altri fagioli?hibernate-envers RevisionListener integrazione della molla come bean spring
@Service
public class CustomRevisionListener implements EntityTrackingRevisionListener {
@Resource
private PersistenceManagerHibernate persistenceManagerHibernate;
public void newRevision(Object revisionEntity) {
CustomRevisionEntity revision = (CustomRevisionEntity) revisionEntity;
revision.setUsername(getUsername());
}
public String getUsername() {
final SecurityContext context = SecurityContextHolder.getContext();
if (context != null) {
if (context.getAuthentication() != null) {
return context.getAuthentication().getName();
} else {
return "anonymous";
}
}
return "anonymous";
}
@Override
public void entityChanged(@SuppressWarnings("rawtypes") Class entityClass, String entityName, Serializable entityId, RevisionType revisionType, Object revisionEntity) {
CustomRevisionEntity revision = (CustomRevisionEntity) revisionEntity;
revision.setEntityId(entityId.toString());
revision.setEntityName(entityName);
revision.setRevisionType((int)revisionType.getRepresentation());
Auditable auditable = null;
if (entityId instanceof Long) {
auditable = persistenceManagerHibernate.findById(entityClass, (Long)entityId);
}
revision.setGroupName(auditable.getAuditGroupName());
revision.setGroupEntityId(auditable.getAuditGroupId());
}
}
Grazie, funzionava. – realcnbs