2017-04-11 2 views
0

Um einen Benutzernamen "LastUpdatedBy" -Eigenschaft (zusammen mit einigen anderen Std-Eigenschaften) zu mehreren Domänenklassen hinzuzufügen, habe ich ein Merkmal erstellt. Alles funktioniert gut für die Datenbank, aber der Festplattenspeicher von EhCache gibt eine NotSerializableException für den springSecurityService aus. Ich habeGrails 3 verwenden springSecurityService in einem Merkmal? Serialisierungsfehler -

def springSecurityService 

um den principal.username zu erhalten.

Gibt es eine Möglichkeit, den Dienst als vorübergehend zu bezeichnen (statische Transienten = [] scheint nicht zu helfen), oder bin ich in einer Sackgasse? Auf einen Service innerhalb einer Domain-Klasse zu verweisen, ist sowieso ein bisschen heikel, aber was ist eine bessere, praktikable Möglichkeit, den Benutzernamen kurz vor dem Speichern zu erhalten?

+1

sollten Sie transient springSecurityService einfach in Ihrer Domain-Klasse definieren – injecteer

Antwort

0

Ok, das habe ich herausgefunden. Eine der Domänenklassen hatte einen zusammengesetzten Schlüssel und wurde daher zur Implementierung von Serializable getaggt. Sobald dies konvertiert wurde, um das übliche ID-Feld zu erhalten, und "implementiert Serializable" entfernt wurde, ging das Problem weg.

0

Erklären Sie einfach Ihr Feld als vorübergehendes Feld.

class MyDomain { 

    // other stuff omitted 

    transient SpringSecurityService springSecurityService 

} 

Dies wird die Arbeit tun, wenn es zur Serialisierung kommt.