Очевидный тупик C3P0, когда все потоки пусты?

Я использую C3P0 в качестве пула соединений в Tomcat и вижу очень тревожные ошибки:

2010-09-16 13:25:00,160 [Timer-0] WARN  com.mchange.v2.async.ThreadPoolAsynchronousRunner  - com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@43502400 -- APPARENT DEADLOCK!!! Creating emergency threads for unassigned pending tasks!
2010-09-16 13:25:01,407 [Timer-0] WARN  com.mchange.v2.async.ThreadPoolAsynchronousRunner  - com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@43502400 -- APPARENT DEADLOCK!!! Complete Status:
  Managed Threads: 10
  Active Threads: 0
  Active Tasks:
  Pending Tasks:
    com.mchange.v2.resourcepool.BasicResourcePool$1RefurbishCheckinResourceTask@6e4151a7
  Pool thread stack traces:
  Thread[com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#6,5,main]
    java.lang.Object.wait(Native Method)
    com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:534)
  Thread[com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#2,5,main]
    java.lang.Object.wait(Native Method)
    com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:534)
  Thread[com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#1,5,main]
    java.lang.Object.wait(Native Method)
    com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:534)
  Thread[com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#0,5,main]
    java.lang.Object.wait(Native Method)
    com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:534)
  Thread[com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#5,5,main]
    java.lang.Object.wait(Native Method)
    com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:534)
  Thread[com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#4,5,main]
    java.lang.Object.wait(Native Method)

... many more, exact same stack trace

Строка 534:

 while (true) {
   Runnable myTask;
   synchronized ( ThreadPoolAsynchronousRunner.this ) {
     while ( !should_stop && pendingTasks.size() == 0 )
       ThreadPoolAsynchronousRunner.this.wait( POLL_FOR_STOP_INTERVAL ); // <- here
     if (should_stop) ...

Очень похоже, что все потоки простаивают. Они ждут работы. 0 активных потоков и только 1 задача для завершения. Любые подсказки о том, что происходит не так?

Вот конфигурация:

ds.setUser(userName);
ds.setPassword(password);
ds.setMaxPoolSize(16);
ds.setMaxConnectionAge(1800);
ds.setAcquireRetryAttempts(4);
ds.setMaxIdleTime(900);
ds.setNumHelperThreads(10);
ds.setCheckoutTimeout(1000);

person Steven Schlansker    schedule 16.09.2010    source источник
comment
ты смог решить свою проблему? (Я знаю, что это было очень давно)   -  person Ittai    schedule 16.07.2012
comment
@Ittai: нет, но в конце концов это исчезло. Не знаю, что именно исправлено :-(   -  person Steven Schlansker    schedule 17.07.2012


Ответы (11)


У меня только что возникла аналогичная проблема с базой данных Oracle, но в моем случае счетчики Managed Thread и Active Thread были одинаковыми.

    Managed Threads: 3
    Active Threads: 3

Для меня на самом деле это была ошибка аутентификации, но она отображалась как ошибка APPARENT DEADLOCK из-за того, как я проводил аудит входа в систему.

    2013-08-12 11:29:04,910 [Timer-4] WARN  com.mchange.v2.async.ThreadPoolAsynchronousRunner: com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@34996454 -- APPARENT DEADLOCK!!! Creating emergency threads for unassigned pending tasks!
    2013-08-12 11:29:04,914 [Timer-4] WARN  com.mchange.v2.async.ThreadPoolAsynchronousRunner: com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@34996454 -- APPARENT DEADLOCK!!! Complete Status: 
            Managed Threads: 3
            Active Threads: 3
            Active Tasks: 
                    com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@6730b844 (com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#2)
                    com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@2f91ad49 (com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#0)
                    com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@507ac05 (com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#1)
            Pending Tasks: 
                    com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@3aae7ed7
    Pool thread stack traces:
            Thread[com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#2,5,main]
                    java.net.SocketInputStream.socketRead0(Native Method)
                    java.net.SocketInputStream.read(SocketInputStream.java:150)
                    java.net.SocketInputStream.read(SocketInputStream.java:121)
                    oracle.net.ns.Packet.receive(Packet.java:300)
                    oracle.net.ns.DataPacket.receive(DataPacket.java:106)
                    oracle.net.ns.NetInputStream.getNextPacket(NetInputStream.java:315)
                    oracle.net.ns.NetInputStream.read(NetInputStream.java:260)
                    oracle.net.ns.NetInputStream.read(NetInputStream.java:185)
                    oracle.net.ns.NetInputStream.read(NetInputStream.java:102)
                    oracle.jdbc.driver.T4CSocketInputStreamWrapper.readNextPacket(T4CSocketInputStreamWrapper.java:124)
                    oracle.jdbc.driver.T4CSocketInputStreamWrapper.read(T4CSocketInputStreamWrapper.java:80)
                    oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1137)
                    oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:290)
                    oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:192)
                    oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:380)
                    oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:760)
                    oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:401)
                    oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:546)
                    oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:236)
                    oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
                    oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:521)
                    com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:134)
                    com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:182)
                    com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:171)
                    com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:137)
                    com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1014)
                    com.mchange.v2.resourcepool.BasicResourcePool.access$800(BasicResourcePool.java:32)
                    com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1810)
                    com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)
            Thread[com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#0,5,main]
                    java.net.SocketInputStream.socketRead0(Native Method)
                    java.net.SocketInputStream.read(SocketInputStream.java:150)
                    java.net.SocketInputStream.read(SocketInputStream.java:121)
                    oracle.net.ns.Packet.receive(Packet.java:300)
                    oracle.net.ns.DataPacket.receive(DataPacket.java:106)
                    oracle.net.ns.NetInputStream.getNextPacket(NetInputStream.java:315)
                    oracle.net.ns.NetInputStream.read(NetInputStream.java:260)
                    oracle.net.ns.NetInputStream.read(NetInputStream.java:185)
                    oracle.net.ns.NetInputStream.read(NetInputStream.java:102)
                    oracle.jdbc.driver.T4CSocketInputStreamWrapper.readNextPacket(T4CSocketInputStreamWrapper.java:124)
                    oracle.jdbc.driver.T4CSocketInputStreamWrapper.read(T4CSocketInputStreamWrapper.java:80)
                    oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1137)
                    oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:290)
                    oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:192)
                    oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:380)
                    oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:760)
                    oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:401)
                    oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:546)
                    oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:236)
                    oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
                    oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:521)
                    com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:134)
                    com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:182)
                    com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:171)
                    com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:137)
                    com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1014)
                    com.mchange.v2.resourcepool.BasicResourcePool.access$800(BasicResourcePool.java:32)
                    com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1810)
                    com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)
            Thread[com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#1,5,main]
                    java.net.SocketInputStream.socketRead0(Native Method)
                    java.net.SocketInputStream.read(SocketInputStream.java:150)
                    java.net.SocketInputStream.read(SocketInputStream.java:121)
                    oracle.net.ns.Packet.receive(Packet.java:300)
                    oracle.net.ns.DataPacket.receive(DataPacket.java:106)
                    oracle.net.ns.NetInputStream.getNextPacket(NetInputStream.java:315)
                    oracle.net.ns.NetInputStream.read(NetInputStream.java:260)
                    oracle.net.ns.NetInputStream.read(NetInputStream.java:185)
                    oracle.net.ns.NetInputStream.read(NetInputStream.java:102)
                    oracle.jdbc.driver.T4CSocketInputStreamWrapper.readNextPacket(T4CSocketInputStreamWrapper.java:124)
                    oracle.jdbc.driver.T4CSocketInputStreamWrapper.read(T4CSocketInputStreamWrapper.java:80)
                    oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1137)
                    oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:290)
                    oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:192)
                    oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:380)
                    oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:760)
                    oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:401)
                    oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:546)
                    oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:236)
                    oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
                    oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:521)
                    com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:134)
                    com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:182)
                    com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:171)
                    com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:137)
                    com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1014)
                    com.mchange.v2.resourcepool.BasicResourcePool.access$800(BasicResourcePool.java:32)
                    com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1810)
                    com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)
person eebbesen    schedule 12.08.2013
comment
Какой кикер! Я получал эту ошибку после некоторых серьезных архитектурных изменений, поэтому я подумал, что облажался. Где настоящая причина была связана с вашим ответом - потому что я не мог пройти через брандмауэр к серверу базы данных! - person HankCa; 27.07.2015
comment
Была такая же проблема сейчас. Опять же из-за правила брандмауэра. @HankCa спасибо за наводку. - person Roopak A Nelliat; 28.09.2017
comment
Для меня 100% точь-в-точь, группа безопасности aws. - person Gman; 12.10.2017
comment
@HankCa - вы должны опубликовать свой комментарий в качестве ответа - вы сэкономили мне часы не очень веселой отладки - спасибо! - person RonK; 13.08.2018
comment
@HankCa Я столкнулся с той же проблемой. После того, как проблема зарегистрирована, она продолжает регистрироваться постоянно, ответ приложения становится непредсказуемым. Мы в курсе, какие корректирующие шаги можно предпринять в этих сценариях. - person dexter; 24.05.2019

Это похоже на то, что вы уже получили соединение из пула и не возвращаете его вовремя.

C3P0 определяет «очевидные взаимоблокировки», когда соединение устанавливается, но не возвращается в пул в течение времени ожидания обнаружения взаимоблокировки.

Если переместить получение соединения ближе к «действию» и сразу же вернуть его в пул после завершения работы с базой данных, это сообщение исчезнет.

person Thomas Weber    schedule 16.09.2010
comment
В документации сказано, что setMaxAdministrativeTime по умолчанию равен 0 (т.е. навсегда). Кроме того, почему я должен возвращать соединение с пулом в любой фиксированный срок? Я проверил это; оно должно быть моим, пока оно мне нужно... а если и нет, то это не тупик! - person Steven Schlansker; 17.09.2010
comment
Вы правы, поэтому ПРЕДУПРЕЖДЕНИЕ говорит о явной тупиковой ситуации. И, кстати, вы используете пул соединений, поэтому вам не нужно сохранять соединение, пока вы его не используете. - person Thomas Weber; 17.09.2010
comment
Конечно, но рассматриваемое место может быть в долгосрочной транзакции; во время которого вы не можете его отпустить. - person Steven Schlansker; 17.09.2010
comment
Это не должно вызывать проблемы, по моему опыту C3P0 проверяет, активно ли используется соединение. Я не привык использовать C3P0 напрямую, я использую его с Hibernate, но в этом сценарии длинные транзакции никогда не являются проблемой, а простаивающие соединения вызывают предупреждение, которое вы получаете. - person Thomas Weber; 17.09.2010
comment
Только что увидел ваше редактирование вопроса. Время ожидания, которое вы нажмете, устанавливается ds.setMaxIdleTime(900) - person Thomas Weber; 17.09.2010
comment
@Thomas Weber: В документации говорится: maxIdleTime: количество секунд, в течение которых соединение может оставаться в пуле, но не использоваться, прежде чем оно будет удалено. Значит, это никак не должно влиять? - person Steven Schlansker; 18.09.2010
comment
Привет Стивен, моя ошибка - надо было прочитать. Просто чтобы немного лучше понять вашу проблему: когда вы получаете эти сообщения? Сразу после запуска или после того, как приложение проработало несколько часов? Используете ли вы idleConnectionTestPeriod для проверки того, не было ли сервером базы данных удалено какое-либо соединение из пула? - person Thomas Weber; 18.09.2010

Это решит вашу проблему

ds.setMaxStatements(1000);
ds.setMaxStatementsPerConnection(100); (the maximum number of prepared statments your system can execute on a single connection)

проверьте: https://forum.hibernate.org/viewtopic.php?t=947246&highlight=apparent+deadlock+c3p0

Не забудьте закрыть свои отчеты после того, как вы закончите с ними !!

person ChristiaanP    schedule 31.03.2011

Мой комментарий к ответу https://stackoverflow.com/a/18192588/1019307 получил достаточно голосов, чтобы предложить быть ответом.

Я получил эту ошибку, потому что не смог пройти через брандмауэр к серверу базы данных. Проверьте, не является ли это вашей проблемой.

person HankCa    schedule 14.08.2018

@eebbesen, у меня такая же ошибка, как и у тебя. Я использую Tomcat версии 9.0.6. У меня есть спящий режим версии 5.2.10, спящий режим c3p0 версии 3.6.3 в моем проекте maven. Моя была не ошибкой аутентификации, а скорее из-за того, что я ранее изменил имя своего компьютера. Это не оказало немедленного влияния на tomcat, но после перезагрузки моей машины, когда я попытался снова запустить tomcat через eclipse (Oxygen 2), я больше не мог запустить eclipse именно из-за поднятой вами проблемы.

Я погуглил это и нашел эту ссылку, которая подсказала мне проблему:

https://community.oracle.com/thread/339825

где сказано:

Сначала проверьте, запущены ли службы OracleServiceXE и OracleXETNSListener. Замените 127.0.0.1 в URL-адресе на IP-адрес или имя вашей машины. Он должен совпадать с хостом, объявленным в файле tnsnames.ora.

Позже упоминается, где найти этот файл tnsnames.ora, и для меня это было здесь:

C:\oraclexe\app\oracle\product\11.2.0\server\network\ADMIN

Глядя на этот файл tnsnames.ora, я увидел это:

XE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = MyMachineName-7)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = XE)
    )
  )

Но недавно я переименовал свою машину в MyMachineName-5. Я изменил 7 на 5 и сохранил файл. Я проверил файл «listener.ora» в этом каталоге, и у него была такая же проблема:

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
      (ADDRESS = (PROTOCOL = TCP)(HOST = MyMachineName-7)(PORT = 1521))
    )
  )

Я изменил 7 на 5 и сохранил файл.

Затем я открыл диспетчер задач, щелкнул вкладку «Службы» и посмотрел службы «Oracle». Я перезапустил: OracleXETNSListener, OracleXEClrAgent, OracleServiceXE. Я снова пошел перезапускать tomcat в eclipse, и на этот раз возникла проблема.

Приложение:

Я также погуглил это:

https://community.oracle.com/thread/2267906

Это заставило меня попробовать:

1) Отключил брандмауэр в Защитнике Windows (уже отключил брандмауэр mcaffee)

2) Запустил sqlplus, чтобы убедиться, что я могу войти в систему с учетными данными, которые я использовал в своем файле гибернации: hibernate.cfg.xml

C:\oraclex\app\oracle\product\11.2.0\server\bin\sqlplus.exe

3) Запустил ярлык на рабочем столе для Oracle Database 11g

Это не помогло мне даже после того, как я исправил проблему с именем машины, что мне все еще нужно изучить.

4) Используя dbVisualizer, я попытался подключиться к Oracle. Это сработало только после того, как я решил проблему с именем файла .ora: дважды щелкните соединение и нажмите кнопку «ping server».

person Steve T    schedule 30.09.2018

У меня была та же проблема, но причину было немного трудно определить, поскольку она была вызвана тем, что некоторые одновременные ресурсы пытались одновременно установить соединение.

Как вы можете прочитать, если пул не был инициализирован, код, предоставленный для его инициализации, вызывает функцию настройки.

public Connection getConnection() throws SQLException {
    if (mCPDS == null) {
        setupPool();
    }

    return mCPDS.getConnection();
}

Проблема заключалась в том, что многие ресурсы пытались получить соединение в начале программы, поэтому более одного экземпляра пула создавали через некоторое время, вызывая вашу проблему.

Решение состояло в том, чтобы просто объявить метод синхронизированным, чтобы не допустить других ресурсов, пока кто-то вызывает метод, и он все еще находится внутри экземпляра пула, например.

public synchronized Connection getConnection() throws SQLException {
    if (mCPDS == null) {
        setupPool();
    }

    return mCPDS.getConnection();
}

Это может быть ошибкой дизайна из-за того, что не используется синглтон, но это устраняет проблему, связанную с отсутствием некоторой производительности.

person atzu    schedule 28.10.2015

У меня была такая же (не удалось обнаружить) проблема, решенная путем правильного закрытия экземпляров Statement и Resultset (каким-то образом оставленных незакрытыми):

String SQL = "SELECT 1";
try {
    con = DriverManager.getConnection(host, userName, userPassword);
    stmt = con.prepareStatement(SQL, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
    try {
        rs = stmt.executeQuery(SQL);
        try {
            rs.next();
            // ...
        } finally {
            rs.close();
        }
    } finally {
        stmt.close();
    }
} catch (SQLException ex) {
    Logger.getLogger(MyClass.class.getName()).log(Level.SEVERE, null, ex);
}
person Zon    schedule 08.05.2013

Привет, мой друг, просто чтобы прокомментировать, у меня был такой же случай. Я только что настроил свой проект eclipse spring-hibernate и обнаружил то же исключение, следует отметить, что в моем проекте до сих пор нет запроса.

Я решил эту проблему с помощью следующих шагов:

1) Очистить проект: Проект--> Очистить... 2) Построить проект: Проект--> Построить проект

Я надеюсь, что это работает для вас.

person Alejandro Lopez Morales    schedule 26.02.2018

У меня внезапно возникла та же проблема: после того, как я заметил, что тупик присутствует только при запуске моего приложения в режиме отладки (я использую IntelliJ), и все было в порядке при обычном запуске, я начал его копать.

Наконец-то я понял, что точка останова блокировала соединение: я не знаю, почему Intellij не «слушал», что приложение проходит через эту точку останова, но где-то зависал из-за точки останова, и это вызывало очевидный тупик

После удаления всех точек останова в моем проекте все снова пошло гладко.

Надеюсь, это поможет кому-то

person Leviand    schedule 20.09.2018

Мы столкнулись с этой проблемой и решили ее, добавив это в конфигурацию C3P0:

<property name="statementCacheNumDeferredCloseThreads" value="1"/>

согласно: это из документа C3P0

person colin    schedule 03.03.2016

Аналогичная проблема возникла на сервере Glassfish4 при развертывании приложения. Оказалось, что это была проблема с конфигурацией базы данных. Просто убедитесь, что ваша конфигурация подключения к базе данных верна, убедитесь, что имя хоста, указанное в конфигурации, разрешает подключение к базе данных. Попробуйте подключиться к базе данных вручную с настроенным именем пользователя и именем хоста/доменом. При необходимости разрешите пользователю db подключаться из нужного домена. Перестройте приложение с правильными конфигурациями базы данных, а затем разверните его.

person packet    schedule 01.04.2017