Eccezione di sistema o eccezione dell'applicazione
Domanda
Sono confuso da un punto vago nella definizione e dal possibile impatto di Application Exceptions
e System Exceptions
in EJB
.In particolare non riesco a capire se l'Eccezione definita come:
public class SomeException extends Exception{
...
}
sta per essere un Application
o System Exception
.Secondo la specificazione un Application Exception
dovrebbe sempre essere definito con l'annotazione @ApplicationException
.Deduco quindi che la classe di cui sopra non è un Application Exception
anche se è un'eccezione controllata.Le mie domande che escono riguardano la corretta sintassi Java e successivamente il comportamento del EJB Container
nel caso questo Exception
deve essere gettato all'interno di un metodo di business di un Session Bean
(non Singleton
se):
@Stateless
@LocalBean
public class StatelessBean{
public void doStuff(){
throw new SomeException();
}
}
1) Se il SomeException
essere dichiarato nella clausola di lancio?
2) Fa il Container
elimina l'istanza dopo il metodo doStuff()
è chiamato?
3) Se è finalmente un Sytem Exception
la mia ipotesi è corretta, che un System Exception
potrebbe essere un controllato e non RuntimeException
?
Aggiornare:
A mio parere non è sicuramente chiaro secondo le specifiche che un'eccezione controllata dovrebbe sempre essere un Application Exception
.E se si definisse un controllato RuntimeException
?Dovrebbe essere incluso in throw
di un metodo?È un System
o Application Exception
?
public class SomeException extends RuntimeException{
...
}
Soluzione
Lo spec dice:
Le eccezioni delle applicazioni controllate possono essere definite come tali essendo elencate nelle clausole throws dei metodi dell'interfaccia aziendale del bean, della vista senza interfaccia, dell'interfaccia home, dell'interfaccia componente e dell'endpoint del servizio Web.Un'eccezione di applicazione che è un'eccezione non controllata viene definita come un'eccezione dell'applicazione annotandola con l'annotazione dei metadati ApplicationException o indicandola nel descrittore di distribuzione con l'elemento application-exception.
Quindi, la classe sopra è un'eccezione dell'applicazione, poiché è un'eccezione controllata.E naturalmente deve essere elencato nella clausola throws del tuo metodo, altrimenti il codice non verrà compilato.E no, l'istanza bean non verrà scartata dopo che questa eccezione è stata generata, secondo le specifiche.