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{
    ...
    }
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top