[LOGIN ]Erro na autenticação
08/11/2011 10:17
0
Bom dia pessoal,

Está ocorrendo o erro abaixo em uma aplicação grails que já se encontra em produção quando o usuário vai se logar.

Ocorreu algumas vezes no ambiente de desenvolvimento, mas era só dar um grails clean e reiniciar a aplicação.

Mas em produção é complicado ficar reiniciando o tomcat.

Alguém teria ideia do que é esse erro e como poderia corrigir?

Conteúdo do arquivo application.properties:
app.grails.version=1.3.7
app.name=bookstore
app.servlet.version=2.4
app.version=1.07
plugins.acegi=0.5.3.2
plugins.crypto=2.0
plugins.hibernate=1.3.7
plugins.ibatis=1.2.1
plugins.jasper=0.9.7
plugins.mail=0.9
plugins.oauth=0.10
plugins.quartz=0.4.2
plugins.richui=0.8
plugins.tomcat=1.3.7
plugins.yui=2.7.0.1


Error Details:

Error 500:
Servlet: default
URI: /bookstore/j_spring_security_check
Exception Message: Already value [org.springframework.orm.hibernate3.SessionHolder@1025c5d] for key [org.hibernate.impl.SessionFactoryImpl@536b73] bound to thread [http-8080-2]
Caused by: Already value [org.springframework.orm.hibernate3.SessionHolder@1025c5d] for key [org.hibernate.impl.SessionFactoryImpl@536b73] bound to thread [http-8080-2]
Class: GrailsAuthenticationProcessingFilter
At Line: [56]
Code Snippet:

Stack Trace:
java.lang.IllegalStateException: Already value [org.springframework.orm.hibernate3.SessionHolder@1025c5d] for key [org.hibernate.impl.SessionFactoryImpl@536b73] bound to thread [http-8080-2]

at org.springframework.transaction.support.TransactionSynchronizationManager.bindResource(TransactionSynchronizationManager.java:179)

at org.codehaus.groovy.grails.plugins.springsecurity.GrailsWebApplicationObjectSupport.setUpSession(GrailsWebApplicationObjectSupport.java:86)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoCachedMethodSiteNoUnwrapNoCoerce.invoke(PogoMetaMethodSite.java:266)

at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.callCurrent(PogoMetaMethodSite.java:51)

at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:145)

at org.codehaus.groovy.grails.plugins.springsecurity.GrailsDaoImpl.loadUserByUsername(GrailsDaoImpl.groovy:70)

at org.codehaus.groovy.grails.plugins.springsecurity.GrailsDaoImpl$loadUserByUsername.callCurrent(Unknown Source)

at org.codehaus.groovy.grails.plugins.springsecurity.GrailsDaoImpl.loadUserByUsername(GrailsDaoImpl.groovy:52)

at org.springframework.security.providers.dao.DaoAuthenticationProvider.retrieveUser(DaoAuthenticationProvider.java:83)

at org.springframework.security.providers.dao.AbstractUserDetailsAuthenticationProvider.authenticate(AbstractUserDetailsAuthenticationProvider.java:121)

at org.codehaus.groovy.grails.plugins.springsecurity.GrailsDaoAuthenticationProvider.super$2$authenticate(GrailsDaoAuthenticationProvider.groovy)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90)

at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)

at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1058)

at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1070)

at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodOnSuperN(ScriptBytecodeAdapter.java:127)

at bookstore.MyAuthenticationService.authenticate(MyAuthenticationService.groovy:54)

at bookstore.MyAuthenticationService$$FastClassByCGLIB$$a172a394.invoke(<generated>)

at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)

at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:688)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)

at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)

at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:621)

at bookstore.MyAuthenticationService$$EnhancerByCGLIB$$a607df89.authenticate(<generated>)

at org.springframework.security.providers.ProviderManager.doAuthentication(ProviderManager.java:188)

at org.springframework.security.AbstractAuthenticationManager.authenticate(AbstractAuthenticationManager.java:46)

at org.springframework.security.ui.webapp.AuthenticationProcessingFilter.attemptAuthentication(AuthenticationProcessingFilter.java:82)

at org.springframework.security.ui.AbstractProcessingFilter.doFilterHttp(AbstractProcessingFilter.java:258)

at org.codehaus.groovy.grails.plugins.springsecurity.GrailsAuthenticationProcessingFilter.super$3$doFilterHttp(GrailsAuthenticationProcessingFilter.groovy)

at sun.reflect.GeneratedMethodAccessor223.invoke(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90)

at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)

at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1058)

at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1070)

at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodOnSuperN(ScriptBytecodeAdapter.java:127)

at org.codehaus.groovy.grails.plugins.springsecurity.GrailsAuthenticationProcessingFilter.doFilterHttp(GrailsAuthenticationProcessingFilter.groovy:56)

at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)

at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)

at org.springframework.security.ui.logout.LogoutFilter.doFilterHttp(LogoutFilter.java:89)

at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)

at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)

at org.springframework.security.context.HttpSessionContextIntegrationFilter.doFilterHttp(HttpSessionContextIntegrationFilter.java:235)

at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)

at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)

at org.springframework.security.util.FilterChainProxy.doFilter(FilterChainProxy.java:175)

at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)

at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

at org.codehaus.groovy.grails.web.servlet.mvc.GrailsWebRequestFilter.doFilterInternal(GrailsWebRequestFilter.java:69)

at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

at org.codehaus.groovy.grails.web.filters.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:65)

at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)

at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)

at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)

at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)

at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)

at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)

at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)

at java.lang.Thread.run(Thread.java:619)




Obrigado,
Tags: [LOGIN ]Erro na autenticação


0
Oi Igor, é um erro bastante esquisito. Eu sei que o Acegi costuma salvar informações no contexto de threads do Java.

Como não encontrei nada similar na Internet pra te ajudar, postei sua dúvida no twitter do Grails Brasil pra ver se alguém encontra uma resposta ok?

Vou ficar aqui acompanhando o post e sabendo de qualquer coisa posto aqui pra você.


0
Obrigado Henrique, se aparecer alguma resposta, por favor, coloque aqui.
Esse erro que postei, não acontece direto, demora para acontecer, mas acontece.



O que eu achei na internet foi:
Error 500:
Servlet: default
URI: /j_spring_security_check
Exception Message: Broken pipe
Caused by: Could not open Hibernate Session for transaction; nested exception is org.hibernate.TransactionException: JDBC begin failed:

E a resposta foi que pediram para alterar o DataSource.groovy, colocando a opção de "properties" seus paramentros:
production {
dataSource {
driverClassName = 'com.mysql.jdbc.Driver'
dialect = 'org.hibernate.dialect.MySQLDialect'
dbCreate = "update"
username = "someuser"
password = "somepassword"
url = "jdbc:mysql://${System.getProperty("dbHostName", "localhost")}/foobar"

properties
{
maxActive = 50
maxIdle = 25
minIdle =1
initialSize = 1
minEvictableIdleTimeMillis = 60000
timeBetweenEvictionRunsMillis = 60000
numTestsPerEvictionRun = 3
maxWait = 10000

testOnBorrow = true
testWhileIdle = true
testOnReturn = false

validationQuery = "SELECT 1"
}
}
}


Mas acho que não vai ajudar com o meu erro.

Valeu Henrique....
08/11/2011 11:03


0
Hmm... ai faz mais sentido hein?

O que ocorre é o seguinte: o Grails inclui uma sessão com o Hibernate em cada thread. Talvez uma conexão esteja morrendo e, com isto, você esteja obtendo estes erros, pois uma thread pode ficar ativa por muito tempo no servidor.

Eu já escrevi sobre isto no meu blog.
Da uma olhada neste link: http://www.itexto.net/devkico/?p=752


0
Opa, valeu.

Vou ler com mais calma o seu blog, mas dei uma olhada por cima e fala de conexão com MySql.

A aplicação grails aqui está rodando com oracle.

Desculpe minha ignorância, mas o que está no seu blog se aplica também ao oracle?

Por favor, aparecendo uma resposta no twiter, coloque aqui.

Abraços
08/11/2011 11:59


0
Oi Igor,

sim: é exatamente o mesmo raciocínio. O que costuma acontecer é o seguinte: uma conexão fica inativa por muito tempo e o servidor de banco de dados a fecha por inatividade.

Em seguida, a aplicação tenta usar a conexão achando que ainda é valida e topa com este problema.


0
Valeu Henrique,

Nesse parametro:
validationQuery = "/* ping */"

Posso colocar um simples
validationQuery = "Select 1 from dual" ?

Obrigado



08/11/2011 13:32


0
Oi Igor, sim, pode.
Pode colocar qualquer consulta que seja válida e enviada para o servidor.

O objetivo é apenas fazer um ping no servidor com uma consulta qualquer (de preferência, uma consulta que não seja muito complexa)


0
Valeu Henrique,

Coloquei os parametros no DataSource.groovy.

Abs
09/11/2011 16:39



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto