[Resolvido] Problemas com GlassFish V 3.0.1 - "IOP00810257: (MARSHAL) Could not load class

4 respostas
paulofafism

Pessoal estou fazendo alguns teste de migração utilizando o Glassfish V 3.0.1. Atualmente utilizo o GlassFish V 2.

Estou com problemas ao passar um objeto, por exemplo, OrgaoEmissor, para o parâmetro do método tipo Object. Veja o meu código abaixo.

[size=14]Classe Principal do Cliente[/size]
import br.cfg.ServiceLocator;
import br.cfg.ServiceLocatorException;
import br.dominio.OrgaoEmissorFacadeRemote;
import br.dominio.entidades.OrgaoEmissor;
import java.util.List;

/**
 *
 * @author Paulo
 */
public class Main {

    public static void main(String[] args) {

        try{

            System.out.println("CARREGANDO SISTEMA....");

            ServiceLocator service = ServiceLocator.getInstance();
            service.getInitialContext();

            OrgaoEmissorFacadeRemote orm = (OrgaoEmissorFacadeRemote)service.lookup("EJBOrgaoEmissor");          

            List<OrgaoEmissor> listagem = orm.findAll();

            for (OrgaoEmissor orgao : listagem){
                System.out.println("Orgão: " + orgao.getDescricao() );
            }

            OrgaoEmissor em = new OrgaoEmissor();
            em.setDescricao("Conselho Regional de Medicina");

            orm.insert(em); //Este método funciona perfeitamente, pois o parâmetro do método é do tipo OrgaoEmissor

            orm.manager(em); //Já este método não funciona. O parâmetro do método é do tipo Object

            System.out.println("OK");

        }catch(javax.ejb.EJBException ex){            
            ex.printStackTrace();          
        }
        catch(ServiceLocatorException ex){
            ex.printStackTrace();
        }

    }

}

Observe que no log console do GlassFish ele inicia normalmente.

A consulta é executada normalmente.

List<OrgaoEmissor> listagem = orm.findAll();

A inserção do método insert é feita normamente

OrgaoEmissor em = new OrgaoEmissor();
            em.setDescricao("Conselho Regional de Medicina");

            orm.insert(em); //Este método funciona perfeitamente, pois o parâmetro do método é do tipo OrgaoEmissor

Trecho de código onde ocorre o erro na classe Main

orm.manager(em); //Já este método não funciona. O parâmetro do método é do tipo Object
[size=14]Erro exibido no console do GlassFish[/size]
INFO: Portable JNDI names for EJB EJBManager : [java:global/Ponto/Ponto-ejb/EJBManager, java:global/Ponto/Ponto-ejb/EJBManager!br.dominio.ManagerRemote]
INFO: Glassfish-specific (Non-portable) JNDI names for EJB EJBManager : [EJBManager, EJBManager#br.dominio.ManagerRemote]
INFO: Portable JNDI names for EJB EJBOrgaoEmissor : [java:global/Ponto/Ponto-ejb/EJBOrgaoEmissor!br.dominio.OrgaoEmissorFacadeRemote, java:global/Ponto/Ponto-ejb/EJBOrgaoEmissor]
INFO: Glassfish-specific (Non-portable) JNDI names for EJB EJBOrgaoEmissor : [EJBOrgaoEmissor, EJBOrgaoEmissor#br.dominio.OrgaoEmissorFacadeRemote]
INFO: Loading application Ponto#Ponto-war.war at Ponto-war
INFO: ACDEPL103: Java Web Start services started for the app client Ponto/Ponto-app-client.jar (contextRoot: /Ponto/Ponto-app-client)
INFO: Ponto was successfully deployed in 8.007 milliseconds.
INFO: Hibernate: select orgaoemiss0_.CODORGEMISSOR as CODORGEM1_0_, orgaoemiss0_.DESCRICAO as DESCRICAO0_ from ORGAOEMISSOR orgaoemiss0_
INFO: Hibernate: insert into ORGAOEMISSOR (DESCRICAO) values (?)
WARNING: "IOP00810257: (MARSHAL) Could not load class br.dominio.entidades.OrgaoEmissor"
org.omg.CORBA.MARSHAL:   vmcid: SUN  minor code: 257 completed: Maybe
        at com.sun.corba.ee.impl.logging.ORBUtilSystemException.couldNotFindClass(ORBUtilSystemException.java:10144)
        at com.sun.corba.ee.impl.logging.ORBUtilSystemException.couldNotFindClass(ORBUtilSystemException.java:10159)
        at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.read_value(CDRInputStream_1_0.java:1163)
        at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.read_value(CDRInputStream_1_0.java:986)
        at com.sun.corba.ee.impl.encoding.CDRInputObject.read_value(CDRInputObject.java:646)
        at com.sun.corba.ee.impl.corba.TCUtility.unmarshalIn(TCUtility.java:286)
        at com.sun.corba.ee.impl.corba.AnyImpl.read_value(AnyImpl.java:611)
        at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.read_any(CDRInputStream_1_0.java:829)
        at com.sun.corba.ee.impl.encoding.CDRInputObject.read_any(CDRInputObject.java:583)
        at com.sun.corba.ee.impl.javax.rmi.CORBA.Util.readAny(Util.java:461)
        at com.sun.corba.ee.impl.presentation.rmi.DynamicMethodMarshallerImpl$10.read(DynamicMethodMarshallerImpl.java:292)
        at com.sun.corba.ee.impl.presentation.rmi.DynamicMethodMarshallerImpl.readArguments(DynamicMethodMarshallerImpl.java:453)
        at com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie._invoke(ReflectiveTie.java:174)
        at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatchToServant(CorbaServerRequestDispatcherImpl.java:682)
        at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatch(CorbaServerRequestDispatcherImpl.java:216)
        at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequestRequest(CorbaMessageMediatorImpl.java:1841)
        at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:1695)
        at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleInput(CorbaMessageMediatorImpl.java:1078)
        at com.sun.corba.ee.impl.protocol.giopmsgheaders.RequestMessage_1_2.callback(RequestMessage_1_2.java:221)
        at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:797)
        at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.dispatch(CorbaMessageMediatorImpl.java:561)
        at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.doWork(CorbaMessageMediatorImpl.java:2558)
        at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.performWork(ThreadPoolImpl.java:492)
        at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:528)

[size=14]Interfaces Remotas[/size]

package br.dominio;

import br.dominio.entidades.OrgaoEmissor;
import java.util.List;
import javax.ejb.Remote;

@Remote
public interface OrgaoEmissorFacadeRemote{

    public List<OrgaoEmissor> findAll();

    public boolean insert(OrgaoEmissor entity);

    public void manager(Object m);

    public int count();

}
package br.dominio;

import br.dominio.entidades.OrgaoEmissor;
import br.pontofacil.exceptions.DataAccessLayerException;
import java.util.List;
import javax.ejb.Remote;


/**
 *
 * A interface ManagerRemote é responsável por fornecer métodos básicos de persistência e
 * consultada de dados.
 *
 */
@Remote
public interface ManagerRemote<T>{

    /**
     * Permite inserir um novo objeto na base de dados
     *
     * @param entity
     * @return
     */
    public boolean insert(T entity);

    /**
     * Permite atualizar um objeto na base de dados
     * @param entity
     * @return
     */
    public boolean edit(T entity);

    /**
     * Permite remover um objeto da base de dados
     *
     * @param entity
     */
    public boolean remove(T entity);

    public List find(String sql);

    public List find(String sql, int maxResults, int firstResult);

    public List find(String sql, boolean all, int maxResults, int firstResult);  

}

[size=14]Classes que implementam interfaces remotas[/size]

package br.dominio;

import br.pontofacil.exceptions.DataAccessLayerException;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateful;
import javax.enterprise.context.SessionScoped;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.PersistenceException;
import javax.persistence.Query;

/**
 * Implementação básica da interface ManagerRemote para persistência de objetos utilizando o JPA
 *
 */
@EJB(name="manager", beanInterface=ManagerRemote.class)
@Stateful(name="EJBManager", mappedName = "EJBManager")
@SessionScoped
public class ManagerJPA<T> implements ManagerRemote<T>{

    @PersistenceContext(unitName = "Ponto-ejbPU")
    private EntityManager em;

    public ManagerJPA(){
    }

    @Override
    public boolean insert(T entity){

        try {           
            em.persist(entity);

            return true;

        }catch(PersistenceException ex){
            
            throw new DataAccessLayerException(ex.getMessage(), ex);

        } catch (Exception ex) {    
            
            throw new DataAccessLayerException(ex.getMessage(), ex);
        }

    }

    @Override
    public boolean edit(T entity){

        try {                         
            
            entity = em.merge(entity);
            return true;

        }catch(PersistenceException ex){

            throw new DataAccessLayerException(ex.getMessage(), ex);

        } catch (Exception ex) {

            throw new DataAccessLayerException(ex.getMessage(), ex);

        }        

    }

    @Override
    public boolean remove(T entity){      

        try {
            
            em.remove(em.merge(entity));
            return true;

        }catch(PersistenceException ex){

            throw new DataAccessLayerException(ex.getMessage(), ex);

        } catch (Exception ex) {

            throw new DataAccessLayerException(ex.getMessage(), ex);

        }

    }

    @Override
    public List find(String jpsql) {
        return find(jpsql, true, -1, -1);
    }

    @Override
    public List find(String jpsql, int maxResults, int firstResult) {
        return find(jpsql, false, maxResults, firstResult);
    }

    @Override
    public List find(String jpsql, boolean all, int maxResults, int firstResult) {        

        Query q = em.createQuery(jpsql);

        if (!all) {
            q.setMaxResults(maxResults);
            q.setFirstResult(firstResult);
        }

        return q.getResultList();

    }    


}
package br.dominio;

import br.dominio.entidades.OrgaoEmissor;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateful;
import javax.enterprise.context.SessionScoped;

/** 
 */
@EJB(name="orgaoEmissor", beanInterface=OrgaoEmissorFacadeRemote.class)
@Stateful(name="EJBOrgaoEmissor", mappedName = "EJBOrgaoEmissor")
@SessionScoped
public class OrgaoEmissorFacade implements OrgaoEmissorFacadeRemote{

    @EJB(name="manager")
    private ManagerRemote<OrgaoEmissor> manager;

    public OrgaoEmissorFacade(){    
    }
    
    public void setEmissorRepositorio(ManagerRemote<OrgaoEmissor> manager){
        this.manager = (ManagerRemote<OrgaoEmissor>)manager;
    }
    
    public ManagerRemote<OrgaoEmissor> getManagerRemote(){
        return (ManagerRemote<OrgaoEmissor>)manager;
    }

    /**
     * Retorna todos os contatos
     *
     * @return
     */
    @Override
    public List<OrgaoEmissor> findAll(){
        return (List<OrgaoEmissor>)manager.find("select object(o) from OrgaoEmissor o");
    }

    @Override
    public int count() {
        List list = manager.find("select count(o) from OrgaoEmissor as o");
        return Integer.parseInt(list.get(0).toString());
    }

    @Override
    public boolean insert(OrgaoEmissor entity){
        return manager.insert(entity);
    }
    
    public boolean edit(OrgaoEmissor entity){
        return manager.edit(entity);
    }
    
    public boolean remove(OrgaoEmissor entity){
        return manager.remove(entity);
    }
    
    public List find(String sql) {
        return manager.find(sql);
    }
    
    public List find(String sql, int maxResults, int firstResult) {
        return manager.find(sql, maxResults, firstResult);
    }
    
    public List find(String sql, boolean all, int maxResults, int firstResult) {
        return manager.find(sql, all, maxResults, firstResult);
    }

    @Override
    public void manager(Object m) {
        manager.insert(entity);
    }

}

[size=14]Classe Service Locator[/size]

package br.cfg;

import java.util.Properties;
import javax.naming.InitialContext;
import javax.naming.NamingException;

/**
 * Classe responsável por fazer as chamadas aos objetos remotos
 *
 */
public class ServiceLocator {

    private static ServiceLocator me;
    private InitialContext context = null;
    private Properties props;       

    private ServiceLocator() throws ServiceLocatorException {
        try {
            initialConfig();
            context = new InitialContext(props);
        }catch(NamingException ne) {
            throw new ServiceLocatorException(ne);
        }
    }

    public InitialContext getInitialContext(){
        return context;
    }

    public Object lookup(String name) throws ServiceLocatorException {
        try{
            Object obj = context.lookup(name);
            return obj;
        }catch(NamingException ex){
            throw new ServiceLocatorException(ex);
        }catch(Exception ex){
            throw new ServiceLocatorException(ex);
        }
    }

    public static ServiceLocator getInstance() throws ServiceLocatorException {
        if (me == null) {
            me = new ServiceLocator();
        }
        return me;
    }

    private void initialConfig(){
          props = new Properties();
          props.setProperty("java.naming.factory.initial" , "com.sun.enterprise.naming.SerialInitContextFactory");
          props.setProperty("java.naming.factory.url.pkgs" , "com.sun.enterprise.naming");
          props.setProperty("java.naming.factory.state" , "com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl");
          props.setProperty("org.omg.CORBA.ORBInitialHost" , "192.168.15.34");//192.168.1.3
          props.setProperty("org.omg.CORBA.ORBInitialPort" , "3700"); //1857 - 3700
    }

}
package br.cfg;

public class ServiceLocatorException extends RuntimeException{
    
    public ServiceLocatorException(Throwable t){
        super(t);
    }    

    public ServiceLocatorException(String msn){
        super(msn);
    }

    public ServiceLocatorException(String msn, Throwable t){
        super(msn, t);
    }
    
}

4 Respostas

Felagund
@Override  
     public void manager(Object m) {  
         manager.insert(entity);  
     }

Paulo, me diga, pq vc passa um Object m e insere o entity? Que diabos é esse entity que não achei em lugar nenhum? Olha a classe OrgaoEmissorFacade

paulofafism

A implementação do método deveria ficar conforme mostrado abaixo. E que eu alterei o contéudo deste método ao postar aqui no forúm :lol: . Este método foi criado apenas para testes. Pois como eu falei não consigo passar uma instância do tipo OrgaoEmissor para este método. Agora se o parâmetro do método for do tipo OrgaoEmissor ele funciona perfeitamente como acontece no método insert

@Override
    public void manager(Object m) {
       System.out.println("Teste de execução do método" + m);
     }

Na chamada deste método ele me retorna o erro abaixo, conforme coloquei no tópico

WARNING: "IOP00810257: (MARSHAL) Could not load class br.dominio.entidades.OrgaoEmissor" org.omg.CORBA.MARSHAL: vmcid: SUN minor code: 257 completed: Maybe at com.sun.corba.ee.impl.logging.ORBUtilSystemException.couldNotFindClass(ORBUtilSystemException.java:10144) at com.sun.corba.ee.impl.logging.ORBUtilSystemException.couldNotFindClass(ORBUtilSystemException.java:10159) at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.read_value(CDRInputStream_1_0.java:1163) at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.read_value(CDRInputStream_1_0.java:986) at com.sun.corba.ee.impl.encoding.CDRInputObject.read_value(CDRInputObject.java:646) at com.sun.corba.ee.impl.corba.TCUtility.unmarshalIn(TCUtility.java:286) at com.sun.corba.ee.impl.corba.AnyImpl.read_value(AnyImpl.java:611) at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.read_any(CDRInputStream_1_0.java:829) at com.sun.corba.ee.impl.encoding.CDRInputObject.read_any(CDRInputObject.java:583) at com.sun.corba.ee.impl.javax.rmi.CORBA.Util.readAny(Util.java:461) at com.sun.corba.ee.impl.presentation.rmi.DynamicMethodMarshallerImpl$10.read(DynamicMethodMarshallerImpl.java:292) at com.sun.corba.ee.impl.presentation.rmi.DynamicMethodMarshallerImpl.readArguments(DynamicMethodMarshallerImpl.java:453) at com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie._invoke(ReflectiveTie.java:174) at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatchToServant(CorbaServerRequestDispatcherImpl.java:682) at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatch(CorbaServerRequestDispatcherImpl.java:216) at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequestRequest(CorbaMessageMediatorImpl.java:1841) at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:1695) at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleInput(CorbaMessageMediatorImpl.java:1078) at com.sun.corba.ee.impl.protocol.giopmsgheaders.RequestMessage_1_2.callback(RequestMessage_1_2.java:221) at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:797) at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.dispatch(CorbaMessageMediatorImpl.java:561) at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.doWork(CorbaMessageMediatorImpl.java:2558) at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.performWork(ThreadPoolImpl.java:492) at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:528)

paulofafism

Um detalhe muito importante também. Migrei esta aplicação do tópico para o GlassFish V2, para testar se eu tinha feito algo de errado, mas não, nele funcionou perfeitamente.

paulofafism

Na verdade não foi bem resolvido, mas contornei o problema, pois estava querendo criar uma uníca classe Generica somente para fazer a inserção, exclusão e atualização. Eu não sei por que o Glassfish não aceitou que um objeto do tipo OrgaoEmissor fosse passado para o parâmetro do método do tipo Object, sendo assim erro ocasionando do post anterior.

@Override public void manager(Object m) { System.out.println("Teste de execução do método" + m); }

Funcionou apenas quando troquei o parâmetro do método para OrgaoEmissor

@Override public void manager(OrgaoEmissor m) { System.out.println("Teste de execução do método" + m); }

Criado 8 de julho de 2010
Ultima resposta 14 de jul. de 2010
Respostas 4
Participantes 2