Bonjour,
Pendant l'exécution d'une appli web je dois remplacer la base de données gérée par Hibernate mais quand j'essaie de l'écraser par une autre base (sauvegarde) cela soulève une exception :
En fait c'est Hibernate qui a mis un verrou sur le fichier base et tant que tomcat n'est pas arrêté le fichier ne peut pas être remplacé par un autre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 java.io.FileOutputStream.open(Native Method) java.io.FileOutputStream.<init>(Unknown Source) java.io.FileOutputStream.<init>(Unknown Source) util.Fichier.copieFichier(Fichier.java:103) pages.base.RestaurerAction.doRestaurer(RestaurerAction.java:62) pages.base.RestaurerAction.xExecute(RestaurerAction.java:32) pages.global.GlobalAction.execute(GlobalAction.java:66) ...
Pourtant dans mes requêtes j'ouvre mes sessions et les referme à chaque fois.
Voici un exemple :
Comment donc dire à Hibernate de retirer ce verrou ?
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 public String getValeurParametre(String nom) throws Exception { Session session = HibernateUtil.getSessionFactory().openSession(); Parametre parametre = (Parametre) session.get(dao.Parametre.class, nom); session.close(); return parametre != null ? parametre.getValeurPa() : null; } public void updateParametre(types.Parametre parametre) throws Exception { Session session = HibernateUtil.getSessionFactory().openSession(); Transaction tx = session.beginTransaction(); try { session.update(parametre2ParametreBase(parametre)); tx.commit(); session.close(); } catch (Exception e) { tx.rollback(); session.close(); throw e; } }
Voici mon fichier HibernateUtil :
Cela fait 2 jours que je cherche.
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 package dao.requete; import org.hibernate.*; import org.hibernate.cfg.*; public class HibernateUtil { private static final String HIBERNATE_FICHIER_CONFIGURATION = "hibernate.cfg.xml"; private static SessionFactory sessionFactory; // public static final ThreadLocal session = new ThreadLocal(); public static SessionFactory getSessionFactory() { return sessionFactory; } public static void init(String pathBase) { Configuration cfg = new Configuration() .configure(HIBERNATE_FICHIER_CONFIGURATION); cfg.setProperty("hibernate.connection.url", "jdbc:firebirdsql:localhost/3050:" + pathBase); // System.out.println(cfg.getProperty("hibernate.connection.url")); cfg.setProperty("hibernate.dialect", "org.hibernate.dialect.FirebirdDialect"); cfg.setProperty("hibernate.cglib.use_reflection_optimizer", "false"); cfg.setProperty("hibernate.connection.autocommit", "false"); // cfg.setProperty("hibernate.transaction.auto_close_session", "true"); // Create the SessionFactory sessionFactory = cfg.buildSessionFactory(); sessionFactory.openSession(); } }
Au secoooouuuuuuuuuuurrrrrrrrrrrrrrrrrsssssssssss.
Merci d'avance.
Partager