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
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);
}
}