Je n'ai aucun repère pour justifier ce qui suit, c'est juste "nous savons tous que" sagesse conventionnelle. Comme pour toutes les discussions sur les performances, Your Milage Will Vary, si cela est absolument essentiel à votre application, vous devez effectuer vos propres tests. Je pense qu'il n'y a pas de perte de performance significative en utilisant un pool de connexions compatible XA pour un travail non-XA - WebSphere prend soin d'utiliser les transactions 1PC lorsqu'une seule ressource est utilisée dans une transaction. Le surcoût primaire de XA est l'ensemble supplémentaire de messages XA Prepare/Commit/Forget, ceux-ci ne se produiront pas dans un simple cas 1PC.
Ainsi, le principal danger est d'initier par inadvertance une transaction 2PC. Cela peut arriver si vous faites plusieurs travaux supposés contre le même resorber mais avec (par exemple) différents niveaux d'isolation. Vous obtenez une connexion du pool et effectuez un travail, cette connexion est maintenant associée à votre transaction jusqu'à COMMIT. Vous "fermez" la connexion, en la conservant théoriquement dans le pool, mais en fait, la mise en pool de WebSphere conserve la connexion pour votre transaction. Vous demandez à nouveau la connexion pour faire plus de travail, à condition que vous demandiez exactement la même connexion, vous recevrez à nouveau la même connexion et que le travail continue en une seule transaction - nous avons seulement 1PC, sans surcharge. Je voudrais prendre l'approche d'avoir initialement un seul pool XA, mais avoir deux références de resoruce séparées, une pour le travail 2PC, une pour le travail 1PC. Les deux références pointent vers le même pool de connexions. Votre code est maintenant isolé de tout besoin d'avoir des pools de connexion séparés, c'est juste une question de relier la ressource-ref si vous avez besoin de faire le changement.