Hibernate 4.3.5 ignore la propriété de configuration v$session.program
-
26-12-2019 - |
Question
J'utilisais auparavant hibernate 3.2 et boneCP mais je viens de passer à hibernate 4.3.5 et au pool de connexions Hikari pour connecter mon application Java à ma base de données Oracle.Je définis v$session.program sur le nom du programme que je souhaite et je l'ajoute à la configuration de mise en veille prolongée.
J'ai créé ma propre classe de configuration Hibernate qui étend la Configuration
classe fournie par hibernate.
public class MyConfiguration extends Configuration {
private static final long serialVersionUID = 1L;
public MyConfiguration() { }
public MyConfiguration(SettingsFactory settingsFactory) {
super(settingsFactory);
}
@Override
public SessionFactory buildSessionFactory() throws HibernateException {
ServiceRegistry registry = new StandardServiceRegistryBuilder()
.applySettings(getProperties()).build();
return new MySessionFactory(super.buildSessionFactory(registry));
}
}
Le MySessionFactory
est un wrapper personnalisé pour SessionFactory qui fait de la magie via la réflexion avec le champ persistenceContext de SessionImpl (cela devrait être le problème car cela fonctionnait également avant la mise à niveau).
Puis j'appelle
Document configDocument = loadHibernateConfigruationDocument();
MyConfiguration conf = new MyConfiguration();
conf.configure(configDocument);
conf.buildSessionFactory();
Cependant, si je vais dans la base de données (pendant que l'application est en cours d'exécution) et que j'interroge
SELECT MACHINE, PROGRAM, USERNAME, count(*) as COUNT FROM v$session GROUP BY MACHINE, PROGRAM, USERNAME;
Je ne trouve pas le programme que je viens de démarrer.Avez-vous une idée de ce que je fais de mal ?
La solution
J'ai trouvé la solution.je viens d'ajouter hibernate.hikari.dataSource.v$session.program
et hibernate.hikari.dataSource.v$session.username
à ma configuration et tout a bien fonctionné.