현재 AuditListener를 개발하여 원하는 모든 DomainClass에 대한 History Entry를 만듭니다. Grails는 GORM 매핑을 읽습니다.
가 나는 AuditListener클래스 AuditingListener이 AbstractPersistenceEventListener {
public AuditingListener(final Datastore datastore){
super(datastore)
}
@Override
protected void onPersistenceEvent(final AbstractPersistenceEvent event){
switch(event.eventType){
case EventType.PostInsert:
onPostInsert(event as PostInsertEvent)
break
case EventType.PreUpdate:
onPreUpdate(event as PreUpdateEvent)
break
case EventType.PreDelete:
onPreDelete(event as PreDeleteEvent)
break
}
}
def onPreUpdate(PreUpdateEvent event){
Object domainClassObject = event.entityObject
PersistentEntity entity = event.entity
if(isAuditableEntity(domainClassObject)){
try {
GrailsDomainClass grailsDomainClass = getGrailsDomainClass(domainClassObject)
Set<String> propertyNames = getPropertyNames(grailsDomainClass)
if(propertyNames){
Map properties = getPropertiesMap(propertyNames, domainClassObject, grailsDomainClass)
createRevisionEntity(entity, grailsDomainClass, domainClassObject, properties)
}
} catch(Exception e){
log.error "Could not found Audit domainClassObject Class of ${domainClassObject}", e
}
}
}
가 지금은 현재의 엔티티에 대한 개정을 만들어야합니다 방법 createRevisionEntity
를 만들 확장 만들었습니다. 메서드는 RevisionEntity
이라는 새 개체를 만들고 현재 DomainClassObject의 모든 속성을 동적으로 추가해야합니다. 그로 인해 나는 원하는 모든 DomainClass의 Revisioned Entity를 가지게 될 것이고 Envers를 최대 절전 모드로 전환하는 것과 유사합니다.
동적으로 속성을 RevisionEntity
에 넣을 수는 있지만 문제는 매핑 정보를 얻지 못하고 RevisionEntity
에 넣었습니다.
나에게 어떤 제안이 있습니까?
당신이 감사 로그 플러그인 봤어을? 그것은 우리의 손에서 잘 작동합니다. – helgew