Bonsoir,


Je travaille avec Hibernate pour gérer une base de donnée sous Derby.
J'aimerais qu'au lancement de mon programme l'accès à ma BDD soit vérifié et que si la base de donnée est inaccessible avertir l'utilisateur.


Lorsqu'elle est inaccessible j'ai ce genre d'Exception :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
java.sql.SQLNonTransientConnectionException: java.net.SocketException : lerreur lors de la connexion au serveur 152.40.0.12 sur le port 1527 a émis le message Software caused connection abort: connect.
	at org.apache.derby.client.am.SQLExceptionFactory40.getSQLException(Unknown Source)
	at org.apache.derby.client.am.SqlException.getSQLException(Unknown Source)
	at org.apache.derby.jdbc.ClientDriver.connect(Unknown Source)
	at java.sql.DriverManager.getConnection(DriverManager.java:582)
	at java.sql.DriverManager.getConnection(DriverManager.java:154)
	at org.hibernate.connection.DriverManagerConnectionProvider.getConnection(DriverManagerConnectionProvider.java:110)
	at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:84)
	at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2009)
	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1292)
	at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:859)
	at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:669)
	at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:126)
	at javax.persistence.Persistence.createEntityManagerFactory(Unknown Source)
	at javax.persistence.Persistence.createEntityManagerFactory(Unknown Source)
	at monApplication.DAO.getFactoryEntityManager(DAO.java:53)
	at monApplication.DAO.<init>(DAO.java:42)
	at monApplication.monApplicationApp.run(monApplicationApp.java:61)
	at java.lang.Thread.run(Thread.java:662)
Caused by: org.apache.derby.client.am.DisconnectException: java.net.SocketException : lerreur lors de la connexion au serveur 152.40.0.12 sur le port 1527 a émis le message Software caused connection abort: connect.
	at org.apache.derby.client.net.NetAgent.<init>(Unknown Source)
	at org.apache.derby.client.net.NetConnection.newAgent_(Unknown Source)
	at org.apache.derby.client.am.Connection.<init>(Unknown Source)
	at org.apache.derby.client.net.NetConnection.<init>(Unknown Source)
	at org.apache.derby.client.net.NetConnection40.<init>(Unknown Source)
	at org.apache.derby.client.net.ClientJDBCObjectFactoryImpl40.newNetConnection(Unknown Source)
	... 16 more
Caused by: java.net.SocketException: Software caused connection abort: connect
	at java.net.PlainSocketImpl.socketConnect(Native Method)
	at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
	at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
	at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
	at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
	at java.net.Socket.connect(Socket.java:529)
	at java.net.Socket.connect(Socket.java:478)
	at java.net.Socket.<init>(Socket.java:375)
	at java.net.Socket.<init>(Socket.java:189)
	at javax.net.DefaultSocketFactory.createSocket(SocketFactory.java:206)
	at org.apache.derby.client.net.OpenSocketAction.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	... 22 more
Qui provient de la création de mon EntityManagerFactory :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
public final EntityManagerFactory getFactoryEntityManager() {
            if (emfServeur == null) {
                emfServeur = Persistence.createEntityManagerFactory("MonApplicationPUServeur");
            }
            return emfServeur;}




J'y ai jamais trop bien compris au fonctionnement des exceptions. Je peux les capturer dans mon application alors que l'exception est générée par du code écrit par Apache ?

Ou bien je peux récupérer l'état de ma connexion qu'a créé Hibernate ?

Et il a peut être une façon plus simple de tester la connexion ?

Merci d'avance pour votre aide.

Raphaël N.