Bonjour,


Je travaille avec JPA en m'appuyant sur une base Derby en mode Embedded, ce qui signifie une seule et unique JVM utilisatrice à la fois.

Si je lance une seconde JVM et que je veux accéder à ma BDD cela me sort cette 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
java.sql.SQLException: Echec du démarrage de la base de données 'directory:M:\donnees\MA_BDD' ; pour plus de détails, voir l'exception suivante.
	at org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(Unknown Source)
	at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Unknown Source)
	at org.apache.derby.impl.jdbc.Util.seeNextException(Unknown Source)
	at org.apache.derby.impl.jdbc.EmbedConnection.bootDatabase(Unknown Source)
	at org.apache.derby.impl.jdbc.EmbedConnection.<init>(Unknown Source)
	at org.apache.derby.impl.jdbc.EmbedConnection30.<init>(Unknown Source)
	at org.apache.derby.impl.jdbc.EmbedConnection40.<init>(Unknown Source)
	at org.apache.derby.jdbc.Driver40.getNewEmbedConnection(Unknown Source)
	at org.apache.derby.jdbc.InternalDriver.connect(Unknown Source)
	at org.apache.derby.jdbc.AutoloadedDriver.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(Persistence.java:51)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:33)
	at plansdesurveillance.controle.Controle.getFactoryEntityManager(Controle.java:43)
	at plansdesurveillance.controle.Controle.<init>(Controle.java:36)
	at plansdesurveillance.PlansdeSurveillanceApp.run(PlansdeSurveillanceApp.java:61)
	at java.lang.Thread.run(Thread.java:662)
Caused by: java.sql.SQLException: Echec du démarrage de la base de données 'directory:M:\donnees\MA_BDD' ; pour plus de détails, voir l'exception suivante.
	at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
	at org.apache.derby.impl.jdbc.SQLExceptionFactory40.wrapArgsForTransportAcrossDRDA(Unknown Source)
	... 25 more
Caused by: java.sql.SQLException: Il est possible qu'une autre instance de Derby ait déjà amorcé la base de données directory:M:\donnees\MA_BDD.
	at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
	at org.apache.derby.impl.jdbc.SQLExceptionFactory40.wrapArgsForTransportAcrossDRDA(Unknown Source)
	at org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(Unknown Source)
	at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown Source)
	... 22 more

Ce que je cherche serai de réussir à capturer l'exception dans mon projet afin d'ouvrir une fenêtre pour prévenir l'utilisateur que la base est déjà en cours d'utilisation.

Sauf que j'ai beau essayer de mettre un bloc try/catch tout autour de ma fabrique d'entity manager (qui quelque part dans son code doit appeler de manière autonome la fonction getConnection) sans réussir à capturer quoique ce soit.

Si vous avez des pistes merci d'avance.
Raphaël N.