Como carregar jar dinamicamente no jboss?

Blz, galera

Eu preciso fazer uma aplicação com componentes plugáveis, ou seja, o usuário carrega um jar e minha aplicação “roda” esse jar dentro da aplicação, algo semelhante a widgets. mas só semelhante. O que foi feito:

projeto1 é uma aplicação seam que recebe e roda os .jar. Possui a biblioteca que possui a interface.IHello. Essa biblioteca está dentro de WEB-INF/libs
projeto2 é uma aplicação javase teste. Possui a biblioteca que possui a interface.IHello, tem a classe Hello que a implementa. Ao final, é criado um projeto2.jar que contém somente o Hello.class, além do MANIFEST.

No servidor, tenho um método getJar. Passo o caminho do .jar, que no meu caso é o projeto2.jar e o carrego dinamicamente por meio de URLClassLoader e Class. O problema acontece no loadClass. Em tempo de compilação, não há erros. Porém, qdo ele tenta carregar a classe Hello, dá erro (ClassNotFoundException), pois ele não enxerga a interface IHello. Ele não enxerga pq ele procura essa interface dentro do jar, mas a interface tah no servidor, na aplicação. Se eu puser o IHello dentro do jar, ele carrega a classe e eu crio uma nova instância, porém a nova instância é um Object e qdo eu tento fazer o cast de Objetc pra IHello, dá um no ClassCastException.

A minha aplicação funciona somente numa versão semelhante pra desktop.

import interfaces.IHello;

public class Hello implements IHello {
	
	public void hello() {
		System.out.println("hello");
	}

}
package interfaces;

public interface IHello {
	
	void hello();

}
package enovar.service;

import interfaces.IHello;

import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.Enumeration;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;

import org.jboss.seam.annotations.Factory;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Out;

@Name("service")
public class Service {
	
	@Out
	private IHello alo;

	@Factory("alo")
	public void getJar() {
		String path = "C:/Users/ricky.paz/workspace/libs/designapi.jar";
		try {
			File file = new File(path);
			URLClassLoader clazzLoader = URLClassLoader.newInstance(new URL[]{file.toURI().toURL()});
			JarFile jarFile = new JarFile(file);
		
			Enumeration<JarEntry> entries = jarFile.entries();
			
			while (entries.hasMoreElements()) {
				JarEntry element = entries.nextElement();
				if (element.getName().endsWith(".class")) {
					try {
// se o jar tiver interfaces.IHello, passa do loadClass, mas dá problema no cast (ClassCastException), se não tiver, dá erro (ClassNotFoundException)
						Class c = clazzLoader.loadClass(element.getName().replaceAll(".class", "").replaceAll("/", ".")); 
				                Object o = c.newInstance();
				                this.alo = (IHello) o;
					} catch (Exception e) {
						e.printStackTrace();
					}
				}
			}
		} catch (IOException e1) {
			e1.printStackTrace();
		}

	}

}