Pergunta

Eu bati a este comportamento desagradável em JBoss 4.2 em QA, e eu quero cortar o mal pela raiz, antes de entrar em produção e encontrar algum outro caso esquina.

A jsp calles um método que tinha a seguinte assinatura:

 public void methodName(String arg)

Esta foi alterado para:

 public void methodName(String arg, Object... args)
JSP

A pré-existente chamado este método via:

 methodName("param");

Na implantação do código modificado, JBoss não recompilar o JSP e isso causou uma falha no controle de qualidade. Adicionando um comentário bobo para o jsp corrigido o problema (JBoss reconhecido que o JSP alterar e recompilar-lo).

Existe uma configuração no JBoss à força recompilação de JSPs no reinício?

EDIT: Para esclarecer alguns pontos da resposta, a configuração é que os JSPs são parte de uma guerra que é parte de uma orelha. O ouvido possui todas as classes em que, em um frasco.

Em relação ao desejo de pré-compilação, se o sistema não pensa que o jsp precisa de compilação, irá pré-compilação força recompilação? Não parece assim. O erro aqui não é um erro compliation, é um erro de invocação de método por causa da "transformados" (no nível de código byte, não realmente no nível de código) assinatura do método.

Adenda: Note que nós experiente em produção recentemente que mesmo com a bandeira do resposta aceita definir os JSPs não recompilação, embora o JSP fez em mudança fato. Erro grave lá, mas independentemente disso, JBoss foi desligado normalmente. Neste ponto, está começando a ser uma versão antiga do JBoss, mas se você ainda estiver usando, apagar o conteúdo do trabalho e tmp diretórios é a única maneira de ter certeza.

Eu não estou mudando a resposta aceita simplesmente porque ele realmente chega ao ponto de que a questão estava procurando. JBoss erros são uma espécie de uma questão separada.

Foi útil?

Solução

Se os JSPs são parte de uma guerra que é parte de um EAR que está sendo implantado como uma jarra, então eu não estou claro por que seus JSPs não estão sendo recompilados. Não as JSPs no arquivo de guerra têm timestamps mais recentes do que a sua JBoss-compilados arquivos de classe a partir do último implantar? Se não, você não pode tocar as JSPs como parte da construção do WAR / EAR antes de implantar. [Estou me referindo ao uso do comando Unix "toque", e não manualmente tocando cada arquivo JSP.]

Como alternativa, a configuração DeleteWorkDirOnContextDestroy em $ JBOSS / server / default / deploy / jboss-web.deployer / META-INF / jboss-service.xml pode ser o que você está procurando. É falso por padrão, mas defini-lo como verdadeiro pode ser o que você precisa. Eu acho que isso deve excluir arquivos de classe dos JSPs em redeploy para que eles se recriado após o primeiro acesso de cada JSP.

https://jira.jboss.org/jira/browse/JBAS-3358 para mais informações.

Outras dicas

Eu não sei de uma definição, mas apagar o arquivo de classe Java gerada no diretório de trabalho da sua instância JBoss fará com que o JSP ser recompilados na próxima vez que for chamado.

Você coudl altere scripts do JBoss de arranque para excluir explicitamente o "tmp" e / ou diretórios "trabalho", onde os JSPs compilados são armazenados. JBoss, então, não têm escolha senão para recompilar todos eles.

Não sutil, mas iria fazer o trabalho.

Uma opção para você seria pré-compilar todos os seus jsp é em tempo de compilação. Esta bandeira seria rapidamente quaisquer erros de compilação.

Você também pode fazer isso em produção - acelerar primeiro acesso, mas tenho a sensação de que você quer isso mais de uma etapa de QA que qualquer outra coisa. Se assim for, você pode adicionar a etapa de pré-compilação para a sua fase de testes em sua ferramenta de construção de escolha - e, assim, o seu ambiente de CI. Isso proporcionaria garantia de que JSP que não compilam não vai fazê-lo fora de teste.

Veja este para obter detalhes sobre a execução de uma tarefa de pré-compilação:

configuração Jboss Jasper

Espero que isso ajude.

Alguns recipientes JSP (como por secção 8.4.2 da especificação JSP 1,2) suportam a capacidade de pré-compilação de uma página JSP.

Para pré-compilar uma página JSP, acessar a página com uma string de consulta de? Jsp_precompile

http://hostname.com/mywebapp/mypage.jsp?jsp_precompile

A página JSP não será executado. Se os suportes de contentores pré-compilação, a página JSP será compilado se necessário.

Veja também http://www.rgagnon.com/javadetails/java-0414 .html

Pablojim está no caminho certo. Você só precisa de mais algumas informações para obter uma visão completa do que está acontecendo. Aqui está como eu o entendo.

Em prod, você mudou um jsp que requer outros jsps ser recompilados. No fim de que para ser recompilados um de 2 coisas devem acontecer

  1. A versão compilada das necessidades JSP a ser apagada.
  2. O jsp em si precisa ser modificado (ou mesmo se ele é "tocado" - data de modificação é atualizado)

Se você ainda precisa verificar se todos os seus jsps trabalhar, todos eles vão necessidade de ser pré-compilado usando uma tarefa formiga. Isso também permite que você implantar o arquivo de guerra com os jsps pré-compilados no arquivo de guerra. Isso deve resolver o seu problema.

Se os arquivos não são implantados em um arquivo de guerra, mas em um formato explodido, você deve considerar seriamente empacotar seu aplicativo web em um arquivo de guerra para a implantação. Isto o torna um bom pacote para implantar entre os ambientes.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top