Hi,
I have a business interface with a method that throws two service exception (DataRetrievalFailureException and IllegalArgumentException):
And a POJO implementation:Code:public interface IServeiPersones { /** * Obté la persona associada amb l'identificador indicat. * @param idPersona identificador de la persona. Ha de ser igual o major de zero * @throws IllegalArgumentException Si l'identificador és menor de zero * @throws DataRetrievalFailureException Si no n'hi ha cap persona associada amb l'identificador indicat */ public IPersona obtenirPersona(long idPersona);
Then, I publish this service with an EJB:Code:/* (non-Javadoc) * @see cat.base.bfp.serveis.IServeiPersones#obtenirPersona(long) */ @Override public IPersona obtenirPersona(long idPersona) { HibernateTemplate ht; /* * Exemple de com combinar hibernate i SQL. * Aquí emprem hibernate, a la resta emprem jdbc */ if(idPersona >= 0L) { IPersona p; ht = new HibernateTemplate(sessionFactory); p = (IPersona)ht.get(PersonaH.class, idPersona); if(p == null) { throw new DataRetrievalFailureException("La persona amb identificador '" + idPersona + "' no existeix pas al registre"); } return p; } throw new IllegalArgumentException("L'identificador '" + idPersona + "' no és pas correcte"); }
Finally I use that service from a WAR application (really more than one client in different war applications):Code:@Stateless(name="ServeiPersonesEJB") @Interceptors(ServeiPersonesEJBConfigurator.class) @Remote(IServeiPersones.class) @Local(IServeiPersones.class) @Transactional(readOnly=true, propagation=Propagation.REQUIRED) @RemoteBinding(jndiBinding="bfp/ServeiPersones/remote") @LocalBinding(jndiBinding="bfp/ServeiPersones/local") public class ServeiPersonesEJB implements IServeiPersones { @Autowired(required=true) private IServeiPersones serveiPersones; /* (non-Javadoc) * @see cat.base.bfp.serveis.IServeiPersones#obtenirPersona(long) */ @Override public IPersona obtenirPersona(long idPersona) { return serveiPersones.obtenirPersona(idPersona); }
And on the SWF controller:Code:<!-- Accés al servei --> <jee:local-slsb id="serveiPersones" jndi-name="bfp/ServeiPersones/local" business-interface="cat.base.bfp.serveis.IServeiPersones"> </jee:local-slsb>
But the controller doesn't catch the DataRetrievalFailureException because EJBException is thrown. I don't know how to get the service exception nor the EJB exception.Code:try { pbb.setPersona(serveiPersones.obtenirPersona(pbb.getIdPersona())); } catch(DataRetrievalFailureException e) { logger.error("No n'hi ha cap persona amb l'identificador '" + pbb.getIdPersona() + "' indicat"); pbb.getErrors().add("No n'hi ha cap persona amb l'identificador '" + pbb.getIdPersona() + "' indicat"); return SORTIDA_ERROR; }
Anybody can help me?
Thanks


Reply With Quote
