Exception système ou exception d'application
Question
Je suis confus par un point vague dans la définition et par l'impact possible de Application Exceptions
et System Exceptions
dans EJB
.En particulier, je n'arrive pas à comprendre si l'exception est définie comme :
public class SomeException extends Exception{
...
}
va être un Application
ou System Exception
.Selon les spécifications, un Application Exception
doit toujours être défini avec l'annotation @ApplicationException
.J'en déduis que la classe ci-dessus n'est pas une Application Exception
même s'il s'agit d'une exception vérifiée.Mes questions portent sur la syntaxe Java correcte et par la suite sur le comportement du EJB Container
au cas où ceci Exception
doit être intégré dans une méthode commerciale d'un Session Bean
(pas Singleton
cependant):
@Stateless
@LocalBean
public class StatelessBean{
public void doStuff(){
throw new SomeException();
}
}
1) Si le SomeException
être déclaré dans la clause throw ?
2) Est-ce que le Container
supprime l'instance après la méthode doStuff()
est appelé?
3) Si c'est finalement un Sytem Exception
mon hypothèse est-elle correcte, à savoir qu'un System Exception
pourrait être un chèque et non RuntimeException
?
Mise à jour:
À mon avis, selon la spécification, il n'est pas clairement clair qu'une exception vérifiée doit toujours être une exception vérifiée. Application Exception
.Et si l'on définissait un coché RuntimeException
?Doit-il être inclus dans throw
d'une méthode ?Est-ce un System
ou Application Exception
?
public class SomeException extends RuntimeException{
...
}
La solution
La spécification dit :
Les exceptions d'application qui sont des exceptions vérifiées peuvent être définies comme telles en étant répertoriées dans les clauses throws des méthodes de l'interface métier du bean, de la vue sans interface, de l'interface d'accueil, de l'interface des composants et du point de terminaison du service Web.Une exception d’application qui est une exception non contrôlée est définie comme une exception d’application en l’annotant avec l’annotation de métadonnées ApplicationException, ou en la désignant dans le descripteur de déploiement avec l’élément application-exception.
Ainsi, la classe ci-dessus est une exception d'application, puisqu'il s'agit d'une exception vérifiée.Et bien sûr, cela doit être répertorié dans la clause throws de votre méthode, sinon le code ne sera pas compilé.Et non, l'instance du bean ne sera pas supprimée une fois cette exception levée, conformément à la spécification.