ClassLoaders + Interfaces

1 resposta
P

Olá, pessoal.

Será que alguém pode me ajudar?

Preciso criar uma espécie de hot deploy e estou realizando alguns testes.

Eu consigo carregar a classe q está em um jar via classloader. Essa class implementa um interface que chamei de inter.
O problema é que após carregada a classe (carrego-a como Object), não consigo fazer cast dela para a Inter.

Existe alguma forma de fazer o cast?

Segue os códigos

Loader que funciona:

public static void main(String[] args) {
		try {
			while(true){
			Thread.sleep(5000);
			URL url = new URL("file:///c:/Dummy.jar");
			ClassLoader cl = new URLClassLoader(new URL[]{url},null);
			Object object=  cl.loadClass("Dummy").newInstance();
			Method m=object.getClass().getMethod("getString", null);
			System.out.println(m.invoke(object, null));
			System.out.println(object);
			}
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InstantiationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SecurityException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (NoSuchMethodException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

Classe que carrego

public class Dummy implements Inter{ public Dummy() { System.out.println("Dummy...1"); } public String getString(){ return "String123"; } }

Interface

public interface Inter { String getString(); }

Só recapitulando, a ideia é converter o dummy carregado para Inter

Obrigado!

1 Resposta

P

BOm pessoal, a soluçao pra isso é extender a classe classloader e sobreescrever o findClass abrindo arquivos de forma binaria.
Já conseguir resolver.

Criado 14 de dezembro de 2009
Ultima resposta 14 de dez. de 2009
Respostas 1
Participantes 1