Bonjour,
J'ai développé une application web avec JSF, EJB 3.0 et une base de données MySQL.
Lorsqu'il y a des problèmes liés à la base de données, le serveur affiche la page d'erreur par défaut HTTP 500.
Je remplace cette page par ma propre page d'erreur errreurBD.jsp.
J'utilise un Managed Bean ErrorController pour récupérer les exceptions (qui sont traitées par le serveur).

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
public String getRootCause() {
        FacesContext context = FacesContext.getCurrentInstance();
        Map requestMap = context.getExternalContext().getRequestMap();
        Throwable ex = (Throwable) requestMap.get("javax.servlet.error.exception");
....
}
L'exception que j'ai récupéré lorsque la BD est inaccessible est java.servlet.ServletException.
Ensuite, j'ai utilisé plusieurs fois la méthode getCause() pour récupérer la cause racine, et j'ai obtenu java.sql.SQLException.
Par contre, dans le message que j'ai récupéré en utilisant la méthode getMessage() : il est indiqué que cette SQLException est causée par java.lang.SocketException

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
Caused by: java.sql.SQLException: Erreur lors de l'établissement d'une connexion. Raison : La connexion n'a pu être attribuée pour la raison suivante : Unable to connect to any hosts due to exception: java.net.SocketException: java.net.ConnectException: Connection refused: connect
** BEGIN NESTED EXCEPTION ** 
java.net.SocketException
MESSAGE: java.net.ConnectException: Connection refused: connect
STACKTRACE:
java.net.SocketException: java.net.ConnectException: Connection refused: connect
        at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:143)
Je voudrai récupérer cette "Nested Exception" java.net.SocketException.
Est-ce que vous avez une idée ??

Merci beaucoup!