forum.bitel.ru
http://forum.bitel.ru/

Незакрытые preparedStatement (CRM)
http://forum.bitel.ru/viewtopic.php?f=22&t=7369
Страница 1 из 12

Автор:  Cromeshnic [ 01 ноя 2012, 07:31 ]
Заголовок сообщения:  Незакрытые preparedStatement

В логах постоянно проскакивают подобные сообщения:

Код:
scheduler 11-01/09:45:31 ERROR [pool-2-thread-10] DefaultServerSetup - Many statements was open at connection close:
com.mysql.jdbc.ServerPreparedStatement[2045] - SELECT * FROM dispatch_dispatch LEFT JOIN dispatch_sender_type ON dispatch_dispatch.sender_type_id=dispatch_sender_type.id ORDER BY dispatch_dispatch.title
<...>

java.lang.RuntimeException
        at ru.bitel.bgbilling.server.util.DefaultServerSetup$2$1.close(DefaultServerSetup.java:480)
        at ru.bitel.bgbilling.server.util.PoolGuardConnectionWrapper.close(PoolGuardConnectionWrapper.java:47)
        at ru.bitel.common.sql.ConnectionSet.recycle(ConnectionSet.java:261)
        at ru.bitel.bgbilling.kernel.base.server.DefaultContext.destroy(DefaultContext.java:37)
        at ru.bitel.bgbilling.kernel.container.managed.ServerContext.destroy(ServerContext.java:396)
        at ru.bitel.bgbilling.plugins.dispatch.server.DispatchWorker.executeTask(DispatchWorker.java:126)
        at ru.bitel.bgbilling.kernel.task.server.TaskBase.run(TaskBase.java:74)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:662)


Сами запросы могут быть разными. Иногда это запросы из моих скриптов, иногда - в коде разработчиков.
Причина - незакрытые PreparedStatement-ы.

Например, в данном случае:
ru.bitel.bgbilling.plugins.dispatch.server.dao.SubscriptionDao:
Код:
private List<Contact> getContactsForSubscription(ContactDao cm, int subscriptionId)
    throws SQLException, BGException
  {
    List result = new ArrayList();
    String query = "SELECT dispatch_contact.* FROM dispatch_subscription_contact as cont  LEFT JOIN dispatch_contact ON dispatch_contact.id=cont.contact_id WHERE cont.subscription_id=?";

    PreparedStatement ps = this.con.prepareStatement(query);
    ps.setInt(1, subscriptionId);
    ResultSet rs = ps.executeQuery();
    while (rs.next())
    {
      result.add(cm.getContactFromRS(rs));
    }
    return result;
  }

- забыли сделать ps.close();

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

Автор:  Cromeshnic [ 01 ноя 2012, 07:39 ]
Заголовок сообщения:  Re: Незакрытые preparedStatement

Итак:
Сервер: вер. 5.2 сборка 1309 от 08.10.2012 13:30:45
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.6.0_22
ru.bitel.bgbilling.plugins.dispatch вер. 5.2 сборка 44 от 01.10.2012 12:53:04

Цитата:
com.mysql.jdbc.JDBC4PreparedStatement@59e5d96a: SELECT * FROM dispatch_message WHERE dispatch_id=2 ORDER BY id
com.mysql.jdbc.JDBC4PreparedStatement@7525e2d7: SELECT dispatch_contact.* FROM dispatch_subscription_contact as cont LEFT JOIN dispatch_contact ON dispatch_contact.id=cont.contact_id WHERE cont.subscription_id=517

- второй точно должны поправить разработчики, а вот с первым - не факт.

Начал рыться в логах и исходниках - много запросов типа SELECT * FROM ...
Они вызываются в коде битела во всяких Dao (data access object), типа TariffOptionDao, ContractDao и т.п.
Закрываться такие preparedStatement-ы должны явно тем, кто использует этот Dao вызовом метода recycle():
Код:
TariffOptionDao toDao = ...
<... поработали ...>
toDao.recycle();


Поэтому совет всем скриптописцам:
Используешь Dao - делай recycle()!
Я вот не знал, сейчас буду искать у себя по коду.

Автор:  Cromeshnic [ 01 ноя 2012, 08:26 ]
Заголовок сообщения:  Re: Незакрытые preparedStatement

Сервер: вер. 5.2 сборка 1309 от 08.10.2012 13:30:45
dialup вер. 5.2 сборка 354 от 01.10.2012 12:52:48

Ещё несколько - 100% Бител:

Код:
com.mysql.jdbc.ServerPreparedStatement[1965] - SELECT tariff_plan.id FROM contract_tree_link LEFT JOIN module_tariff_tree ON module_tariff_tree.tree_id=contract_tree_link.tree_id LEFT JOIN tariff_plan ON tariff_plan.tree_id=module_tariff_tree.parent_tree WHERE contract_tree_link.cid=184486 AND tariff_plan.id IS NOT NULL AND ('2012-11-01' IS NULL OR (( date1 IS NULL OR date1<='2012-11-01' ) AND ( date2 IS NULL OR date2>='2012-11-01' )))

- не закрыт ps в bitel.billing.server.contract.bean.PersonalTariffManager.getParentTreeTariffIds

Код:
com.mysql.jdbc.PreparedStatement@60274688: DELETE FROM session_detail_1_201210 WHERE session_id=336503 AND dtime>='2012-10-27' AND dtime<'2012-10-28' AND sid IN (8,9,10,141,140,7)

- SessionTrafficCache.flushCache()

Код:
com.mysql.jdbc.ServerPreparedStatement[6337] - INSERT INTO log_function_process_201211 (cid, time, title, data) VALUES (...

- FunctionManager.logFunctionProcess()

Автор:  skyb [ 01 ноя 2012, 08:53 ]
Заголовок сообщения:  Re: Незакрытые preparedStatement

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

Автор:  stark [ 01 ноя 2012, 13:20 ]
Заголовок сообщения:  Re: Незакрытые preparedStatement

Исправлено. В следующем обновлении будет

Автор:  stark [ 01 ноя 2012, 13:31 ]
Заголовок сообщения:  Re: Незакрытые preparedStatement

Вообще у нас один герой нашел все такие места в 5.3 и исправил. Но мы боимся продукт его героических усилий накатить на 5.2, так слишком много изменений и вероятность ошибок очень велика.Лучше будем исправлять потихоньку , по запросу.

Автор:  skyb [ 01 ноя 2012, 13:52 ]
Заголовок сообщения:  Re: Незакрытые preparedStatement

закрепите тему!!!

Автор:  Amir [ 01 ноя 2012, 14:03 ]
Заголовок сообщения:  Re: Незакрытые preparedStatement

Дополнительно хочу отметить, что это не совсем ошибка, а скорее предупреждение.
Statement все же закрывается при закрытии Connection, т.е. после окончания выполнения действия/задачи и т.п.
Но в отдельных случаях (обычно в задачах планировщика) может плохо влиять на производительность (из-за внутренней логики пула DBCP - например, если работать напрямую с mysql JDBC Connection, то все работает также быстро), а также при использовании serverPreparedStatement - количество открытых внутри mysql PreparedStatement'ов увеличивается, а оно обычно ограничено.

Автор:  Dog [ 01 ноя 2012, 16:34 ]
Заголовок сообщения:  Re: Незакрытые preparedStatement

не знаю, сюда ли, но аккаунт сервер при старте вот такое выдает:
Код:
com.mysql.jdbc.JDBC4PreparedStatement@1f2f29d: SELECT trafficTypeId, SUM(amount), MIN(day) as hh FROM inet_session_detail_20 as detail WHERE sessionId=937926 AND trafficTypeId=0 GROUP BY trafficTypeId

java.lang.RuntimeException
        at ru.bitel.bgbilling.server.util.DefaultServerSetup$2$1.close(DefaultServerSetup.java:480)
        at ru.bitel.bgbilling.server.util.PoolGuardConnectionWrapper.close(PoolGuardConnectionWrapper.java:47)
        at ru.bitel.common.sql.ConnectionSet.recycle(ConnectionSet.java:261)
        at ru.bitel.bgbilling.kernel.base.server.DefaultContext.destroy(DefaultContext.java:37)
        at ru.bitel.bgbilling.kernel.container.managed.ServerContext.destroy(ServerContext.java:396)
        at ru.bitel.bgbilling.modules.inet.accounting.Accounting.startImpl(Accounting.java:304)
        at ru.bitel.bgbilling.modules.inet.accounting.Accounting.start(Accounting.java:212)
        at ru.bitel.bgbilling.kernel.application.server.Application.application(Application.java:239)
        at ru.bitel.bgbilling.kernel.application.server.Application.<init>(Application.java:154)
        at ru.bitel.bgbilling.kernel.application.server.Application.main(Application.java:742)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at ru.bitel.common.bootstrap.Boot.boot(Boot.java:129)
        at ru.bitel.common.bootstrap.Boot.main(Boot.java:178)

Автор:  stark [ 01 ноя 2012, 18:55 ]
Заголовок сообщения:  Re: Незакрытые preparedStatement

Dog писал(а):
не знаю, сюда ли, но аккаунт сервер при старте вот такое выдает:
Код:
com.mysql.jdbc.JDBC4PreparedStatement@1f2f29d: SELECT trafficTypeId, SUM(amount), MIN(day) as hh FROM inet_session_detail_20 as detail WHERE sessionId=937926 AND trafficTypeId=0 GROUP BY trafficTypeId

java.lang.RuntimeException
        at ru.bitel.bgbilling.server.util.DefaultServerSetup$2$1.close(DefaultServerSetup.java:480)
        at ru.bitel.bgbilling.server.util.PoolGuardConnectionWrapper.close(PoolGuardConnectionWrapper.java:47)
        at ru.bitel.common.sql.ConnectionSet.recycle(ConnectionSet.java:261)
        at ru.bitel.bgbilling.kernel.base.server.DefaultContext.destroy(DefaultContext.java:37)
        at ru.bitel.bgbilling.kernel.container.managed.ServerContext.destroy(ServerContext.java:396)
        at ru.bitel.bgbilling.modules.inet.accounting.Accounting.startImpl(Accounting.java:304)
        at ru.bitel.bgbilling.modules.inet.accounting.Accounting.start(Accounting.java:212)
        at ru.bitel.bgbilling.kernel.application.server.Application.application(Application.java:239)
        at ru.bitel.bgbilling.kernel.application.server.Application.<init>(Application.java:154)
        at ru.bitel.bgbilling.kernel.application.server.Application.main(Application.java:742)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at ru.bitel.common.bootstrap.Boot.boot(Boot.java:129)
        at ru.bitel.common.bootstrap.Boot.main(Boot.java:178)


Исправлено . В следующем обновлении будет.

Автор:  Dog [ 26 ноя 2012, 20:00 ]
Заголовок сообщения:  Re: Незакрытые preparedStatement

в последнем обновлении Inet у аккаунтинг сервера вот такое вываливается при старте
Код:
com.mysql.jdbc.JDBC4PreparedStatement@c8ca96: SELECT * FROM inet_serv_type_20 WHERE sessionInitiationType=0 ORDER BY id

java.lang.RuntimeException
        at ru.bitel.bgbilling.server.util.DefaultServerSetup$2$1.close(DefaultServerSetup.java:480)
        at ru.bitel.bgbilling.server.util.PoolGuardConnectionWrapper.close(PoolGuardConnectionWrapper.java:47)
        at ru.bitel.common.sql.ConnectionSet.recycle(ConnectionSet.java:261)
        at ru.bitel.bgbilling.kernel.base.server.DefaultContext.destroy(DefaultContext.java:37)
        at ru.bitel.bgbilling.kernel.container.managed.ServerContext.destroy(ServerContext.java:396)
        at ru.bitel.bgbilling.modules.inet.accounting.Accounting.startImpl(Accounting.java:400)
        at ru.bitel.bgbilling.modules.inet.accounting.Accounting.start(Accounting.java:224)
        at ru.bitel.bgbilling.kernel.application.server.Application.application(Application.java:239)
        at ru.bitel.bgbilling.kernel.application.server.Application.<init>(Application.java:154)
        at ru.bitel.bgbilling.kernel.application.server.Application.main(Application.java:742)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at ru.bitel.common.bootstrap.Boot.boot(Boot.java:129)
        at ru.bitel.common.bootstrap.Boot.main(Boot.java:178)

Автор:  nikav80 [ 25 дек 2012, 23:44 ]
Заголовок сообщения:  Re: Незакрытые preparedStatement

12-21/19:55:53 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] DefaultServerSetup - Many statements was open at connection close:
com.mysql.jdbc.ServerPreparedStatement[3491] - (select t1.val, t1.cid from contract_parameter_type_2_log as t1 left join contract as t4 on t4.id=t1.cid left join address_city as t2 on t2.id=1 left join address_street as t3 on t3.id=15 where t1.pid=8 and (t1.val like concat('%',t2.title,'%') and t1.val like concat('%',t3.title,'%') and t1.val like '%Рґ. 1%')) union (select t1.address, t1.cid from contract_parameter_type_2 as t1 left join contract as t4 on t4.id=t1.cid left join address_city as t2 on t2.id=1 left join address_street as t3 on t3.id=15 where t1.pid=8 and (t1.address like concat('%',t2.title,'%') and t1.address like concat('%',t3.title,'%') and t1.address like '%Рґ. 1%') ) order by 1
com.mysql.jdbc.ServerPreparedStatement[3492] - select t1.address, t1.cid, t4.title, t4.status, t5.val, t6.val, t7.val from contract_parameter_type_2 as t1 left join contract_parameter_type_1 as t5 on t5.cid=t1.cid and t5.pid=1 left join contract_parameter_type_1 as t6 on t6.cid=t1.cid and t6.pid=2 left join contract_parameter_type_1 as t7 on t7.cid=t1.cid and t7.pid=3 left join contract as t4 on t4.id=t1.cid where t1.pid=8 and t1.address='xxxxxxxxxxxxxxxxxxxxxxxxxxxx' and t1.cid=111
com.mysql.jdbc.ServerPreparedStatement[3493] - select t1.val, t1.cid, t1.dt_change, t4.title, t4.status, t5.val, t6.val, t7.val from contract_parameter_type_2_log as t1 left join contract_parameter_type_1 as t5 on t5.cid=t1.cid and t5.pid=1 left join contract_parameter_type_1 as t6 on t6.cid=t1.cid and t6.pid=2 left join contract_parameter_type_1 as t7 on t7.cid=t1.cid and t7.pid=3 left join contract as t4 on t4.id=t1.cid where t1.pid=8 and t1.val='xxxxxxxxxxxxxxxxxxxxxxxxxxxx' and t1.cid=111

Автор:  vdd [ 26 дек 2012, 13:47 ]
Заголовок сообщения:  Re: Незакрытые preparedStatement

А архитектурно прибить проблему никак нельзя?
В Яве нет рельной альтернативы auto_ptr из стандартной либы c++?

Автор:  Amir [ 26 дек 2012, 16:05 ]
Заголовок сообщения:  Re: Незакрытые preparedStatement

Цитата:
А архитектурно прибить проблему никак нельзя?
Есть обработка при сборке мусора, но обычное закрытие отработает все равно гораздо раньше. Просто иногда желательно закрывать (освобождать) еще раньше.

Автор:  vdd [ 26 дек 2012, 16:27 ]
Заголовок сообщения:  Re: Незакрытые preparedStatement

Amir писал(а):
Цитата:
А архитектурно прибить проблему никак нельзя?
Есть обработка при сборке мусора, но обычное закрытие отработает все равно гораздо раньше. Просто иногда желательно закрывать (освобождать) еще раньше.

А сборщик мусора высвобождает ресурсы!?
Но вопрос как раз об высвобождении в нужное время. Нет таких решений в Java?

Автор:  dimOn [ 26 дек 2012, 17:31 ]
Заголовок сообщения:  Re: Незакрытые preparedStatement

Есть в 7 яве try-with-resources, но оно тоже не всегда от всего спасёт в нашем случае.

Автор:  vdd [ 26 дек 2012, 17:46 ]
Заголовок сообщения:  Re: Незакрытые preparedStatement

dimOn писал(а):
Есть в 7 яве try-with-resources, но оно тоже не всегда от всего спасёт в нашем случае.

Надо полагать, это аналог шарпового using(){}. Если так, то до auto_ptr ему как до Плутона.
Я слышал от знакомых ява-программеров, что какие-то там Inversion-Of-Control архитектуры позволяют гарантированно управлять ресурсами в Ява. Врут?

Автор:  dimOn [ 26 дек 2012, 17:57 ]
Заголовок сообщения:  Re: Незакрытые preparedStatement

причём тут auto_ptr? В java все ссылки всегда и есть auto_ptr. Но за руками выделенными ресурсами как оно интересно должно следить? Нету нигде такого, потому что в принципе невозможно.

Автор:  vdd [ 26 дек 2012, 18:03 ]
Заголовок сообщения:  Re: Незакрытые preparedStatement

dimOn писал(а):
В java все ссылки всегда и есть auto_ptr.

Формально, учитывая что GC вызывает деструктор у объекта - да.
Но фактически, из-за того, что в Яве объекты создаются только в куче - НЕТ.

Автор:  dimOn [ 26 дек 2012, 18:10 ]
Заголовок сообщения:  Re: Незакрытые preparedStatement

Не понимаю подоплёки

Автор:  stark [ 14 янв 2013, 15:18 ]
Заголовок сообщения:  Re: Незакрытые preparedStatement

nikav80 писал(а):
12-21/19:55:53 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] DefaultServerSetup - Many statements was open at connection close:
com.mysql.jdbc.ServerPreparedStatement[3491] - (select t1.val, t1.cid from contract_parameter_type_2_log as t1 left join contract as t4 on t4.id=t1.cid left join address_city as t2 on t2.id=1 left join address_street as t3 on t3.id=15 where t1.pid=8 and (t1.val like concat('%',t2.title,'%') and t1.val like concat('%',t3.title,'%') and t1.val like '%Рґ. 1%')) union (select t1.address, t1.cid from contract_parameter_type_2 as t1 left join contract as t4 on t4.id=t1.cid left join address_city as t2 on t2.id=1 left join address_street as t3 on t3.id=15 where t1.pid=8 and (t1.address like concat('%',t2.title,'%') and t1.address like concat('%',t3.title,'%') and t1.address like '%Рґ. 1%') ) order by 1
com.mysql.jdbc.ServerPreparedStatement[3492] - select t1.address, t1.cid, t4.title, t4.status, t5.val, t6.val, t7.val from contract_parameter_type_2 as t1 left join contract_parameter_type_1 as t5 on t5.cid=t1.cid and t5.pid=1 left join contract_parameter_type_1 as t6 on t6.cid=t1.cid and t6.pid=2 left join contract_parameter_type_1 as t7 on t7.cid=t1.cid and t7.pid=3 left join contract as t4 on t4.id=t1.cid where t1.pid=8 and t1.address='xxxxxxxxxxxxxxxxxxxxxxxxxxxx' and t1.cid=111
com.mysql.jdbc.ServerPreparedStatement[3493] - select t1.val, t1.cid, t1.dt_change, t4.title, t4.status, t5.val, t6.val, t7.val from contract_parameter_type_2_log as t1 left join contract_parameter_type_1 as t5 on t5.cid=t1.cid and t5.pid=1 left join contract_parameter_type_1 as t6 on t6.cid=t1.cid and t6.pid=2 left join contract_parameter_type_1 as t7 on t7.cid=t1.cid and t7.pid=3 left join contract as t4 on t4.id=t1.cid where t1.pid=8 and t1.val='xxxxxxxxxxxxxxxxxxxxxxxxxxxx' and t1.cid=111

не могу найти этого в нашем коде . Больше похоже на ваши отчеты или скрипты какие-то.. Версия какая?

Автор:  nikav80 [ 14 янв 2013, 23:00 ]
Заголовок сообщения:  Re: Незакрытые preparedStatement

stark писал(а):
nikav80 писал(а):
12-21/19:55:53 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] DefaultServerSetup - Many statements was open at connection close:
com.mysql.jdbc.ServerPreparedStatement[3491] - (select t1.val, t1.cid from contract_parameter_type_2_log as t1 left join contract as t4 on t4.id=t1.cid left join address_city as t2 on t2.id=1 left join address_street as t3 on t3.id=15 where t1.pid=8 and (t1.val like concat('%',t2.title,'%') and t1.val like concat('%',t3.title,'%') and t1.val like '%Рґ. 1%')) union (select t1.address, t1.cid from contract_parameter_type_2 as t1 left join contract as t4 on t4.id=t1.cid left join address_city as t2 on t2.id=1 left join address_street as t3 on t3.id=15 where t1.pid=8 and (t1.address like concat('%',t2.title,'%') and t1.address like concat('%',t3.title,'%') and t1.address like '%Рґ. 1%') ) order by 1
com.mysql.jdbc.ServerPreparedStatement[3492] - select t1.address, t1.cid, t4.title, t4.status, t5.val, t6.val, t7.val from contract_parameter_type_2 as t1 left join contract_parameter_type_1 as t5 on t5.cid=t1.cid and t5.pid=1 left join contract_parameter_type_1 as t6 on t6.cid=t1.cid and t6.pid=2 left join contract_parameter_type_1 as t7 on t7.cid=t1.cid and t7.pid=3 left join contract as t4 on t4.id=t1.cid where t1.pid=8 and t1.address='xxxxxxxxxxxxxxxxxxxxxxxxxxxx' and t1.cid=111
com.mysql.jdbc.ServerPreparedStatement[3493] - select t1.val, t1.cid, t1.dt_change, t4.title, t4.status, t5.val, t6.val, t7.val from contract_parameter_type_2_log as t1 left join contract_parameter_type_1 as t5 on t5.cid=t1.cid and t5.pid=1 left join contract_parameter_type_1 as t6 on t6.cid=t1.cid and t6.pid=2 left join contract_parameter_type_1 as t7 on t7.cid=t1.cid and t7.pid=3 left join contract as t4 on t4.id=t1.cid where t1.pid=8 and t1.val='xxxxxxxxxxxxxxxxxxxxxxxxxxxx' and t1.cid=111

не могу найти этого в нашем коде . Больше похоже на ваши отчеты или скрипты какие-то.. Версия какая?

Действительно, отчет. :facepalm:

Автор:  lda [ 15 янв 2013, 18:40 ]
Заголовок сообщения:  Re: Незакрытые preparedStatement

В ContractManager.getContractById( cid )
ps не закрывается.


Сервер: вер. 5.2 сборка 1376 от 26.12.2012 17:59:24

Автор:  Amir [ 15 янв 2013, 19:09 ]
Заголовок сообщения:  Re: Незакрытые preparedStatement

Цитата:
В ContractManager.getContractById( cid )
ps не закрывается.
Либо не создавать для одного потока, а значит и соединения к БД, каждый раз новый ContractManager, либо вызывать у него recycle(), после того как стал не нужен.

Автор:  lda [ 15 янв 2013, 19:26 ]
Заголовок сообщения:  Re: Незакрытые preparedStatement

Amir писал(а):
Цитата:
В ContractManager.getContractById( cid )
ps не закрывается.
Либо не создавать для одного потока, а значит и соединения к БД, каждый раз новый ContractManager, либо вызывать у него recycle(), после того как стал не нужен.

Простите, может быть я что то не понимаю.
У вас в функции public Contract getContractById( int cid ) не закрывается ps (PreparedStatement).
Это не является ошибкой которую нужно исправить?
Нельзя просто добавить в код "ps.close();" или так и должно быть?

Автор:  Amir [ 15 янв 2013, 20:24 ]
Заголовок сообщения:  Re: Незакрытые preparedStatement

Так и должно быть - он кэшируется.

Автор:  Cromeshnic [ 16 янв 2013, 07:38 ]
Заголовок сообщения:  Re: Незакрытые preparedStatement

Cromeshnic писал(а):
Используешь Dao - делай recycle()!


http://bgbilling.ru/v5.2/javadoc/bitel/billing/server/contract/bean/ContractManager.html#recycle()

Автор:  lda [ 16 янв 2013, 10:46 ]
Заголовок сообщения:  Re: Незакрытые preparedStatement

Все понятно, спасибо.

Автор:  Jimm [ 21 янв 2013, 14:56 ]
Заголовок сообщения:  Re: Незакрытые preparedStatement

Ув. разработчики!
kernel - класс LimitManager
Насколько я понимаю, довольно много не закрытых PS, в логи ошибок отсюда много летит..

Автор:  skn [ 21 янв 2013, 17:57 ]
Заголовок сообщения:  Re: Незакрытые preparedStatement

Jimm писал(а):
kernel - класс LimitManager. Насколько я понимаю, довольно много не закрытых PS, в логи ошибок отсюда много летит..

подчистили

Страница 1 из 12 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/