Драйвер Oracle UCP и tomcat: не удается остановить потоки - PullRequest
6 голосов
/ 12 марта 2012

Мы используем Oracle драйвер UCP (Oracle Universal Connection Pool) в Tomcat 6. Он более или менее настроен, как в Oracle Howto .Проблема в том, что драйвер запускает много потоков (Thread-0 до 57, UCP-worker-thread-1-24), которые не останавливаются при выключении сервера - tomcat выдает множество сообщений об ошибках, таких как:

Веб-приложение [/ xxx], похоже, запустило поток с именем [Timer-17], но не смогло его остановить.Это может привести к утечке памяти.

Есть идеи, как с этим справиться?

1 Ответ

2 голосов
/ 28 августа 2013

У меня была та же проблема, и мне удалось ее исправить, добавив следующий код в мой 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);
                }
            }
        }
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...