Незакрытые preparedStatement (CRM)

Основная часть программы и общие вопросы по модулям. Установка и настройка BGBillingServer, BGBillingClient.

Незакрытые preparedStatement

Сообщение Cromeshnic » 01 ноя 2012, 07:31

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

$this->bbcode_second_pass_code('', '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:
$this->bbcode_second_pass_code('', '
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
Клиент
 
Сообщения: 3061
Зарегистрирован: 20 апр 2009, 12:03
Откуда: Иркутск

Re: Незакрытые preparedStatement

Сообщение Cromeshnic » 01 ноя 2012, 07:39

Итак:
Сервер: вер. 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

$this->bbcode_second_pass_quote('', 'c')om.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():
$this->bbcode_second_pass_code('', 'TariffOptionDao toDao = ...
<... поработали ...>
toDao.recycle();')

Поэтому совет всем скриптописцам:
Используешь Dao - делай recycle()!
Я вот не знал, сейчас буду искать у себя по коду.
Аватара пользователя
Cromeshnic
Клиент
 
Сообщения: 3061
Зарегистрирован: 20 апр 2009, 12:03
Откуда: Иркутск

Re: Незакрытые preparedStatement

Сообщение Cromeshnic » 01 ноя 2012, 08:26

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

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

$this->bbcode_second_pass_code('', '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

$this->bbcode_second_pass_code('', '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()

$this->bbcode_second_pass_code('', 'com.mysql.jdbc.ServerPreparedStatement[6337] - INSERT INTO log_function_process_201211 (cid, time, title, data) VALUES (...')
- FunctionManager.logFunctionProcess()
Аватара пользователя
Cromeshnic
Клиент
 
Сообщения: 3061
Зарегистрирован: 20 апр 2009, 12:03
Откуда: Иркутск

Re: Незакрытые preparedStatement

Сообщение skyb » 01 ноя 2012, 08:53

предлагаю закрепить тему вверху, очень частая ошибка которая проскакивает как в собственных скриптах, так как и оказалось у разрабов
$this->bbcode_second_pass_code('', '
Клиент: вер. 6.2.714 / 25.05.2015 17:27:15
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
Сервер: вер. 6.2.881 / 22.05.2015 17:56:55
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
')
Помощь по администрированию bgbilling в jabber конференции или Группа в telegram
Стиль программирования - пьяный мастерстер
Разработка мобильных приложений
Аватара пользователя
skyb
Клиент
 
Сообщения: 7166
Зарегистрирован: 03 авг 2009, 18:42
Откуда: Благовещенск

Re: Незакрытые preparedStatement

Сообщение stark » 01 ноя 2012, 13:20

Исправлено. В следующем обновлении будет
stark
Разработчик
 
Сообщения: 8343
Зарегистрирован: 08 ноя 2007, 01:05
Откуда: Уфа

Re: Незакрытые preparedStatement

Сообщение stark » 01 ноя 2012, 13:31

Вообще у нас один герой нашел все такие места в 5.3 и исправил. Но мы боимся продукт его героических усилий накатить на 5.2, так слишком много изменений и вероятность ошибок очень велика.Лучше будем исправлять потихоньку , по запросу.
stark
Разработчик
 
Сообщения: 8343
Зарегистрирован: 08 ноя 2007, 01:05
Откуда: Уфа

Re: Незакрытые preparedStatement

Сообщение skyb » 01 ноя 2012, 13:52

закрепите тему!!!
$this->bbcode_second_pass_code('', '
Клиент: вер. 6.2.714 / 25.05.2015 17:27:15
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
Сервер: вер. 6.2.881 / 22.05.2015 17:56:55
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
')
Помощь по администрированию bgbilling в jabber конференции или Группа в telegram
Стиль программирования - пьяный мастерстер
Разработка мобильных приложений
Аватара пользователя
skyb
Клиент
 
Сообщения: 7166
Зарегистрирован: 03 авг 2009, 18:42
Откуда: Благовещенск

Re: Незакрытые preparedStatement

Сообщение Amir » 01 ноя 2012, 14:03

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

Re: Незакрытые preparedStatement

Сообщение Dog » 01 ноя 2012, 16:34

не знаю, сюда ли, но аккаунт сервер при старте вот такое выдает:
$this->bbcode_second_pass_code('', '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
Клиент
 
Сообщения: 835
Зарегистрирован: 21 сен 2009, 13:01
Откуда: Москва

Re: Незакрытые preparedStatement

Сообщение stark » 01 ноя 2012, 18:55

$this->bbcode_second_pass_quote('Dog', '')е знаю, сюда ли, но аккаунт сервер при старте вот такое выдает:
$this->bbcode_second_pass_code('', '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
Разработчик
 
Сообщения: 8343
Зарегистрирован: 08 ноя 2007, 01:05
Откуда: Уфа

Re: Незакрытые preparedStatement

Сообщение Dog » 26 ноя 2012, 20:00

в последнем обновлении Inet у аккаунтинг сервера вот такое вываливается при старте
$this->bbcode_second_pass_code('', '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)')
Dog
Клиент
 
Сообщения: 835
Зарегистрирован: 21 сен 2009, 13:01
Откуда: Москва

Re: Незакрытые preparedStatement

Сообщение nikav80 » 25 дек 2012, 23:44

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
Версия 6.2
nikav80
Клиент
 
Сообщения: 178
Зарегистрирован: 15 ноя 2011, 17:56

Re: Незакрытые preparedStatement

Сообщение vdd » 26 дек 2012, 13:47

А архитектурно прибить проблему никак нельзя?
В Яве нет рельной альтернативы auto_ptr из стандартной либы c++?
vdd
 
Сообщения: 829
Зарегистрирован: 16 ноя 2007, 16:11

Re: Незакрытые preparedStatement

Сообщение Amir » 26 дек 2012, 16:05

$this->bbcode_second_pass_quote('', '') архитектурно прибить проблему никак нельзя?
Есть обработка при сборке мусора, но обычное закрытие отработает все равно гораздо раньше. Просто иногда желательно закрывать (освобождать) еще раньше.
Аватара пользователя
Amir
Разработчик
 
Сообщения: 5940
Зарегистрирован: 19 дек 2006, 21:04
Вернуться к началу

Re: Незакрытые preparedStatement

Сообщение vdd » 26 дек 2012, 16:27

$this->bbcode_second_pass_quote('Amir', '')$this->bbcode_second_pass_quote('', '') архитектурно прибить проблему никак нельзя?
Есть обработка при сборке мусора, но обычное закрытие отработает все равно гораздо раньше. Просто иногда желательно закрывать (освобождать) еще раньше.

А сборщик мусора высвобождает ресурсы!?
Но вопрос как раз об высвобождении в нужное время. Нет таких решений в Java?
vdd
 
Сообщения: 829
Зарегистрирован: 16 ноя 2007, 16:11
Вернуться к началу

Re: Незакрытые preparedStatement

Сообщение dimOn » 26 дек 2012, 17:31

Есть в 7 яве try-with-resources, но оно тоже не всегда от всего спасёт в нашем случае.
dimOn
 
Сообщения: 5918
Зарегистрирован: 30 май 2008, 15:51

Re: Незакрытые preparedStatement

Сообщение vdd » 26 дек 2012, 17:46

$this->bbcode_second_pass_quote('dimOn', '')сть в 7 яве try-with-resources, но оно тоже не всегда от всего спасёт в нашем случае.

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

Re: Незакрытые preparedStatement

Сообщение dimOn » 26 дек 2012, 17:57

причём тут auto_ptr? В java все ссылки всегда и есть auto_ptr. Но за руками выделенными ресурсами как оно интересно должно следить? Нету нигде такого, потому что в принципе невозможно.
dimOn
 
Сообщения: 5918
Зарегистрирован: 30 май 2008, 15:51

Re: Незакрытые preparedStatement

Сообщение vdd » 26 дек 2012, 18:03

$this->bbcode_second_pass_quote('dimOn', '') java все ссылки всегда и есть auto_ptr.

Формально, учитывая что GC вызывает деструктор у объекта - да.
Но фактически, из-за того, что в Яве объекты создаются только в куче - НЕТ.
vdd
 
Сообщения: 829
Зарегистрирован: 16 ноя 2007, 16:11
Вернуться к началу

Re: Незакрытые preparedStatement

Сообщение dimOn » 26 дек 2012, 18:10

Не понимаю подоплёки
dimOn
 
Сообщения: 5918
Зарегистрирован: 30 май 2008, 15:51

Re: Незакрытые preparedStatement

Сообщение stark » 14 янв 2013, 15:18

$this->bbcode_second_pass_quote('nikav80', '1')2-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

не могу найти этого в нашем коде . Больше похоже на ваши отчеты или скрипты какие-то.. Версия какая?
stark
Разработчик
 
Сообщения: 8343
Зарегистрирован: 08 ноя 2007, 01:05
Откуда: Уфа
Вернуться к началу

Re: Незакрытые preparedStatement

Сообщение nikav80 » 14 янв 2013, 23:00

$this->bbcode_second_pass_quote('stark', '')$this->bbcode_second_pass_quote('nikav80', '1')2-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:
Версия 6.2
nikav80
Клиент
 
Сообщения: 178
Зарегистрирован: 15 ноя 2011, 17:56
Вернуться к началу

Re: Незакрытые preparedStatement

Сообщение lda » 15 янв 2013, 18:40

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


Сервер: вер. 5.2 сборка 1376 от 26.12.2012 17:59:24
lda
Клиент
 
Сообщения: 664
Зарегистрирован: 20 мар 2008, 20:20
Откуда: Россия, Иваново

Re: Незакрытые preparedStatement

Сообщение Amir » 15 янв 2013, 19:09

$this->bbcode_second_pass_quote('', '') ContractManager.getContractById( cid )
ps не закрывается.
Либо не создавать для одного потока, а значит и соединения к БД, каждый раз новый ContractManager, либо вызывать у него recycle(), после того как стал не нужен.
Аватара пользователя
Amir
Разработчик
 
Сообщения: 5940
Зарегистрирован: 19 дек 2006, 21:04
Вернуться к началу

Re: Незакрытые preparedStatement

Сообщение lda » 15 янв 2013, 19:26

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

Простите, может быть я что то не понимаю.
У вас в функции public Contract getContractById( int cid ) не закрывается ps (PreparedStatement).
Это не является ошибкой которую нужно исправить?
Нельзя просто добавить в код "ps.close();" или так и должно быть?
lda
Клиент
 
Сообщения: 664
Зарегистрирован: 20 мар 2008, 20:20
Откуда: Россия, Иваново
Вернуться к началу

Re: Незакрытые preparedStatement

Сообщение Amir » 15 янв 2013, 20:24

Так и должно быть - он кэшируется.
Аватара пользователя
Amir
Разработчик
 
Сообщения: 5940
Зарегистрирован: 19 дек 2006, 21:04

Re: Незакрытые preparedStatement

Сообщение Cromeshnic » 16 янв 2013, 07:38

$this->bbcode_second_pass_quote('Cromeshnic', '')спользуешь Dao - делай recycle()!


http://bgbilling.ru/v5.2/javadoc/bitel/billing/server/contract/bean/ContractManager.html#recycle()
Аватара пользователя
Cromeshnic
Клиент
 
Сообщения: 3061
Зарегистрирован: 20 апр 2009, 12:03
Откуда: Иркутск
Вернуться к началу

Re: Незакрытые preparedStatement

Сообщение lda » 16 янв 2013, 10:46

Все понятно, спасибо.
lda
Клиент
 
Сообщения: 664
Зарегистрирован: 20 мар 2008, 20:20
Откуда: Россия, Иваново

Re: Незакрытые preparedStatement

Сообщение Jimm » 21 янв 2013, 14:56

Ув. разработчики!
kernel - класс LimitManager
Насколько я понимаю, довольно много не закрытых PS, в логи ошибок отсюда много летит..
$this->bbcode_second_pass_code('', '
Клиент: вер. 5.2 сборка 1103 от 08.02.2013 14:46:26
os: Windows XP; java: Java HotSpot(TM) Client VM, v.1.7.0_11
Сервер: вер. 5.2 сборка 1402 от 08.02.2013 14:46:31
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.6.0_22
')
Jimm
 
Сообщения: 36
Зарегистрирован: 11 окт 2012, 08:45
Откуда: Иркутск

Re: Незакрытые preparedStatement

Сообщение skn » 21 янв 2013, 17:57

$this->bbcode_second_pass_quote('Jimm', 'k')ernel - класс LimitManager. Насколько я понимаю, довольно много не закрытых PS, в логи ошибок отсюда много летит..

подчистили
skn
Разработчик
 
Сообщения: 4382
Зарегистрирован: 07 апр 2007, 23:51
Откуда: Уфа, Россия
Вернуться к началу

След.

Вернуться в Ядро системы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron