Pregunta

Me confunde un punto vago en la definición y el posible impacto de Application Exceptions y System Exceptions en EJB.En particular, no puedo entender si la excepción se define como:

public class SomeException extends Exception{
...
}

va a ser un Application o System Exception.Según la especificación un Application Exception siempre debe definirse con la anotación @ApplicationException.Deduzco por lo tanto que la clase anterior no es una Application Exception aunque es una excepción marcada.Mis preguntas que surgen se refieren a la sintaxis correcta de Java y, posteriormente, al comportamiento del EJB Container en caso de que esto Exception debe incluirse dentro de un método de negocio de un Session Bean (no Singleton aunque):

@Stateless
@LocalBean
public class StatelessBean{

public void doStuff(){
throw new SomeException(); 
}

}

1) ¿Debería el SomeException declararse en la cláusula de lanzamiento?

2) ¿El Container descarta la instancia después del método doStuff() ¿se llama?

3) Si finalmente es un Sytem Exception ¿Es correcta mi suposición de que un System Exception podría ser un marcado y no RuntimeException?

Actualizar:

En mi opinión, según la especificación no está definitivamente claro que una excepción marcada siempre deba ser una Application Exception.¿Qué pasaría si uno definiera un marcado? RuntimeException?¿Debería incluirse en throw de un método?Es una System o Application Exception?

 public class SomeException extends RuntimeException{
    ...
    }
¿Fue útil?

Solución

La especificación dice:

Las excepciones de la aplicación que se verifican las excepciones pueden definirse como tales al ser enumeradas en las cláusulas de los tiros de los métodos de la interfaz de negocios del bean, la vista de no-interfaz, la interfaz de inicio, la interfaz de componentes y el punto final del servicio web.Una excepción de la aplicación que es una excepción sin marcar se define como una excepción de la aplicación al anotarlo con la anotación de metadatos de SpelyException, o denotarla en el descriptor de implementación con el elemento de la excepción de la aplicación.

Entonces, la clase anterior es una excepción de solicitud, ya que es una excepción marcada.Y, por supuesto, se debe enumerar en la cláusula de tiros de su método, de lo contrario, el código no compilará.Y no, la instancia del frijol no se descartará después de que esta excepción sea lanzada, según la especificación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top