1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

StuckThreadMaxTime ao chamar stored procedure

Preciso executar uma stored procedure via java. Ela é bem pesada, e pode demorar mais de uma hora para executar. O problema é que como a aplicação fica parada após a chamada esperando executar, está estourando o timeout da thread, conforme erro abaixo. Existe alguma forma de eu chamar uma SP sem precisar esperar ela executar. Ou então alguma forma de via código ignorar o timeout de thread definido pelo servidor para essa execução em específico? O servidor que está sendo utilizado é o weblogic 12.1.1. O código de chamada da SP segue abaixo:

Erro:

<Oct 26, 2015 5:11:35 PM BRST> <Error> <WebLogicServer> <BEA-000337> <[STUCK] ExecuteThread: '24' for queue: 'weblogic.kernel.Default (self-tuning)' has been busy for "695" seconds working on the request "Workmanager: default, Version: 0, Scheduled=false, Started=true, Started time: 695341 ms
", which is more than the configured time (StuckThreadMaxTime) of "600" seconds in "server-failure-trigger". Stack trace:
        java.net.SocketInputStream.socketRead0(Native Method)
        java.net.SocketInputStream.read(SocketInputStream.java:164)
        java.net.SocketInputStream.read(SocketInputStream.java:134)
        oracle.net.ns.Packet.receive(Packet.java:300)
        oracle.net.ns.DataPacket.receive(DataPacket.java:106)
        oracle.net.ns.NetInputStream.getNextPacket(NetInputStream.java:315)
        oracle.net.ns.NetInputStream.read(NetInputStream.java:260)
        oracle.net.ns.NetInputStream.read(NetInputStream.java:185)
        oracle.net.ns.NetInputStream.read(NetInputStream.java:102)
        oracle.jdbc.driver.T4CSocketInputStreamWrapper.readNextPacket(T4CSocketInputStreamWrapper.java:124)
        oracle.jdbc.driver.T4CSocketInputStreamWrapper.read(T4CSocketInputStreamWrapper.java:80)
        oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1137)
        oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:290)
        oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:192)
        oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:531)
        oracle.jdbc.driver.T4CCallableStatement.doOall8(T4CCallableStatement.java:204)
        oracle.jdbc.driver.T4CCallableStatement.executeForRows(T4CCallableStatement.java:1041)
        oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1329)
        oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3594)
        oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3675)
        oracle.jdbc.driver.OracleCallableStatement.executeUpdate(OracleCallableStatement.java:4780)
        oracle.jdbc.driver.OraclePreparedStatementWrapper.executeUpdate(OraclePreparedStatementWrapper.java:1354)
        weblogic.jdbc.wrapper.PreparedStatement.executeUpdate(PreparedStatement.java:174)
        br.com.auttar.infoGerencial.dao.impl.PainelGerencialDaoBean.historizaMovimento(PainelGerencialDaoBean.java:78)
        br.com.auttar.infoGerencial.dao.impl.PainelGerencialDaoBean_buw57i_PainelGerencialDaoRemoteImpl.__WL_invoke(Unknown Source)
        weblogic.ejb.container.internal.SessionRemoteMethodInvoker.invoke(SessionRemoteMethodInvoker.java:34)
        br.com.auttar.infoGerencial.dao.impl.PainelGerencialDaoBean_buw57i_PainelGerencialDaoRemoteImpl.historizaMovimento(Unknown Source)
        br.com.auttar.infoGerencial.dao.impl.PainelGerencialDaoBean_buw57i_PainelGerencialDaoRemoteImpl_WLSkel.invoke(Unknown Source)
        weblogic.rmi.internal.ServerRequest.sendReceive(ServerRequest.java:202)
        weblogic.rmi.cluster.ClusterableRemoteRef.invoke(ClusterableRemoteRef.java:463)
        weblogic.rmi.cluster.ClusterableRemoteRef.invoke(ClusterableRemoteRef.java:274)
        br.com.auttar.infoGerencial.dao.impl.PainelGerencialDaoBean_buw57i_PainelGerencialDaoRemoteImpl_12120_WLStub.historizaMovimento(Unknown Source)
        sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:95)
        sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:56)
        java.lang.reflect.Method.invoke(Method.java:620)
        weblogic.ejb.container.internal.RemoteBusinessIntfProxy.invoke(RemoteBusinessIntfProxy.java:84)
        com.sun.proxy.$Proxy1184.historizaMovimento(Unknown Source)
        br.com.auttar.infoGerencial.service.impl.PainelGerencialServiceBean.historizaMovimento(PainelGerencialServiceBean.java:31)
        br.com.auttar.infoGerencial.service.impl.PainelGerencialServiceBean_st4ey0_PainelGerencialServiceRemoteImpl.__WL_invoke(Unknown Source)
        weblogic.ejb.container.internal.SessionRemoteMethodInvoker.invoke(SessionRemoteMethodInvoker.java:34)
        br.com.auttar.infoGerencial.service.impl.PainelGerencialServiceBean_st4ey0_PainelGerencialServiceRemoteImpl.historizaMovimento(Unknown Source)
        br.com.auttar.infoGerencial.service.impl.PainelGerencialServiceBean_st4ey0_PainelGerencialServiceRemoteImpl_WLSkel.invoke(Unknown Source)
        weblogic.rmi.internal.ServerRequest.sendReceive(ServerRequest.java:202)
        weblogic.rmi.cluster.ClusterableRemoteRef.invoke(ClusterableRemoteRef.java:463)
        weblogic.rmi.cluster.ClusterableRemoteRef.invoke(ClusterableRemoteRef.java:274)
        br.com.auttar.infoGerencial.service.impl.PainelGerencialServiceBean_st4ey0_PainelGerencialServiceRemoteImpl_12120_WLStub.historizaMovimento(Unknown Source)
        sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:95)
        sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:56)
        java.lang.reflect.Method.invoke(Method.java:620)
        weblogic.ejb.container.internal.RemoteBusinessIntfProxy.invoke(RemoteBusinessIntfProxy.java:84)
        com.sun.proxy.$Proxy1183.historizaMovimento(Unknown Source)
        br.com.auttar.infoGerencialWeb.scheduler.PainelGerencialScheduler.gerarDadosPainelGerencial(PainelGerencialScheduler.java:138)
        br.com.auttar.infoGerencialWeb.scheduler.PainelGerencialScheduler.handleTimer(PainelGerencialScheduler.java:79)
        sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:95)
        sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:56)
        java.lang.reflect.Method.invoke(Method.java:620)
        com.oracle.pitchfork.inject.Jsr250Metadata.invokeTimeoutMethodInternal(Jsr250Metadata.java:381)
        com.oracle.pitchfork.intercept.LifecycleEventCallbackInvocationContext.proceed(LifecycleEventCallbackInvocationContext.java:124)
        com.oracle.pitchfork.intercept.LifecycleEventCallbackInvocationContext.proceed(LifecycleEventCallbackInvocationContext.java:150)
        com.oracle.pitchfork.intercept.InterceptionMetadata.invokeTimeoutMethod(InterceptionMetadata.java:554)
        weblogic.ejb.container.injection.EjbComponentCreatorImpl.invokeTimer(EjbComponentCreatorImpl.java:96)
        weblogic.ejb.container.manager.BaseEJBManager.invokeTimeoutMethod(BaseEJBManager.java:191)
        weblogic.ejb.container.timer.TimerImpl.timerExpired(TimerImpl.java:404)
        weblogic.timers.internal.TimerImpl.run(TimerImpl.java:304)
        weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:550)
        weblogic.work.ExecuteThread.execute(ExecuteThread.java:295)
        weblogic.work.ExecuteThread.run(ExecuteThread.java:254)

Código que é executado:


@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
public void historizaMovimento(String email_para, String email_de, String assunto, String msgTexto, String msgHtml, String smtpHost, String smtpPort) throws MetaException {
    Connection cc = ((SessionImpl) emHistorizacao.getDelegate()).connection();
    CallableStatement cst;

    try {
        cst = cc.prepareCall("{call PKG_HISTORIZA_MOVIMENTO.SP_HISTORIZA_MOVIMENTO(?,?,?,?,?,?,?)}");

        // Parametros de Entrada
        cst.setString(1, email_para);
        cst.setString(2, email_de);
        cst.setString(3, assunto);
        cst.setString(4, msgTexto);
        cst.setString(5, msgHtml);
        cst.setString(6, smtpHost);
        cst.setString(7, smtpPort);

        cst.executeUpdate();

        if(cst != null){
            cst.close();
        }

        if(cc != null){
            cc.close();
        }

    } catch (SQLException e) {
         throw new MetaException(e, "Erro ao executar PKG_HISTORIZA_MOVIMENTO.SP_HISTORIZA_MOVIMENTO");
    } 

}
  • Por que sua aplicação precisa esperar a procedure terminar? Ela não pode apenas consultar o resultado?

    TerraSkilll   27 de out de 2015
  • A procedure é uma historização de dados. Ela pega dados de varias tabelas e agrupa em uma outra para ser utilizado em outro momento. A minha aplicação não precisa esperar a execução da procedure, e não deveria. É justamente isso que eu gostaria de fazer, não ter que esperar ela terminar, apenas chama-la e deixar ela rodando.

    drrockenbach   27 de out de 2015
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags java threads stored-procedures ou faça a sua própria pergunta.