Estou utilizando uma biblioteca (fechada) numa aplicação, e o animal que fez essa lib me botou um system.exit(0) num determinado local quando ocorre um erro…
Tem como dar um try{}catch{} ou algo assim nesse troço???
Cara containers que dependem da VM como TOMCAT e JBOSS bloqueiam isso …
agora como eu não sei …
Imagina um jaguru lá dá um Sistem.exit(0) em uma aplicação teste e tira todo o resto do ar …
hehe…
Pedrosa
Cara não existe a possibilidade de você descompilar essa lib e fazer o tratamento ?, se o código não estiver ofuscado pode ser uma saída.
KWill
Acho que os containers tipo Tomcat e JBoss bloqueiam System.exit(int status) via SecurityManager.
Não estou muito certo quanto a isso, mas se for isso mesmo, você pode extender a classe SecurityManager e bloquear System.exit(int status) com a sua implementação de checkExit(int status).
Também será necessário usar System.setSecurityManager(SecurityManager s) para fazer com que a jvm use o seu SecurityManager.
Inté.
LPJava
segundo os conceitos basico que tenho com java… a kathy disse que a jvm eh encerrada qdo encontra uma desse tipo
nbluis
Cara, se isso fosse verdade, imagina a falta de segurança ao utilizarmos um servidor de aplicação rodando encima da mesma instancia de VM de sua aplicação.
Qualquer System.exit(0), faria com que o servidor inteiro fosse pro espaço.
Cara, se isso fosse verdade, imagina a falta de segurança ao utilizarmos um servidor de aplicação rodando encima da mesma instancia de VM de sua aplicação.
Qualquer System.exit(0), faria com que o servidor inteiro fosse pro espaço.
Basicamente, abra o .class, dê uma lida ache a linha que faz o system.exit() e seja feliz. Btw, que diacho de lib é essa que chama System.exit()? Não tem alguma versão que alguém sem problemas mentais já tenha metido a mão e tiro fora essa bizarrice?
Sami_Koivu
Bom, o lance de SecurityManager é legal. Deve ser a opção menos intrusiva.
Quanto aos meios mais intrusivos (que possivelmente violam a licença da tal biblioteca fechada), mesmo se for ofuscado, dá para remover uma chamada pro System.exit() facilmente com reJ. Se não conseguir, eu mesmo posso fazer isso pra você.
bcartaxo
Se não me engano o System.exit() mata só o processo, não a JVM.
nbluis
Mata a instância da VM.
Juntamente com tudo que está carregado nela.
velo
KWill:
Acho que os containers tipo Tomcat e JBoss bloqueiam System.exit(int status) via SecurityManager.
Rodei essa maldita lib dentro do tomcat…
Morre tudo!!!
O q eu estou fazendo é chamar um processo Runtime.getRuntime() e executando fora.
Não é bonito, não é legal, mas pelo menos funca.
VELO
A
andredecotia
Por que que eu iria querer rodar um System.exit(0)?
abraço,
André AS
gomesrod
KWill:
Acho que os containers tipo Tomcat e JBoss bloqueiam System.exit(int status) via SecurityManager.
Não estou muito certo quanto a isso, mas se for isso mesmo, você pode extender a classe SecurityManager (…)
O caminho é esse, mas não é necessário criar um Security Manager, basta modificar as políticas de segurança da sua JVM para que a operação não seja permitida. O Security Manager normal passará a lançar exceção no checkExit().
Velo,
Vou ver se acho algum material sobre como fazer, não tenho de cabeça pois não é todo dia que se mexe com esse tipo de coisa… mas se quiser adiantar o serviço pesquise sobre JAAS.
maior_abandonado
gomesrod:
KWill:
Acho que os containers tipo Tomcat e JBoss bloqueiam System.exit(int status) via SecurityManager.
Não estou muito certo quanto a isso, mas se for isso mesmo, você pode extender a classe SecurityManager (…)
O caminho é esse, mas não é necessário criar um Security Manager, basta modificar as políticas de segurança da sua JVM para que a operação não seja permitida. O Security Manager normal passará a lançar exceção no checkExit().
Velo,
Vou ver se acho algum material sobre como fazer, não tenho de cabeça pois não é todo dia que se mexe com esse tipo de coisa… mas se quiser adiantar o serviço pesquise sobre JAAS.
cara o tópico é de 3 anos e meio atras… provavelmente ele não está mais resolvendo esse problema…
quanto a pergunta do andredecotia, isso serve para finalizar o programa, se você quer finalizar usa isso… claro que usar isso em uma biblioteca é um tanto ridiculo ou absurdo ao menos na minha opinião…
gomesrod
Droga, eu não tinha visto a data hehe
Mais uma pessoa enganada pela ressuscitação de tópicos.
(Pior que eu estava até dando umas testadas nisso pra tentar ajudar o cara…)
matheuslmota
Ei gomesrod, mas se conseguir alguma solução posta aí cara
Mesmo que o tópico seja antigo, eu acho que se alguem sabe a resposta é bom postar, pra quando alguem for procurar já ter a solução.