Teste para verificar se a aplicação esteve fora do ar

Seguinte,
Alguém conhece ou já implementou algum algoritmo que verifica se uma aplicação j2ee usando Tomcat esteve fora do ar, caso estiver registra no banco de dados a hora e aplicação? eu sei que existe o http://www.lambdaprobe.org/ , e eu uso ele, porem a utilidade dele é para outra necessidade de monitoramento.

Ser alguém puder ajudar :slight_smile:
Sanches

Olá!

Se eu entendi bem, uma implementação da interface ServletContextListener resolve…

public class ListenerTest implements ServletContextListener {

	public void contextDestroyed(ServletContextEvent event) {
		//faz algo pq a aplicação vai, ou saiu do ar...
	}

	public void contextInitialized(ServletContextEvent event) {

	}

}

e no web.xml:

	<listener>
		<listener-class>
			br.com.aplic.ListenerTest
		</listener-class>
	</listener>

Entendi… porem so ficou uma dúvida, quando essa servleta será acionada? pois eu preciso de controlar isso automaticamente.
Grato

Seguindo este exemplo você terá que perguntar para aplicação se ela está ativa de tempos em tempos.

Nesse caso , você pode armazenar em log.

Mas e se o computador que estiver perguntado estiver sem energia eletrica ?

Tudo isso vai por agua abaixo.

[quote=kornkorn]Entendi… porem so ficou uma dúvida, quando essa servleta será acionada? pois eu preciso de controlar isso automaticamente.
Grato [/quote]

Não é uma classe servlet cara. É um listener! E vai se acionada automaticamente pelo container quando a aplicação iniciar ( executa método contextInitialized) ou cair (executa método contextDestroyed).

Agora, se o container cair, não sei qual seria o comportamento, só testando pra ter certeza…

Correto é uma listener , mas na queda de energia cairá tudo.

O que o pessoal tem feito, não sei se estamos respondendo o foco da pergunta deste tópico mas é assim:

1.Colocar o servidor que não pode cair em um nobreak ligado a rede com o sistema em funcionamento

  1. Coloca-se um computador ( 486, pentium 100) mais fraco , fora do nobreak e ligado na rede

  2. O servidor que está no nobreak fica perguntado se o computador que nao está no nobreak está no ar.
    caso não esteja , enviar um email para os administradores, grava log , e etc…
    caso durante um periodo de perguntas de 5 minutos ao servidor que nao está nao está no nobreak
    nao respondeu desliga stop nos sistemas , stop do servidor.

Eu implementei essa solução, e deu certo, eu tinha problema de queda de energia de madrugada e nao tinha ninguem para verificar o problema , fora o risco de danificar o servidor numa queda brusca , ou volta de energia com muita carga.

Bom no meu caso resolveu, nao sei se é o foco da pergunta, mas deixo um solução que funciona.

Marco Aurélio

Bacana a solução dos pc´s escutando um ao outro, eu gostaria de ver em código como ficou essa implementação, poderia me ajudar albama?

Eu não estou na empresa neste momento , mas basicamente o que vc precisa é ler o ip do computador que está fora do nobreak

Na web tem bastante rotina para ler ip, isso é 90% da solução.

Posteriormente vc pode implemtar qualquer coisa : Wireless por exemplo

Você fica pingando o outro servidor sem parar? caso de timeout a aplicação estará fora do ar?

Dentro do java de tempos em tempos vc pega o ip

caso o ip nao responda ( isso é uma exceçao ), aí vc coloca as regras

Olha só como estou pensando em montar a arquitetura de comunicação.

  • Contéudo do algoritmo:
    | pinga o servidor se for ok, então sai fora.
    | senão, salva no banco de dados a data_hora, host.
    | será gerado um TesteAplicacao.jar

Usando o TesteAplicacao.jar

  • Servidor Linux no crontab um script shell executando o TesteAplicacao.jar de 1 em 1 min.

Acho que assim ficaria bom.

Também funciona com shellScript , na verdade foi implementado assim no inicio, posteriormente para java.

blz. agradeço pela atenção :slight_smile: vou implementar e depois posto no grupo o funcionamento