Tôi vừa gặp phải vấn đề mà tôi không hiểu. Ứng dụng grails (2.2.2) của chúng tôi là ném ngoại lệ sau ngay sau khi người dùng đầu tiên đăng nhập. Khi đã xong, không ai từng thấy lại. Hiện tại chúng tôi đang tái tạo nó với một bài kiểm tra Geb.Grails & HibernateException: proxy kết nối không thể sử dụng được sau khi hoàn tất giao dịch
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
Dòng trong ActivityRatingTagLib (gọi bằng một GSP) là khá đơn giản:
if (!User.get(session.user.id).permissions.publishStream) {
Nếu tôi loại bỏ các User.get() ở đây và truy cập vào session.user ngay lập tức, mọi thứ suôn sẻ nhưng sau đó nó bị treo trong cuộc gọi TagLib tiếp theo, trong đó Người dùng được truy cập thông qua User.get().
Tôi đã tìm kiếm trên Internet nhiều giải pháp ngay bây giờ nhưng chưa có gì hữu ích. Vì ngoại lệ này dường như không phổ biến, tôi đoán chúng tôi đang làm điều gì đó sai về cơ bản.
Tôi rất vui vì bất kỳ ý tưởng nào chúng tôi có thể thử và nếu bạn cần thêm thông tin, hãy cho tôi biết!
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
}
Tôi cho rằng bạn cần tìm nạp 'quyền 'một cách háo hức (' quyền lười: sai') trong khi nhận được 'người dùng'. Nhưng trước khi đưa ra tuyên bố của tôi, nếu bạn có thể hiển thị miền 'Người dùng' được đề cập sẽ tốt. – dmahapatro
Các quyền được nhúng và do đó phải được tải mọi lúc. Tôi đã thêm hai lớp! – Moritz
ActivityRatingTagLib có được gọi bên trong bố cục không? –