37 votes

OracleDataSource vs Oracle UCP PoolDataSource

J'ai été la recherche de quelques JDBC Oracle Regroupement de connexions des éléments et suis tombé sur une nouvelle(er) Oracle Piscine de mise en œuvre, Universal Pool de Connexion (UCP). Maintenant, il utilise une nouvelle classe, PoolDataSource, pour la connexion de mise en commun plutôt que la OracleDataSource [avec l'option de cache activé]. Je suis à débattre de la possibilité d'opter pour cette nouvelle mise en œuvre, mais ne peut pas trouver une bonne documentation de ce que (le cas échéant) des correctifs/mises à niveau ce serait de m'en acheter. Quelqu'un a une expérience avec les deux? Avantages Et Les Inconvénients? Merci.

9voto

Le PDS est "universel", car il fournit le même niveau de mise en commun des fonctionnalités que vous obtenez dans ODS pour les non-Oracle bases de données comme MySQL.

Voir UCP Dev Guide, un article sur Oracle site web et de l'UCP Guide de Transition

Je ne vois aucun avantage immédiat de déplacement à l'UCP (PDS) de l'ODS, mais peut-être dans l'avenir Oracle va rendre caduque une partie de la fonctionnalité dans l'ODS. J'ai utilisé ODS depuis un moment et je suis assez content pour le moment, mais si j'ai commencé fraîche, j'irais avec le PDS.

4voto

MRalwasser Points 4022

J'ai effectué une évaluation approfondie de l'UCP et décidé de NE PAS utiliser UCP. Veuillez consulter ce post pour plus de détails.

3voto

JavaDev03 Points 106

Moi aussi, je suis en train de tester UCP et viens de trouver moi-même que je vais avoir des problèmes de performances dans un Pool de Threads en fonction de l'application. D'abord, j'ai essayé OracleDataSource, mais j'ai du mal à le configurer pour le traitement par lot. Je reçois NullPointerExceptions dans les connexions, m'amenant à croire que j'ai une sorte de connexion à la fuite, mais seulement avec certaines applications, il y a d'autres applications que nous avons à gérer qui ne sont pas de lot axée sur les processus, qui OracleDataSource fonctionne bien.

Basé sur ce post et quelques autres, j'ai trouvé des recherches sur ce sujet, j'ai essayé de l'UCP. J'ai trouvé que, avec assez de bidouiller, j'ai pu me débarrasser de connexions fermées/NullPointerExceptions sur les connexions style des erreurs, mais la Collecte des Ordures a été prendre une raclée. À Long Terme GC se remplit vite et de ne jamais libre jusqu'à la fin de l'exécution de l'application. Cela peut parfois prendre aussi longtemps que un jour ou plus si la charge est très lourde. Je remarque aussi qu'il faut progressive de plus de temps pour traiter les données ainsi. Je compare cela à l'amorti OracleCacheImpl classe (que nous utilisons actuellement dans la production, car il encore "just works"), où il a utilisé un tiers de la GC de la mémoire que l'UCP n'processus et des fichiers beaucoup plus vite. Dans toutes les autres applications de l'UCP semble très bien fonctionner et de gérer à peu près tout ce que j'ai jeter à elle, mais le Pool de Threads de l'Application est l'un des principaux app et je ne pouvais pas le risque de GC Exceptions dans la production.

3voto

Wm. Bainbridge Points 21

J'ai testé l'UCP et déployé à la production, au Printemps de 3.0.5 Hibernate application à l'aide de Printemps JMS auditeur de conteneurs et de Printemps gérés par des sessions et des transactions à l'aide de l' @Transactional annotation. Les données provoque parfois SQL contrainte erreurs, en raison de séparer auditeur fils en essayant de mettre à jour le même enregistrement. Lorsque cela se produit, une exception est levée par une méthode annotée par @Transactionnelle et l'erreur est enregistrée dans la base de données en utilisant une autre méthode annotée par @Transactionnelle. Pour quelque raison que ce soit, ce processus semble entraîner un curseur de fuite, qui ajoute éventuellement et déclenche l'ORA-01000 curseur ouvert dépassement des limites d'erreur, provoquant le fil de cesser le traitement de n'importe quoi.

OracleDataSource cours d'exécution dans le même code ne semble pas une fuite de curseurs, de sorte qu'il ne cause pas de ce problème.

C'est un drôle de scénario, mais il m'indique que c'est un peu trop tôt pour être à l'aide de l'UCP dans une application avec ce genre de structure.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X