Problema: Com uma aplicação rodando, e é necessário atualizar um arquivo .jar, a aplicação não é capaz de reconhecer se o jar foi alterado e continua usando as classes do jar que foram chamadas anterior mente pelo ClassLoader.
Pergunta: Como faço para detectar que o jar foi alterado e chamar pelo ClassLoader?!?!
Sei que o tomcat tem algo assim… alguém tem idéia de como isso acontece?? dicas?
O problema é que eu quero atualizar meu arquivo jar porém o sistema operacional trava o arquivo e não deixa eu mudar ele caso alguém esteja utilizando…
Eu quero atualizar o arquivo jar sem ter que parar o sistema…
No tomcat ele permite você sobrescrever o arquivo…
Alguém sabe como o tomcat faz para permitir que alguém possa sobrescrever este arquivo?
Fala Lipe! Entendi(acho) rs* o porque da recomendação do livro…
O ponto que eu cheguei até agora foi o seguinte:
Achei uma classe do Tomcat que implementa ClassLoader, aparentemente é o que eu preciso :)…
E por reflexão eu chamo o main da classe que eu quero deixar com um classloader dinamico…
A reflexção ficou assim:
Class loadedClass = cl.loadClass("br.com.ymf.business.Business");
Object object = loadedClass.newInstance();
Method method = loadedClass.getMethod("main", new Class[] { String[].class });
method.invoke(object, new Object[] { new String[] {"vai carai!!!"} });
Se rodo ele no eclipse com o classpath configurado ele funciona beleza…obvio…
Agora se eu rodo ele no prompt de comando ele dá uma exeption…
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at BootStrap.load(BootStrap.java:103)
at BootStrap$1.actionPerformed(BootStrap.java:56)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.lang.NoClassDefFoundError: br/com/ymf/Classe
at br.com.ymf.business.Business.main(Business.java:24)
... 29 more
Dennys, como foi a solução que você adotou para o problema?
Estou fazendo um código aqui onde uso o ClassLoader, até então é bem simples e usei certas linhas que você citou neste tópico. Eu compilo sem problemas, até executo pelo JCreator, porém quando vou usar o método em um arquivo jsp, nas linhas de código com o ClassLoader, ele perde o rumo da miada me retornando um java.lang.ClassNotFoundException.
Assim, queria saber a solução que você utilizou, pois quem sabe poderá ser a minha também!
[quote=O_SANTO_]Dennys, como foi a solução que você adotou para o problema?
Estou fazendo um código aqui onde uso o ClassLoader, até então é bem simples e usei certas linhas que você citou neste tópico. Eu compilo sem problemas, até executo pelo JCreator, porém quando vou usar o método em um arquivo jsp, nas linhas de código com o ClassLoader, ele perde o rumo da miada me retornando um java.lang.ClassNotFoundException.
Assim, queria saber a solução que você utilizou, pois quem sabe poderá ser a minha também!
Desde já agradeço a compreensão.
C’ya[/quote]
Em que ambiente você vai usar o classloader?!
Não entendi o que você quer com ClassLoarder e JSP…