Problemas com processamento batch + quartz
12/01/2015 09:46
0
Tenho uma rotina de importação de dados de um DataSource(Ds1 em Postgres e Ds2 em SQL Server) é um processo de certa forma lento com muitos objetos porém no objeto principal, quando composto eu dou um save(flush:true) que suponho que dê um flush na sessão, porém em um dado momento da conexão a mesma se fecha, não sei porque, segue o stacktrace, alguém pode me ajudar ?

11-01-2015 23:58:12,569 ERROR util.JDBCExceptionReporter - Invalid state, the Connection object is closed.
11-01-2015 23:58:12,594 ERROR listeners.ExceptionPrinterJobListener - Exception occurred in job: Importação dos dados do PSGA
org.quartz.JobExecutionException: org.springframework.jdbc.UncategorizedSQLException: Hibernate operation: could not execute query; uncategorized SQLException for SQL [select this_.TPLUMA_COD as TPLUMA1_150_0_, this_.SCAMPOS_COD as SCAMPOS2_150_0_, this_.TCOR_COD as TCOR3_150_0_, this_.TCOR_COD_VENDA as TCOR4_150_0_, this_.DATA as DATA150_0_, this_.SFAZENDA_COD as SFAZENDA6_150_0_, this_.TROMBLO_COD as TROMBLO7_150_0_, this_.PESO_BRUTO as PESO8_150_0_, this_.SPESSPROD_COD as SPESSPROD9_150_0_, this_.THPLUMA_COD as THPLUMA10_150_0_, this_.SSAFRA_COD as SSAFRA11_150_0_, this_.SSAFRAS_COD2 as SSAFRAS12_150_0_, this_.SITUACAO as SITUACAO150_0_, this_.TTIPO_COD as TTIPO14_150_0_, this_.SVARIED_COD as SVARIED15_150_0_ from TPLUMA this_ where this_.TPLUMA_COD=?]; SQL state [HY010]; error code [0]; Invalid state, the Connection object is closed.; nested exception is java.sql.SQLException: Invalid state, the Connection object is closed. [See nested exception: org.springframework.jdbc.UncategorizedSQLException: Hibernate operation: could not execute query; uncategorized SQLException for SQL [select this_.TPLUMA_COD as TPLUMA1_150_0_, this_.SCAMPOS_COD as SCAMPOS2_150_0_, this_.TCOR_COD as TCOR3_150_0_, this_.TCOR_COD_VENDA as TCOR4_150_0_, this_.DATA as DATA150_0_, this_.SFAZENDA_COD as SFAZENDA6_150_0_, this_.TROMBLO_COD as TROMBLO7_150_0_, this_.PESO_BRUTO as PESO8_150_0_, this_.SPESSPROD_COD as SPESSPROD9_150_0_, this_.THPLUMA_COD as THPLUMA10_150_0_, this_.SSAFRA_COD as SSAFRA11_150_0_, this_.SSAFRAS_COD2 as SSAFRAS12_150_0_, this_.SITUACAO as SITUACAO150_0_, this_.TTIPO_COD as TTIPO14_150_0_, this_.SVARIED_COD as SVARIED15_150_0_ from TPLUMA this_ where this_.TPLUMA_COD=?]; SQL state [HY010]; error code [0]; Invalid state, the Connection object is closed.; nested exception is java.sql.SQLException: Invalid state, the Connection object is closed.]
at grails.plugins.quartz.GrailsJobFactory$GrailsJob.execute(GrailsJobFactory.java:111)
at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)
Caused by: org.springframework.jdbc.UncategorizedSQLException: Hibernate operation: could not execute query; uncategorized SQLException for SQL [select this_.TPLUMA_COD as TPLUMA1_150_0_, this_.SCAMPOS_COD as SCAMPOS2_150_0_, this_.TCOR_COD as TCOR3_150_0_, this_.TCOR_COD_VENDA as TCOR4_150_0_, this_.DATA as DATA150_0_, this_.SFAZENDA_COD as SFAZENDA6_150_0_, this_.TROMBLO_COD as TROMBLO7_150_0_, this_.PESO_BRUTO as PESO8_150_0_, this_.SPESSPROD_COD as SPESSPROD9_150_0_, this_.THPLUMA_COD as THPLUMA10_150_0_, this_.SSAFRA_COD as SSAFRA11_150_0_, this_.SSAFRAS_COD2 as SSAFRAS12_150_0_, this_.SITUACAO as SITUACAO150_0_, this_.TTIPO_COD as TTIPO14_150_0_, this_.SVARIED_COD as SVARIED15_150_0_ from TPLUMA this_ where this_.TPLUMA_COD=?]; SQL state [HY010]; error code [0]; Invalid state, the Connection object is closed.; nested exception is java.sql.SQLException: Invalid state, the Connection object is closed.
at org.grails.datastore.gorm.GormStaticApi$_methodMissing_closure2.doCall(GormStaticApi.groovy:108)
at com.fazsaofrancisco.agritech.FardinhoService.importarDoPsga(FardinhoService.groovy:22)
at com.fazsaofrancisco.agritech.FardinhoService$_importarDoPsga_closure1.doCall(FardinhoService.groovy:14)
at com.fazsaofrancisco.agritech.FardinhoService.importarDoPsga(FardinhoService.groovy:13)
at com.fazsaofrancisco.agritech.RomaneioService$_importadoPsga_closure1.doCall(RomaneioService.groovy:39)
at com.fazsaofrancisco.agritech.RomaneioService.importadoPsga(RomaneioService.groovy:22)
at com.fazsaofrancisco.agritech.ContratoService.importarDoPsga(ContratoService.groovy:95)
at com.fazsaofrancisco.agritech.ContratoService$_importarDoPsga_closure2.doCall(ContratoService.groovy:36)
at com.fazsaofrancisco.agritech.ContratoService.importarDoPsga(ContratoService.groovy:34)
at com.fazsaofrancisco.agritech.ImportacaoPsgaJob$_execute_closure1.doCall(ImportacaoPsgaJob.groovy:28)
at org.grails.datastore.gorm.GormStaticApi.withNewTransaction(GormStaticApi.groovy:705)
at com.fazsaofrancisco.agritech.ImportacaoPsgaJob.execute(ImportacaoPsgaJob.groovy:22)
at grails.plugins.quartz.GrailsJobFactory$GrailsJob.execute(GrailsJobFactory.java:104)
Tags: batch quartz


0
Oi Pedro Henrique,

o problema está na configuraçãod o seu SGBD. Repare neste trecho do seu stacktrace: "Invalid state, the Connection object is closed."

Normalmente isto ocorre por que na configuração de timeout do seu SGBD você colocou um tempo menor do que o necessário para a execução do seu processamento em lote. Aí, quando o próximo comando vai ser enviado para o SGBD, este topa com uma conexão fechada.

Há duas maneiras de se resolver o problema.

* Alterando a configuração no próprio SGBD
* Lendo a documentação do driver JDBC sobre as opções que você pode passar para a URL de conexão. Em alguns casos você pode definir o timeout por lá, evitando assim que precise alterar configurações diretamente no SGBD.


0
Dica:

também verifique se sua aplicação está usando um pool de conexões. Se não estiver, aplique isto, pois o pool já valida se as conexões são ou não válidas.


0
Oi Kiko obrigado pela atenção, minha configuração está assim :


dataSource_ORIGEM {
dialect = org.hibernate.dialect.SQLServerDialect
driverClassName = 'net.sourceforge.jtds.jdbc.Driver'
username = 'sa'
password = 'senha'
url = 'jdbc:jTDS:sqlserver://10.0.0.100/BANCO'
pooled = true
properties {
maxActive = -1
minEvictableIdleTimeMillis=1800000
timeBetweenEvictionRunsMillis=1800000
numTestsPerEvictionRun=3
testOnBorrow=true
testWhileIdle=true
testOnReturn=true
validationQuery="SELECT 1"
}
}


Acreditava eu que seria o necessário para funcionar o pool, mas parece que não está correto.
12/01/2015 11:51


0
Como o processamento demora muito vou esperar até amanhã para ver se funcionou, mas lendo a documentação do Driver descobri um parâmetro chamado socketTimeout que vai na url, coloquei e marquei o tempo que excede em muito o do meu processamento, vamos ver, amanhã posto o resultado ;-) .
12/01/2015 12:23


0
Nada, acho que vou separar em duas etapas a importação (Work around = Arranjo Técnico, detesto falar gambiarra)
21/01/2015 11:34


0
Desculpem ressuscitar o tópico morto, mas descobri a tempos atrás e não postei, hoje mexendo no forum me lembrei e vou postar, o DBA tinha um serviço de backup que travava o banco SQL Server que eu acessava num horário que estava acessando por isso o erro de conexão, não era nada com o sistema não ;-)
19/02/2016 10:51



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