Fuite de mémoire sur Tomcat 7 avec Oracle JDBC drivers 12c - oracle.jdbc.conducteur fil a omis de s'arrêter

J'ai une application web déployée dans Tomcat 7.0.54 qui utilise une source de données pour se connecter à une base de données Oracle 11g. La source de données est configuré dans META-INF/context.xml et je l'ai placé ojdbc7.jar dans <tomcat-install-dir>/lib. J'utilise une recherche JNDI pour récupérer la source de données à laquelle je stocke dans un singleton, de sorte que chaque classe DAO peut l'utiliser.

Tout fonctionne comme prévu, mais quand je annuler le déploiement de l'application (via Tomcat manager app) je vois dans les logs:

Oct 03, 2014 3:06:55 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [/myapp] appears to have started a thread named [oracle.jdbc.driver.BlockSource.ThreadedCachingBlockSource.BlockReleaser] but has failed to stop it. This is very likely to create a memory leak.
Oct 03, 2014 3:06:57 PM org.apache.catalina.startup.HostConfig undeploy
INFO: Undeploying context [/myapp]

Quand je debug je peux voir ce thread est créé dès que la base de données est accessible (via la source de données).

Ma source de données config:

<Context antiResourceLocking="false">
    <Resource name="jdbc/myapp" auth="Container" 
        type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver" 
        maxActive="20" maxIdle="10" maxWait="-1"
        username="myuser" password="mypass"
        url="jdbc:oracle:thin:@myserver:1521:mysid"
        removeAbandoned="true" removeAbandonedTimeout="10" logAbandoned="true"
        validationQuery="SELECT 1 FROM DUAL"   
        testOnBorrow="true" testOnReturn="true" testWhileIdle="true"  
        timeBetweenEvictionRunsMillis="1800000" numTestsPerEvictionRun="3"  
        minEvictableIdleTimeMillis="1800000"
    />
</Context>

MODIFIER

Une enquête plus poussée a révélé que le problème se produit si oui ou non la source de données est accessible lors de l'application (ou servlet) initialisation.

En réalité, le problème de thread est créé, et donc le problème n'existe, lors de l'utilisation de la 12c versions de Oracle JDBC drivers (soit ojdbc6.jar ou ojdbc7.jar).

Si je reviens à l'aide de la version de 11.2.0.4 ojdbc6.jar le fil n'est jamais créé et la fuite de mémoire avertissement n'apparaît jamais.

Dois-je downgrade pilote JDBC (comme suggéré dans https://stackoverflow.com/a/9177263/4105953)?

Assurez-vous que votre pilote oracle n'est pas aussi dans le WEB-INF/lib répertoire. Car ce serait de l'auto de s'inscrire et de commencer certains de l'Oracle JDBC choses. Voir aussi here.
merci, mais j'ai d'ores et déjà assuré que le pilote JDBC est seulement dans tomcat/lib et non pas de l'application WEB-INF/lib

OriginalL'auteur finchie | 2014-10-03