Dobra, trochę kopałem i sam to wymyśliłem. (Dzięki za wielu miłych ludzi z listy dyskusyjnej tomcat-users!)
JB Nizet ma rację:jeśli tworzysz pule połączeń bazy danych Tomcat z kodu Java, każde instancja DataSource dosłownie jest/reprezentuje oddzielną pulę połączeń. To było dla mnie zaskakujące; pochodzących z tła .NET, założyłem, że pula połączeń Tomcat będzie działać jak pula połączeń SqlServer/ADO.NET:jeśli użyjesz dwóch identycznych parametrów połączenia, aby uzyskać dwa połączenia z bazą danych, oba będą pochodzić z tej samej puli połączeń. Jednak w Tomcat, podczas tworzenia instancji obiektów DataSource z kodu Java, każda nowa instancja DataSource to zupełnie nowa pula połączeń. Tak więc, jeśli chcesz na przykład zachować te pule połączeń w wywołaniach usług sieciowych JAX-RS, musisz zbudować własną pamięć podręczną puli bazy danych (DataSource), umieścić w niej instancje DataSource (po jednej na bazę danych) i przechowywać je w obiekcie, który JAX-RS będzie utrzymywał się między wywołaniami usług internetowych. Właśnie to zrobiłem i działa dobrze.
btw, pula połączeń z bazą danych Tomcat oferuje funkcjonalność podobną do pulowania połączeń SqlServer/ADO.NET, wystarczy użyć zasobów JNDI, aby utworzyć instancje DataSource. (W moim przypadku nie jest to opcja, ponieważ bazy danych są tworzone dynamicznie w mojej aplikacji, a definicje JNDI są zazwyczaj tworzone z plików konfiguracyjnych, które Tomcat odczytuje podczas uruchamiania.)