2012-03-12 5 views
6

Stiamo utilizzando Oracle il driver UCP (Oracle Universal Connection Pool) in tomcat 6. È più o meno configurato come in Oracles Howto. Il problema è che il driver avvia molti thread (Thread da 0 a 57, UCP-worker-thread da 1 a 24) che non vengono fermati quando il server si spegne - Tomcat emette un sacco di messaggi di errore come questo:Oracle UCP driver e tomcat: thread che non si arrestano

Sembra che l'applicazione Web [/ xxx] abbia avviato una discussione denominata [Timer-17] ma non l'ha interrotta. È molto probabile che ciò crei una perdita di memoria .

Qualche idea su come gestirlo?

risposta

2

Ho avuto lo stesso problema e sono riusciti a risolvere il problema aggiungendo il seguente codice nel mio ServletContextListener:

import oracle.ucp.admin.UniversalConnectionPoolManager; 
import oracle.ucp.admin.UniversalConnectionPoolManagerImpl; 

public class MyContextListener implements ServletContextListener { 
    /* ... */ 

    @Override 
    public void contextDestroyed(ServletContextEvent sce) { 
     // Your shutdown sequence here 
     /* ... */ 

     // Shutdown UCP if present, to avoid warnings about thread leaks 
     UniversalConnectionPoolManager ucpManager = UniversalConnectionPoolManagerImpl.getUniversalConnectionPoolManager(); 
     if (ucpManager != null) { 
      String[] poolNames = ucpManager.getConnectionPoolNames(); 
      if (poolNames != null) { 
       for (String poolName : poolNames) { 
        ucpManager.destroyConnectionPool(poolName); 
       } 
      } 
     } 
    } 

} 
+0

Riferimento: vedere "Controllo del ciclo di vita di una connessione" [in Oracle documentazione UCP] (http://docs.oracle.com/cd/E11882_01/java.112/e12265/manage.htm#BABFBFDE). – ochedru