Pergunta

Estou confuso com um ponto vago na definição e no possível impacto da Application Exceptions e System Exceptions em EJB.Em particular, não consigo descobrir se a exceção foi definida como:

public class SomeException extends Exception{
...
}

vai ser um Application ou System Exception.De acordo com a especificação um Application Exception deve sempre ser definido com a anotação @ApplicationException.Infiro portanto que a classe acima não é uma Application Exception mesmo que seja uma exceção verificada.Minhas perguntas dizem respeito à sintaxe correta do Java e, posteriormente, ao comportamento do EJB Container caso isso Exception deve ser lançado dentro de um método de negócios de um Session Bean (não Singleton no entanto):

@Stateless
@LocalBean
public class StatelessBean{

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

}

1) Deve o SomeException ser declarado na cláusula throw?

2) O Container descarta a instância após o método doStuff() é chamado?

3) Se for finalmente um Sytem Exception minha suposição está correta, que um System Exception poderia ser verificado e não RuntimeException?

Atualizar:

Na minha opinião, não está definitivamente claro, de acordo com as especificações, que uma exceção verificada deve sempre ser um Application Exception.E se alguém definisse um verificado RuntimeException?Deveria ser incluído em throw de um método?É um System ou Application Exception?

 public class SomeException extends RuntimeException{
    ...
    }
Foi útil?

Solução

A especificação diz:

As exceções de aplicativo que são exceções verificadas podem ser definidas como tal sendo listadas nas cláusulas throws dos métodos da interface de negócios do bean, visualização sem interface, interface inicial, interface de componente e terminal de serviço da web.Uma exceção de aplicativo que é uma exceção não verificada é definida como uma exceção de aplicativo anotando-a com a anotação de metadados ApplicationException ou denotando-a no descritor de implantação com o elemento application-exception.

Portanto, a classe acima é uma exceção Application, pois é uma exceção verificada.E é claro que deve estar listado na cláusula throws do seu método, caso contrário o código não será compilado.E não, a instância do bean não será descartada após esta exceção ser lançada, conforme a especificação.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top