[OC4J] Internal Server Error ao processar requisição demorada  XML
Índice dos Fóruns » Desenvolvimento Web
Autor Mensagem
bruno_cobra
JavaTeenager

Membro desde: 08/04/2007 23:59:14
Mensagens: 194
Localização: Lajeado, RS
Offline

Pessoal,

Possuo uma aplicação para geração de relatórios que está hospedada num servidor OC4J, da Oracle. Tudo funciona perfeitamente, à exceção de um relatório que demora em torno de 15 minutos para gerar (devido a sua complexidade e à quantidade de dados retornada pela consulta).

O problema com este relatório é que, após determinado tempo de processamento da requisição (em torno de 10 minutos), a página apresenta o erro "500 Internal Server Error". No entanto, o processo continua ativo e termina normalmente "por baixo dos panos". Eu posso afirmar isso pois a geração do relatório é feita através de um Servlet que grava um arquivo PDF no servidor. Ou seja, mesmo que ocorra o erro na página, o relatório acaba ficando salvo no servidor. Infelizmente, isso não me basta, pois não posso ter este erro.

Alguma ideia do que fazer? Já tentei configurar o ping como informa no seguinte link da documentação oficial (e também não funcionou): http://download.oracle.com/docs/cd/B14504_01/dl/release_notes/chap_oc4j.htm#BDCBEDDA

Qualquer ideia já será muito bem vinda. Obrigado.
Obs.: além do erro, não é gerado absolutamente em nenhum arquivo de log.

http://blog.brunozambiazi.com
-
[WWW]
garcia-jj
JWizard

Membro desde: 13/04/2009 22:11:50
Mensagens: 2715
Localização: Porto Alegre
Offline

Não dá para fazer esse relatório asincrono? Usando OC4J você pode configurar facilmente uma fila JMS e disparar uma mensagem para um EJB processar o relatório para você. Então você pode liberar a tela e fazer um refresh a cada X segundos para ver se o relatório está pronto. Assim que o relatório estiver pronto, você mostra um link para download.

Outra sugestão, se é um relatório muito grande, você não pode criar um job no oracle para rodar na madrugada e já deixar os dados pré-populados em uma tabela? Assim toda a madrugada ou de X em X tempos você atualiza a tabela.

Normalmente uso alguns desses artificios quando há consultas muito pesadas e que não valem a pena fazer online.

http://github.com/garcia-jj
Não respondo dúvidas via MP. Use o fórum.
bruno_cobra
JavaTeenager

Membro desde: 08/04/2007 23:59:14
Mensagens: 194
Localização: Lajeado, RS
Offline

garcia-jj, em primeiro lugar, obrigado pela resposta.

Sobre executar um job no Oracle, isso não funcionaria para o meu caso pois o relatório está disponível para mais de 100 usuários. É claro que nem todos utilizam, na verdade devem ser apenas 2 ou 3, no entanto, eu não tenho como prever quem e nem quando será feita a geração. Além disso, o relatório é populado de acordo com o usuário que gera e outros fatores que ele mesmo pode modificar apenas para gerar o relatório, entende? É uma situação bem complexa, não tem como prever.

Sobre JMS, para ser bem sincero, nunca utilizei. Gostei da ideia e é possível que funcionasse, no entanto, vou esperar um pouco mais para tentá-la pois acho um tanto complexa para a minha situação. Acredito que seja possível resolver meu problema através de alguma configuração do OC4J, mas infelizmente ainda não descobri qual.

De qualquer forma, obrigado pelas ideias.

This message was edited 1 time. Last update was at 14/07/2010 11:09:40


http://blog.brunozambiazi.com
-
[WWW]
bruno_cobra
JavaTeenager

Membro desde: 08/04/2007 23:59:14
Mensagens: 194
Localização: Lajeado, RS
Offline

Ninguém mais galera?

http://blog.brunozambiazi.com
-
[WWW]
luisweirich
Entusiasta Java
[Avatar]

Membro desde: 14/01/2009 16:21:39
Mensagens: 24
Offline

Oi Bruno,

Estou com o mesmo problema que você teve.

Pode postar como resolveu?

Luis Henrique Weirich de Matos
bruno_cobra
JavaTeenager

Membro desde: 08/04/2007 23:59:14
Mensagens: 194
Localização: Lajeado, RS
Offline

Boa tarde, Luís.

Consegui resolver o problema ao alterar o parâmetro de timeout (não lembro o nome exato dele) no arquivo $ORACLE_HOME/Apache/Apache/conf/http.conf.

O valor padrão era 300, meu problema ficou resolvido quando alterei para 1200. Lembrando que após esta alteração é necessário reiniciar o servidor.

Boa sorte! Abraço

http://blog.brunozambiazi.com
-
[WWW]
luisweirich
Entusiasta Java
[Avatar]

Membro desde: 14/01/2009 16:21:39
Mensagens: 24
Offline

Muito obrigado.

Foi de grande ajuda.

Luis Henrique Weirich de Matos
 
Índice dos Fóruns » Desenvolvimento Web
Ir para:   
Powered by JForum 2.1.8 © JForum Team