Okej, jag grävde lite och kom på det här själv. (Tack för de många snälla människorna på e-postlistan för Tomcat-användare!)
JB Nizet har rätt:om du skapar Tomcat-databasanslutningspooler från Java-kod, är/representerar varje DataSource du instansierar bokstavligen en separat anslutningspool. Detta var förvånande för mig; från en .NET-bakgrund antog jag att Tomcat-anslutningspoolningen skulle fungera som SqlServer/ADO.NET-anslutningspooling:om du använder två identiska anslutningssträngar för att få två databasanslutningar kommer dessa båda från samma anslutningspool. Men i Tomcat, när DataSource-objekt instansieras från Java-kod, är varje ny DataSource-instans en helt ny anslutningspool. Så om du till exempel vill behålla dessa anslutningspooler över JAX-RS webbtjänstanrop, måste du bygga din egen databaspool (DataSource) cache, lägga in DataSource-instanserna (en per databas) i den och lagra den i ett objekt som JAX-RS kommer att bestå över webbtjänstanrop. Jag gjorde precis det här, och det fungerar bra.
btw, Tomcat-databasanslutningspooling erbjuder funktionalitet som liknar SqlServer/ADO.NET-anslutningspooling, du behöver bara använda JNDI-resurser för att skapa dina DataSource-instanser. (I mitt fall är detta inte ett alternativ, eftersom databaser skapas dynamiskt i min applikation, och JNDI-definitioner skapas vanligtvis från konfigurationsfiler som Tomcat läser vid start.)