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