Ich lief gerade in ein Problem, das ich nicht verstehe. Unsere grails (2.2.2) App wirft die folgende Ausnahme direkt nachdem der erste Benutzer angemeldet ist. Sobald das erledigt ist, hat niemand es jemals wieder gesehen. Derzeit reproduzieren wir es mit einem Geb-Test.Grails & HibernateException: connection Proxy nicht verwendbar nach Transaktion completio
Caused by HibernateSystemException: connnection proxy not usable after transaction completion; nested exception is org.hibernate.HibernateException: connnection proxy not usable after transaction completion
->> 24 | doCall in gibbons5.recommender.ActivityRatingTagLib$_closure1
Die Linie im ActivityRatingTagLib (durch einen gsp genannt) ist ziemlich einfach: Werke alles
if (!User.get(session.user.id).permissions.publishStream) {
Wenn ich die User.get() hier entfernen und die session.user Zugriff sofort, Gut, aber dann stürzt es beim nächsten TagLib-Aufruf ab, bei dem der Benutzer über User.get() erreicht wird.
Ich suchte im Internet nach Lösungen, aber es gab noch nichts Nützliches. Da diese Ausnahme eher ungewöhnlich erscheint, tun wir etwas grundsätzlich falsch.
Ich wäre ziemlich glücklich über jede Idee, was wir versuchen könnten und wenn Sie weitere Informationen benötigen, lassen Sie es mich wissen!
User.groovy:
class User implements HttpSessionBindingListener {
...
boolean isOnline = false
Permissions permissions = new Permissions()
static embedded = ['infoPopups', 'permissions', 'userSettings']
void valueBound(HttpSessionBindingEvent event) {
isOnline = true
}
void valueUnbound(HttpSessionBindingEvent event) {
// we do not have a session any more
withTransaction {
def user = get(this.id)
user.isOnline = false
user.save()
}
}
...
}
Permissions.groovy
class Permissions {
boolean publishStream = false
}
Ich nehme an, Sie müssen "Berechtigungen" eifrig holen ('Berechtigungen faul: false') während der "Benutzer". Aber bevor Sie meine Aussage machen, können Sie, wenn Sie die Domäne "Benutzer" in Frage stellen, das gut sein. – dmahapatro
Die Berechtigungen sind eingebettet und sollten daher die ganze Zeit geladen werden. Ich habe die beiden Klassen trotzdem hinzugefügt! – Moritz
Wird ActivityRatingTagLib in einem Layout aufgerufen? –