Erro ClassNotFound em Estrutura EAR com WAR e JARs

Olá Pessoal

Estou com um pequeno problema em uma aplicação J2EE e gostaria da ajuda:

Estrutura do EAR

  • Modulo.EAR
    • ModuloEJB.jar
    • ModuloWeb.war
    • ModuloLib.jar

O problema é o seguinte, no ModuloLib.jar existe a classe ConverterSimple.class, esta classe é usada pelo JSF contido no WAR para conversão simplificada de meus objetos.

Na classe ConverteSimple.class contém:

	@Override
	public Object getAsObject(FacesContext context, UIComponent component, String value) {
		if (value == null)
			return null;
		// Recupera o 'id' e o 'nome da classe' registrados através do método getAsString
		String[] key = value.split(":", 2);
		// Id da entidade
		String primaryKey = key[0];
		// Nome completo da classe da entidade
		String className = key[1];
		Class clazz = null;
		Object entity = null;
		//EntityManager em = null;		
		try {
			
			clazz = Class.forName(className); // Gera erro de ClassNotFound, mas o nome da Classe está correto e ela existe dentro da estrutura do WAR.
			entity = clazz.newInstance();
		} catch (NumberFormatException nfe) {
			nfe.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (clazz != null)
				System.out.println("CONVERTE SUCESS");
		}
		return entity;
	}

	@Override
	public String getAsString(FacesContext context, UIComponent component, Object value) {
		try { 
			// Executa o metodo 'getId' para recuperar o id da entidade e salva esta informação no formato:
			// nome_completo_da_classe:id_da_entidade
			Method m = value.getClass().getMethod("getId", (Class[]) null);
			return m.invoke(value, (Object[]) null) + ":" + value.getClass().getName();
		} catch (Exception ex) {
			System.out.println(ex.getMessage());
		}
		return null;
	}

O problema ocorre quando a chamada Class.forName(className) é executada e no nome da classe é de uma que está implementada dentro da estrutura do WAR.

Sempre imaginei que todas as classes contidas dentro de JARs e WAR numa estrutura EAR fossem visíveis. A chamada “value.getClass().getMethod(“getId”, (Class[]) null);” do método getAsString() é executado sem problema e o objeto referenciado por value é de instância de classes contidas no WAR.

t+

Humberto