EJB: Funcionando no JBoss e erros no Glassfish

1 resposta
P

Fala feras :smiley:

Tenho uma aplicação que decidiram rodar no glassfish mas foi desenvolvida sobre jboss e agora que fiz o deploy no glassfish, a aplicacao nao consegue achar meus EJBs. Eu tive que mudar tudo que era @Local para @Remote e ainda continua com um novo erro:

E no Jboss tudo funciona corretamente, meus mapeamento foram feitos:

jboss.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jboss PUBLIC "-//JBoss//DTD JBOSS 4.0//EN"  "http://www.jboss.org/j2ee/dtd/jboss_4_0.dtd">
<jboss>
	<enterprise-beans>
		<session>
			<ejb-name>LoginServiceImpl</ejb-name>
			<jndi-name>ejb/LoginServiceImpl</jndi-name>
		</session>
....

Delegate.java

protected LoginService getLoginService(){
		ServiceLocator serviceLocator = ServiceLocatorImpl.getInstance();
		try {
			loginService = serviceLocator.lookup(LoginService.class);
		} catch (NamingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return loginService;
	}

ServiceLocatorImpl.java

public class ServiceLocatorImpl implements ServiceLocator{
	
    private static ServiceLocatorImpl service;
    private InitialContext jndiContext;
    private Map<String,Object> cache;
    private NameResolver nameResolver;
   
    private ServiceLocatorImpl() {
        try {           
            jndiContext = new InitialContext();
            final Map<String, Object> cRef = new HashMap<String, Object>();
            cache = Collections.synchronizedMap(cRef);           
            nameResolver = new JBossNameResolver();           
                       
        } catch (NamingException ne) {
            throw new RuntimeException(ne);
        }
    }
    
    public static ServiceLocator getInstance(){
        if (service == null) {
            service = new ServiceLocatorImpl();
        }
        return service;
    }
    
    @SuppressWarnings("unchecked")
	public <E> E lookup(String jndiName) throws NamingException {       
        E retorno = null; 
        Object objeto = cache.get(jndiName);
        if(objeto == null){
            objeto = lookupIntialContext(jndiName);
            if(objeto != null){
                cache.put(jndiName, objeto);
                retorno = (E) objeto;
            }
        }else{
            retorno = (E) objeto;
        }
        return retorno;
    }
    
    
    public <E> E lookup(Class<E> classe) throws NamingException {
        String jndiName = nameResolver.resolveNomeEjbRemoto(classe);       
        return lookup(jndiName);
       
    }
    
    @SuppressWarnings("unchecked")
	private <E> E lookupIntialContext(String jndiName) throws NamingException{
        return (E) jndiContext.lookup(jndiName);
    }

Nao sei mais o que fazer para isso funcionar no Glassfish. Alguem tem alguma ideia?

Valeu

1 Resposta

I

Em primeiro lugar o glassfish não vai interpretar o seu arquivo jboss.xml. No glassfish as configuraçoes ficam no ejb.xml e sun-ejb.xml. No Glassfish vc pode utilizar a anotação @EJB para injetar a depedência, no lugar de usar JNDI. Se vc usar as anotações disponíveis, praticamente não precisará configurar nada nos XMLs.

Criado 15 de julho de 2009
Ultima resposta 15 de jul. de 2009
Respostas 1
Participantes 2