Mananpreet Singh
Mananpreet Singh

Reputation: 295

java.lang.IllegalStateException: Method on class [Domain Class] was used outside of a Grails application

context.GrailsContextLoaderListener Error initializing the application: Method on class [Domain Class(auth.Role)] was used outside of a Grails application. If running in the context of a test using the mocking API or bootstrap Grails correctly.

java.lang.IllegalStateException: Method on class [Domain Class(auth.Role)] was used outside of a Grails application. If running in the context of a test using the mocking API or bootstrap Grails correctly.

This exception is thrown at this line :

  def existingRole = Role.findByAuthority(role) // Code Interrupts 

Role.groovy

import org.bson.types.ObjectId

class Role {

   // static mapWith = 'mongo' (For mongoDb we have plugin, so this is working)
   static mapWith = 'none' //(Migrating MongoDB to postgreSql so changed mapWith to 'none')
   ObjectId id
   String authority

   static constraints = {
        authority blank: false, unique: true
   }
}

UserService.groovy

@Transactional
class UserService {

    def grailsApplication

/**
 * Create Users with supplied roles
 * @param usersAndRoles map of user:role
 *
 * @return
 */
def createUsers(def usersAndRoles) {
    // [user:ROLE_USER, manager:ROLE_MANAGER, admin:ROLE_ADMIN]
    // For supplied list of user:role, create user with role
    usersAndRoles.each { key, value ->
        def user = User.findByUsername(key)
        if (!user) {
            def fields = grailsApplication.config."${key}"
            user = new User(username: fields.username,
                    password: fields.password,
                    email: fields.email,
                    passwordExpired: true).save(flush: true)
        }

        // Get the role for this user, set authorities to this role and save
        def role = Role.findByAuthority(value)
        user.authorities = [role]
        user.save(flush: true)
    }
}

/**
 * Create supplied roles
 * @param roles list of roles
 * @return
 */
def createRoles(def roles) {
    roles?.each { role ->
        def existingRole = Role.findByAuthority(role) // Code Interrupts Here
        if (!existingRole) {
            new Role(authority: role).save(flush: true)
        }
    }
}
}

Upvotes: 1

Views: 464

Answers (1)

Michal_Szulc
Michal_Szulc

Reputation: 4177

If you use

static mapWith = 'none'

it won't map this domain class to any DB, so it won't be accessible (because it is not persistent). Add mapping to any db (it could be even default h2 database) and it'll work again.

Upvotes: 1

Related Questions