EJB lança NoResultException, mas qdo chega em outro EJB vem como EJBException[resolvido]

2 respostas
E

Estou usando um session ejb(facade) para regras e outro session para dao/eao para fazer questoes de acesso a banco.
Quando nao existe um registro no banco esta chegando no session facade um EJBException e nao um noresultexception. Dentro do EAO é gerada
uma noresultexception corretamente, mas qdo lança para capturar no session vem como EJBException.
É correto esse comportamento ?

@stateless
class ClasseEAO {

@persistecontext
EntityManager entitymanager;

//primeira tentativa
public Cobranca findCobrancaByNossoNumero(String nossoNumero)  {
			return (Cobranca) entityManager.createNamedQuery(Cobranca.COBRANCA_BY_NOSSONUMERO).setParameter("nossonumero", nossoNumero)
					.getSingleResult();
	}


//segunda tentativa
public Cobranca findCobrancaByNossoNumero(String nossoNumero)  {
		try {
			return (Cobranca) entityManager.createNamedQuery(Cobranca.COBRANCA_BY_NOSSONUMERO).setParameter("nossonumero", nossoNumero)
					.getSingleResult();
		} catch (NoResultException e) {
			throw e;
		}
	}
}

@stateless
class ClasseFacade{

@EJB
ClasseEAO cobrancaEAO;

void metodo(){
try {
	Cobranca cobranca = cobrancaEAO.findCobrancaByNossoNumero(nossoNumero);
	//...
} catch (NoResultException e) { //a excecao deveria cair aqui
	return false;
} catch (Exception e) { //a excecao EJBException cai aqui. 
//o que chega: javax.ejb.EJBException: javax.persistence.NoResultException: No entity found for query
	return false;
}}

2 Respostas

A

É esse comportamento mesmo, quando se lança uma exceção filha de RunTimeException no EJB. No caso NoResultException é um RuntimeException.
Crie uma exceção (que não herder de RunTimeException), ou trata esse NoResultException de outra maneira por exemplo retornando “null”;

E

Era isso mesmo, valeo!

Criado 7 de março de 2013
Ultima resposta 7 de mar. de 2013
Respostas 2
Participantes 2