Aplicação EJB

5 respostas
cristiano.andrade

Boa Tarde Pessoal!

Possuo várias aplicações Web aqui na empresa e que tem integração com o sistema DataSul(Banco Progress).

Hoje cada aplicação web tem sua camada de negócios que acessa o banco progress, pretendo unificar isso com o módulo EJB.

Ou seja todas minhas aplicações Web irão acessar esse módulo que terá as regras de negócios e as principais entidades utilizadas pelo banco.

Pois bem, criei esse módulo criei as entidades e os métodos de controle.

Agora estou com dificuldades em acessar o Módulo EJB.

Estou chamando o EJB da seguinte maneira:

package control;

import javax.ejb.EJB;
import javax.naming.InitialContext;

import br.com.gnt.business.GerenciarPedidoRemote;
import br.com.gnt.modelo.Pedido;

/**
 * Created by JBoss Tools
 */
public class MBPedido {

	@EJB(name = "ejb/GerenciarPedido")
	private GerenciarPedidoRemote gerenciarPedido;
    private static final Logger logger = Logger.getLogger(MBPedido.class.getName());

        public MBPedido(){
             try{
                 Pedido pedido = null;
	         pedido = lookup().findById(1);
	         logger.info("LookUp: " + pedido);
                 pedido = gerenciarPedido.findById(1);
	         logger.info("Annotation: " + pedido);
            }catch(Exception e){
                 logger.severe(e.getMessage());
            }
        }

	private GerenciarPedidoRemote lookup() {
		try {
			InitialContext ctx = new InitialContext();
			GerenciarPedidoRemote remote = (GerenciarPedidoRemote) ctx
					.lookup("ejb/GerenciarPedido");
			return remote;
		} catch (Exception e) {
			logger.severe(e.getMessage());
			return null;
		}
	}

}

Quando eu rodo a aplicação tenho o seguinte erro:

Exception sending context initialized event to listener instance of class com.sun.faces.config.ConfigureListener
java.lang.NoClassDefFoundError: Lbr/com/gnt/business/GerenciarPedidoRemote;
	at java.lang.Class.getDeclaredFields0(Native Method)

Até ai normal, ele não está achando a classe do EJB, ai adicionei o jar do EJB no projeto.

Ele encontra a classe normalmente, inicia o projeto, mas me dá o seguinte erro:

javax.faces.FacesException: javax.faces.FacesException: com.sun.enterprise.InjectionException: Exception attempting to inject Unresolved Ejb-Ref ejb/GerenciarPedido@jndi: br.com.gnt.business.GerenciarPedidoRemote@[email removido]@Session@null into class control.MBPedido
	at com.sun.faces.application.ApplicationAssociate.createAndMaybeStoreManagedBeans(ApplicationAssociate.java:556)
	at com.sun.faces.el.ManagedBeanELResolver.getValue(ManagedBeanELResolver.java:82)
	at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:143)
        ...
Caused by: javax.faces.FacesException: com.sun.enterprise.InjectionException: Exception attempting to inject Unresolved Ejb-Ref ejb/GerenciarPedido@jndi: br.com.gnt.business.GerenciarPedidoRemote@[email removido]@Session@null into control.MBPedido
	at com.sun.faces.config.ManagedBeanFactoryImpl.newInstance(ManagedBeanFactoryImpl.java:340)
	at com.sun.faces.application.ApplicationAssociate.createAndMaybeStoreManagedBeans(ApplicationAssociate.java:546)
	... 63 more
Caused by: com.sun.enterprise.InjectionException: Exception attempting to inject Unresolved Ejb-Ref ejb/GerenciarPedido@jndi: br.com.gnt.business.GerenciarPedidoRemote@[email removido]@Session@null into class control.MBPedido
	at com.sun.enterprise.util.InjectionManagerImpl._inject(InjectionManagerImpl.java:387)
	at com.sun.enterprise.util.InjectionManagerImpl.inject(InjectionManagerImpl.java:206)
	at com.sun.enterprise.util.InjectionManagerImpl.injectInstance(InjectionManagerImpl.java:127)
	at com.sun.faces.vendor.GlassFishInjectionProvider.inject(GlassFishInjectionProvider.java:79)
	at com.sun.faces.config.ManagedBeanFactoryImpl.newInstance(ManagedBeanFactoryImpl.java:298)
	... 64 more
Caused by: javax.naming.NameNotFoundException: br.com.gnt.business.GerenciarPedidoRemote#br.com.gnt.business.GerenciarPedidoRemote not found
	at com.sun.enterprise.naming.TransientContext.doLookup(TransientContext.java:216)
	at com.sun.enterprise.naming.TransientContext.lookup(TransientContext.java:188)
	at com.sun.enterprise.naming.SerialContextProviderImpl.lookup(SerialContextProviderImpl.java:74)
	at com.sun.enterprise.naming.LocalSerialContextProviderImpl.lookup(LocalSerialContextProviderImpl.java:111)
	at com.sun.enterprise.naming.SerialContext.lookup(SerialContext.java:398)

Alguem já passou por isso? Estou fazendo da forma correta ao adicionar o jar do EJB na aplicação?

ps:
[color=blue]1. Estou usando Glassfish v2
2. As aplicações estão rodando na mesma instância do Servidor de aplicação
3. Tentei tanto com injeção via annotation quanto via lookup.
4. Tentei adicionar as referências do EJB no web.xml e nada![/color]

Obrigado

[]s

5 Respostas

Giulliano

A única excessão que a chamada a um EJB pode lançar é NameNotFoundException…e foi isso o que aconteceu:

Caused by: javax.naming.NameNotFoundException: br.com.gnt.business.GerenciarPedidoRemote#br.com.gnt.business.GerenciarPedidoRemote not found

Sua configuração ainda não esta funcionando

cristiano.andrade

Eu olhei lá no JNDI Browsing e o EJB está correto.

ejb
ejb/mgmt
ejb/GerenciarPedido
ejb/GerenciarPedido#br.com.gnt.business.GerenciarPedidoRemote
ejb/GerenciarPedido__3_x_Internal_RemoteBusinessHome__
L

Só uma coisa, se você busca o seu EJB por “ejb/GerenciarPedido”, então a sua classe que implementa o EJB deveria estar anotado por:

@Stateless(mappedName="ejb/GerenciarPedido")

Está assim? Se já estiver e ainda não funcionar avisa aí.

cristiano.andrade

Já esta assim… e o erro continua :frowning:

[]s

R

Pessoal, estou com o mesmo problema. Tenho uma aplicação Enterprise que agrupa um módulo EJB e um módulo WebApplication. o Módulo EJB contém os ejbs e estavam funcionando perfeitamente. Por algum motivo que não sei qual é ele começou a apresentar esse problema. As configurações de bibliotecas e etc teoricamente estão corretas. Onde posso começar a fazer uma investigação mais detalhada? Nos ejbs eu não declaro o nome usado no lookup, deixo isso como responsabilidade do servidor.

Continuarei a procurar uma solução para isso e caso eu consiga antes da ajuda de vocês eu postarei minha solução aqui. Se precisarem de mais detalhes sobre o problema para poderem me ajudar é só apedir que eu farei outro post com o que necessitarem. Vlw!

Criado 5 de novembro de 2008
Ultima resposta 12 de jan. de 2009
Respostas 5
Participantes 4