2017-01-22 1 views
0

Existe-t-il un moyen d'utiliser c3p0 comme fournisseur de connexion au référentiel Hibernate dropwizard? J'ai ajouté les propriétés de c3p0 dans le fichier de configuration de dropwizard mais je ne pense pas qu'il a fait quelque chose .. Aussi, j'ai ajouté la dépendance c3p0 Mise en veille prolongée au fichier pomIntégration Dropwizard et c3p0

+0

https://github.com/mtakaki/dropwizard-hikaricp - Un exemple de code pour intégrer HicariCP en tant que pool de connexions à une base de données. – zloster

Répondre

0

Donc, je suis à peine expert ici, votre question est la première fois que j'ai rencontré dropwizard. Mais un rapide coup d'œil à son code suggère qu'il repose sur un DataSourceFactory qui est codé en dur pour utiliser le pool de connexions tomcat-jdbc.

Cependant, puisqu'il looks like vous configurez mise en veille prolongée (et othe modules db-dépendants) directement en construisant votre propre DataSourceFactory, et puisque cette classe est non définitif, je pense que vous pouvez simplement écrire votre propre sous-classe et remplacer la méthode de construction de revenir une DataSource c3p0 configurée de manière appropriée, ou (plus facilement), permet à la DataSource c3p0 de récupérer sa configuration à partir d'un fichier c3p0.properties (ou de l'un des nombreux styles de configuration pris en charge par c3p0). Les getters et setters hérités n'auraient alors aucun sens - ces propriétés seraient ignorées, et les tentatives de configuration de DataSource avec les outils json ou yaml de dropwizard seraient ignorées. (Vous pourriez remplacer ces getters et setters pour lancer une exception pour vous rappeler qu'ils ne sont pas implémentés, mais vous devrez vérifier qu'ils ne sont pas appelés même si vous ne les configurez pas explicitement.) La seule partie difficile serait de configurer le MetricRegistry, je présume garder et surveiller les statistiques sur le pool qui vous intéresse. Mais ce ne serait pas trop difficile: Voir la méthode start() de ManagedPooledDataSource pour un modèle, et toutes les statistiques que vous pouvez surveiller sur un c3p0 PooledDataSource.

Il se peut que vous n'ayez pas besoin d'étendre DataSourceFactory. Il peut être suffisant de simplement écrire une classe distincte qui implémente PooledDataSourceFactory. De plus, il existe une classe appelée DatabaseConfiguration dont le dernier message de validation est "Ajouter une fonctionnalité pour connecter des pools de connexions DB personnalisés". Mais je ne trouve aucun exemple ou documentation de cette classe. Il est assez clair comment vous pouvez intégrer c3p0 en étendant simplement DataSourceFactory, et d'autres ont suggested that.