2016-07-04 1 views
0

프로젝트를 grails 2.5.4에서 3.1.8로 업그레이드하려고하는데 다음 오류가 발생했습니다.grails 2.5.4에서 3.1.8로 업그레이드, GORM 오류

org.springframework.dao.DataAccessResourceFailureException: Could not obtain current Hibernate Session; nested exception is org.hibernate.HibernateException: No Session found for current thread 
org.grails.orm.hibernate.GrailsHibernateTemplate.getSession(GrailsHibernateTemplate.java:227) 
org.grails.orm.hibernate.GrailsHibernateTemplate.doExecute(GrailsHibernateTemplate.java:183) 
org.grails.orm.hibernate.GrailsHibernateTemplate.execute(GrailsHibernateTemplate.java:140) 
org.grails.orm.hibernate.GrailsHibernateTemplate.execute(GrailsHibernateTemplate.java:110) 
org.grails.orm.hibernate.AbstractHibernateGormStaticApi.findWhere(AbstractHibernateGormStaticApi.groovy:335) 
org.grails.datastore.gorm.GormStaticApi.findWhere(GormStaticApi.groovy:658) 
org.grails.datastore.gorm.GormEntity$Trait$Helper.findWhere(GormEntity.groovy:841) 
org.grails.datastore.gorm.GormEntity$Trait$Helper$findWhere$4.call(Unknown Source) 
com.etherapia.portal.security.User.findWhere(User.groovy) 
com.etherapia.portal.security.User$findWhere$0.call(Unknown Source) 
grails.plugin.springsecurity.userdetails.GormUserDetailsService.$tt__loadUserByUsername(GormUserDetailsService.groovy:60) 
grails.plugin.springsecurity.userdetails.GormUserDetailsService$_loadUserByUsername_closure1.doCall(GormUserDetailsService.groovy) 
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
java.lang.reflect.Method.invoke(Method.java:498) 
org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1426) 
org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93) 
groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325) 
org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:294) 
groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1021) 
groovy.lang.Closure.call(Closure.java:426) 
groovy.lang.Closure.call(Closure.java:442) 
grails.transaction.GrailsTransactionTemplate$2.doInTransaction(GrailsTransactionTemplate.groovy:96) 
org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:133) 
grails.transaction.GrailsTransactionTemplate.execute(GrailsTransactionTemplate.groovy:93) 
grails.plugin.springsecurity.userdetails.GormUserDetailsService.loadUserByUsername(GormUserDetailsService.groovy) 
grails.plugin.springsecurity.userdetails.GormUserDetailsService.loadUserByUsername(GormUserDetailsService.groovy:71) 
org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices.processAutoLoginCookie(TokenBasedRememberMeServices.java:123) 
org.springframework.security.web.authentication.rememberme.AbstractRememberMeServices.autoLogin(AbstractRememberMeServices.java:113) 
org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:97) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:169) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:205) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
grails.plugin.springsecurity.web.authentication.logout.MutableLogoutFilter.doFilter(MutableLogoutFilter.groovy:62) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:91) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
grails.plugin.springsecurity.web.SecurityRequestHolderFilter.doFilter(SecurityRequestHolderFilter.groovy:58) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:213) 
org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:176) 
org.grails.web.servlet.mvc.GrailsWebRequestFilter.doFilterInternal(GrailsWebRequestFilter.java:75) 
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
org.grails.web.filters.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:67) 
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:121) 
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
org.springframework.boot.actuate.autoconfigure.MetricsFilter.doFilterInternal(MetricsFilter.java:103) 
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 

root cause 

org.hibernate.HibernateException: No Session found for current thread 
org.grails.orm.hibernate.GrailsSessionContext.currentSession(GrailsSessionContext.java:117) 
org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:1014) 
org.grails.orm.hibernate.SessionFactoryProxy.getCurrentSession(SessionFactoryProxy.java:148) 
org.grails.orm.hibernate.GrailsHibernateTemplate.getSession(GrailsHibernateTemplate.java:225) 
org.grails.orm.hibernate.GrailsHibernateTemplate.doExecute(GrailsHibernateTemplate.java:183) 
org.grails.orm.hibernate.GrailsHibernateTemplate.execute(GrailsHibernateTemplate.java:140) 
org.grails.orm.hibernate.GrailsHibernateTemplate.execute(GrailsHibernateTemplate.java:110) 
org.grails.orm.hibernate.AbstractHibernateGormStaticApi.findWhere(AbstractHibernateGormStaticApi.groovy:335) 
org.grails.datastore.gorm.GormStaticApi.findWhere(GormStaticApi.groovy:658) 
org.grails.datastore.gorm.GormEntity$Trait$Helper.findWhere(GormEntity.groovy:841) 
org.grails.datastore.gorm.GormEntity$Trait$Helper$findWhere$4.call(Unknown Source) 
com.etherapia.portal.security.User.findWhere(User.groovy) 
com.etherapia.portal.security.User$findWhere$0.call(Unknown Source) 
grails.plugin.springsecurity.userdetails.GormUserDetailsService.$tt__loadUserByUsername(GormUserDetailsService.groovy:60) 
grails.plugin.springsecurity.userdetails.GormUserDetailsService$_loadUserByUsername_closure1.doCall(GormUserDetailsService.groovy) 
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 

오류는 mozzila firefox에서만 나타나며 chroome은 assests없이 페이지를로드합니다. 이미지, css, js가 chroome에 제대로로드되지 않았습니다.

어디에서 문제가 될 수 있는지 알고 계십니까?

+0

오류가 여기에있는 : com.etherapia.portal.security.User.findWhere (User.groovy) com.etherapia.portal.security.User $ findWhere $의 0.call (알 수없는 소스) grails.plugin .springsecurity.userdetails.GormUserDetailsService. $ tt__loadUserByUsername (GormUserDetailsService.groovy : 60) grails.plugin.springsecurity.userdetails.GormUserDetailsService $ _loadUserByUsername_closure1.doCall (GormUserDetailsService.groovy) 실제 오류는 org.hibernate.HibernateException : 현재 세션에 대한 세션이 없습니다. 실. 어쩌면 당신은 그것을 주위에 포장해야합니다 @ 거래. – Vahid

+0

문제를 해결 했습니까? –

+0

@ Chris.D가 있어야 할 때 최대 절전 모드 세션이없는 것과 같은 문제에 직면합니다. 예, 불행히도 저는 어떻게 기억하지 못합니다. 지금까지 내가 업그레이드 한 동안 변경 한 사항을 롤백 한 것을 기억합니다. 그런 다음 업그레이드를 시도 할 때 오류가 발생하지 않았으므로 만족했지만 문제를 해결하지 못했습니다. 그 이후로 나는 다른 프로젝트를 업그레이드했고이 문제도 발생하지 않았습니다. 미안해. 너를 더 도울 수 없다. :( –

답변

0

스프링 보안 코어 플러그인 버전 3.1.1에서 예외를 생성하는 메소드는 @Transactional (아래 참조)으로 주석 처리됩니다. 어쩌면 이전 버전을 사용하고 있습니까?

class GormUserDetailsService implements GrailsUserDetailsService { 

    protected Logger log = LoggerFactory.getLogger(getClass()) 

    /** 
    * Some Spring Security classes (e.g. RoleHierarchyVoter) expect at least one role, so 
    * we give a user with no granted roles this one which gets past that restriction but 
    * doesn't grant anything. 
    */ 
    static final GrantedAuthority NO_ROLE = new SimpleGrantedAuthority(SpringSecurityUtils.NO_ROLE) 

    /** Dependency injection for the application. */ 
    GrailsApplication grailsApplication 

    @Transactional(readOnly=true, noRollbackFor=[IllegalArgumentException, UsernameNotFoundException]) 
    UserDetails loadUserByUsername(String username, boolean loadRoles) throws UsernameNotFoundException { 

     def conf = SpringSecurityUtils.securityConfig 
     String userClassName = conf.userLookup.userDomainClassName 
     def dc = grailsApplication.getDomainClass(userClassName) 
     if (!dc) { 
      throw new IllegalArgumentException("The specified user domain class '$userClassName' is not a domain class") 
     } 

     Class<?> User = dc.clazz 

     def user = User.findWhere((conf.userLookup.usernamePropertyName): username) 
     if (!user) { 
      log.warn 'User not found: {}', username 
      throw new NoStackUsernameNotFoundException() 
     } 

     Collection<GrantedAuthority> authorities = loadAuthorities(user, username, loadRoles) 
     createUserDetails user, authorities 
    } 
... 
} 
관련 문제