Reiniciar servidor TOMCAT via aplicação

Caros,

Como reiniciar o servidor tomcat via aplicação rodando dentro do tomcat?

Alguma sugestão.

Obrigado.

Tranquilo!

Cara assim, até onde vai meu conhecimento, isso não é possível de se implementar, acredito que seja até por questões de segurança.

Valew!

Ola, é possivel sim utilizando JMX é totalmente viavel.

Vou fazer um howto aqui para vc, eu rodei em um tomcat 6 no ubunto.

  1. Coloque esta linha no arquivo catalina.sh
CATALINA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8050 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"

Com isto vc vai ativar o JMX do seu tomcat.

Va no seu console e digite: jconsole (aqui é para vc aprender)

No jconsole digite a url para conexão remota:

service:jmx:rmi:///jndi/rmi://localhost:8050/jmxrmi

Navegue no jconsole pelos menus Catalina\Engine (imagem em anexo)

Va em operation
Click em stop

Pronto vc acabou de baixar seu server via JMX

Facil não é?

Com isso o que vc deve aprender: existe um MBean chamado Engine dentro do pacote catalina, que tem operações de start\stop para controlar o tomcat.

Agora vc deve acessa-lo via código java

JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://:8050/jmxrmi");
JMXConnector jmxc = JMXConnectorFactory.connect(url, null);

MBeanServerConnection mbsc = jmxc.getMBeanServerConnection();
ObjectName mbeanName = new ObjectName("Catalina:type=Engine");

Engine mbeanProxy =
            JMX.newMBeanProxy(mbsc, mbeanName, Engine.class, true);

mbeamProxy.stop();


claro que isto é so uma poc da vida vc não deve colocar isto em produção

-Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false

O código que postei acima só vai rodar em java6 a crição de proxy (abaixo) não existe no java5

JMX.newMBeanProxy(mbsc, mbeanName, Engine.class, true);

So um detalhe isto não vai reiniciar o server todo somente o enginne, se vc pode matar o server chamando a MBean Server metodo await só que ai não da para subir por JMX rsrs, prq vc precisa fazer isto??

Olá,

Essa solução não serve pois preciso parar tudo e voltar, stop e start ou restart.

Pensei em usar o Wrapper http://yajsw.sourceforge.net/ mas acredito ser canhão para matar mosquito.

Outra solução que pensei e em fazer um Runtime.getRuntime().exec(“java -jar /opt/Tomcat/bin/bootstrap.jar stop”);

O problema é como fazer o start.

Alguma sugestão, obrigado.

Alguma ideia? Seria impossível?

Impossível… nunca… rsrs

Meu caro já resolveu seu problema ?

Realmente por JMX do Toncat não rola. Pois o JMX é levantado pelo Toncat ou seja, quando o Toncat parar sua comunicação também termina.

Já pensou em criar um aplicativo para ficar escutando suas chamadas ???
Se vc conseguir fazer isso o resto é mole. Só identificar o sistema operacional e executar o comando de start, stop dos serviços.