| 

.NET C# Java Javascript Exception

[Lösung gefunden] failed to lazily initialize a collection of role: Admin.authorities, no session or session was closed

Dies ist das Archiv des ehemaligen Forums zum Thema Groovy, Grails, Griffon und Bean Scripting Framework, welches unter groovy-forum.de existierte. Die neue Adresse des Groovy-Forums ist: http://codekicker.de/fragen/themen/groovy.


[Lösung gefunden] failed to lazily initialize a collection of role: Admin.authorities, no session or session was closed

LucianTheDark - 04.08.2009 17:07
Hallo Alle miteinander,
vielleicht kann mir ja jemand dabei helfen oder mal einen Anstupser in die Richtige Richtung geben:

Ich habe folgenden Code.
Der jetzt so weit ich es sehe auch funktioniert.
Einzigstes Problem beim Holen der Rollen erhalte ich den im Thread enthaltenen Fehler.

import org.codehaus.groovy.grails.plugins.springsecurity.GrailsDaoImpl
//import org.codehaus.groovy.grails.plugins.springsecurity.GrailsWebApplicationObjectSupport

import org.springframework.security.GrantedAuthority
import org.springframework.security.GrantedAuthorityImpl
import org.springframework.security.userdetails.UserDetails
import org.springframework.security.userdetails.UsernameNotFoundException
import org.springframework.dao.DataAccessException
import org.springframework.security.userdetails.UserDetailsService



class UserAdminLookUpService implements UserDetailsService {

    def UserDetails loadUserByUsername(String userName) throws UsernameNotFoundException, DataAccessException {

        println (userName)

        User user = new User();
        
        if(!userName.equals("")){
            user = User.findByemail(userName)
            println(user);

            if (user) {
                def authorities = [];
                user.authorities.withTransaction.each {role -> authorities << new GrantedAuthorityImpl(role.name)}
                println("In Abfrage User:")
                log.debug("User found for ${userName}: " + user)
                return new MyUserDetails(user.firstName, user.password, user.enabled, true, true, user.banned, authorities as GrantedAuthority[])
            }else{
                Admin admin = Admin.findByemail(userName)
                def authorities = [];
                admin.authorities.withTransaction.each {role -> authorities << new GrantedAuthorityImpl(role.name)}
                println(admin)
                if(admin){
                    println("In Abfrage Admin:")
                    log.debug("Admin found for ${userName}: "+ admin)
                    return new MyUserDetails(admin.firstName, admin.password, true, true, true, false,authorities as GrantedAuthority[] )
                }
            }
        }
        log.info("User nicht gefunden: ${userName}")
        throw new UsernameNotFoundException("User nicht gefunden");
    }

}

Die vorhandenen Domain Klasse sieht gekürtzt so aus:

import org.springframework.security.GrantedAuthority
import org.springframework.security.userdetails.UserDetails
/**
 * User domain class.
 */
class User implements Serializable{
    static transients = ['pass']
    static hasMany = [authorities:Role,groups:Groups,memberships:Membership,subscribers:Subscribers,groupAdministrators:GroupAdministrators,buddyList:BuddyList,userBuddyList: UserBuddyList, 
    buddyListMembership: BuddyListMembership, buddyListSubscriber: BuddyListSubscriber]
    def belongsTo = [Role,ReferenceID]
    
    static fetchMode = [nodes: 'eager'] 
    
    ReferenceID refUser
    
    List UserList(){
        return memberships.collect{it.user}
    }
    /** Username */
    String username
    /** User Real Name*/
    String firstName;
    String lastName;
    /** MD5 Password */
    String password
    String confirmPassword;
    /** enabled / banned / prebanned */
    boolean enabled = false;
    boolean banned
    boolean preBanned
    /** user information */
    Date birthday;

    String street;
    String postalCode;
    String city;
    String country;
    String email
    boolean emailShow

    Date createdDate;
    String validationId;
    /** description */
    String description = ''

    /** plain password to create a MD5 password */
    String pass = '[secret]'

    /** Date Creation and Last Update **/
    Date dateCreated
    Date lastUpdated

    static constraints = {
        username(blank: false, unique: true,matches:"[(A-Za-z0-9)\\S)]*")
        firstName(blank:false,nullable:false,matches:"[(A-Z)(a-z)\\s]*")
        lastName(blank:false,nullable:false,matches:"[(A-Z)(a-z)\\s]*")
        email(email:true,blank:false,nullable:false,unique:true)
        password(blank:false,nullable:false,password:true,matches:"[(A-Za-z0-9)\\S)]*")
        birthday(blank:false,nullable:false,validator: {
                if(it?.compareTo(new Date()) > 0){
                    return false;
                }else{
                    return true;
                }
            })
        postalCode(blank:true,postalCode:true,nullable:false)
        createdDate(blank:true,nullable:true)
        validationId(blank:true,nullable:true)
        country(blank:false,nullable:true)
        confirmPassword(blank:true,nullable:true)
        street(blank:true,nullable:true,matches:"[(A-Z)(a-z)(0-9)\\s]*")
        city(blank:true,nullable:true,matches:"[(A-Z)(a-z)\\s]*")
        enabled()
        banned()
        preBanned()
        buddyList(unique:true,blank:true,nullable:true)
        refUser(blank:true,nullable:true)
    }

}

Die Tipps mit der veränderung der WEB.XML und auch das eintragen von withTransaction an die holende Funktion geht nicht.
Immer wieder bekomme ich den Fehler.

Vieleicht hat ja jemand etwas ähnliches schon einmal gebaut oder kennt den Fehler und kann mir einen Tip geben.

Grüße Marcel


Stelle deine Groovy-Frage jetzt!


Diese Seite zeigt den Thread "[Lösung gefunden] failed to lazily initialize a collection of role: Admin.authorities, no session or session was closed" der ehemaligen Webseite groovy-forum.de, welche durch einen Serverunfall zerstört wurde. codekicker.de hat viele Konversationen über die beliebte Programmiersprache Groovy und zugehörige Frameworks wie das Grails-Framework retten können.

Hast Du eine Frage zum Thema Groovy, Grails oder allgemein Java? Viele ehemalige groovy-forum.de Mitglieder beantworten dir auf codekicker.de deine Frage! Stelle jetzt eine Frage!

Viele weitere Diskussionen zu Grails und Groovy befinden sich auf der Threadübersicht des alten groovy-forum.de.