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 ?

Était-ce utile?

La solution

J'ai trouvé la solution.je viens d'ajouter hibernate.hikari.dataSource.v$session.programet hibernate.hikari.dataSource.v$session.username à ma configuration et tout a bien fonctionné.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top