forum.bitel.ru http://forum.bitel.ru/ |
|
Глобальный скрипт(java.sql.SQLException: Can't call commit) (CRM) http://forum.bitel.ru/viewtopic.php?f=22&t=9017 |
Страница 1 из 1 |
Автор: | e.fatoby [ 04 мар 2014, 11:33 ] |
Заголовок сообщения: | Глобальный скрипт(java.sql.SQLException: Can't call commit) |
Второй месяц наблюдается проблема с выполнением глобального скрипта планировщиком. Скрипт выдергивает абонентов определенной группы и добавляет временный лимит.Скрипт выполняется перед снятием абонентской платы,он вытаскивает значение абонентской платы,текущий баланс и смотрит насколько изменится баланс после снятия абоненткой платы,если текущего лимита недостаточно,чтобы абонент продолжал работать,меняет значение лимита,точнее снижает его на время. Вручную скрипт выполняется нормально,однако уже не первый месяц автоматически планировщиком он не отрабатывает и выдает следующую ошибку: ----------------------------------------------------------------------------------------------------------- 03-01/00:00:02 INFO [Thread-3] TaskExecuter - TaskExecuter => reloadTasks() 03-01/00:00:02 INFO [Thread-3] TaskExecuter - Task #1: bitel.billing.server.npay.Calculator 03-01/00:00:02 INFO [Thread-3] TaskExecuter - Task #2: bitel.billing.server.script.global.bean.GlobalScriptTimer 03-01/00:00:02 INFO [Thread-3] TaskExecuter - Task #3: bitel.billing.server.contract.LimitRestorer 03-01/01:20:02 INFO [Thread-3] TaskExecuter - Starting periodic task #2: bitel.billing.server.script.global.bean.GlobalScriptTimer 03-01/01:20:02 INFO [pool-2-thread-1] ChangeLimit - SELECT id FROM contract WHERE gr&(1<<6) > 0; 03-01/01:20:02 INFO [pool-2-thread-1] ChangeLimit - SELECT id FROM contract WHERE gr&(1<<6) > 0; 03-01/01:20:02 INFO [pool-2-thread-1] ChangeLimit - SELECT id FROM contract WHERE gr&(1<<6) > 0;147 03-01/01:20:02 INFO [pool-2-thread-1] ChangeLimit - abonCost=30.0 03-01/01:20:02 ERROR [pool-2-thread-1] LoggingPrintStream - ru.bitel.bgbilling.common.BGException: java.sql.SQLException: Can't call commit when autocommit=true 03-01/01:20:02 ERROR [pool-2-thread-1] LoggingPrintStream - at bitel.billing.server.contract.bean.LimitManager.lowLimit(LimitManager.java:692) 03-01/01:20:02 ERROR [pool-2-thread-1] LoggingPrintStream - at ChangeLimit.execute(ChangeLimit.java:70) 03-01/01:20:02 ERROR [pool-2-thread-1] LoggingPrintStream - at ru.bitel.bgbilling.kernel.script.server.bean.GlobalScriptInvoker.invoke(GlobalScriptInvoker.jav a:22) 03-01/01:20:02 ERROR [pool-2-thread-1] LoggingPrintStream - at ru.bitel.bgbilling.kernel.script.server.GlobalScriptServiceImpl.executeGlobalScript(GlobalScrip tServiceImpl.java:75) 03-01/01:20:02 ERROR [pool-2-thread-1] LoggingPrintStream - at bitel.billing.server.script.global.bean.GlobalScriptTimer.executeJava(GlobalScriptTimer.java:81 ) 03-01/01:20:02 ERROR [pool-2-thread-1] LoggingPrintStream - at bitel.billing.server.script.global.bean.GlobalScriptTimer.executeTask(GlobalScriptTimer.java:48 ) 03-01/01:20:02 ERROR [pool-2-thread-1] LoggingPrintStream - at ru.bitel.bgbilling.kernel.task.server.TaskBase.run(TaskBase.java:74) 03-01/01:20:02 ERROR [pool-2-thread-1] LoggingPrintStream - at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) 03-01/01:20:02 ERROR [pool-2-thread-1] LoggingPrintStream - at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) 03-01/01:20:02 ERROR [pool-2-thread-1] LoggingPrintStream - at java.lang.Thread.run(Thread.java:722) 03-01/01:20:02 ERROR [pool-2-thread-1] LoggingPrintStream - Caused by: java.sql.SQLException: Can't call commit when autocommit=true 03-01/01:20:02 ERROR [pool-2-thread-1] LoggingPrintStream - at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:934) 03-01/01:20:02 ERROR [pool-2-thread-1] LoggingPrintStream - at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:931) 03-01/01:20:02 ERROR [pool-2-thread-1] LoggingPrintStream - at com.mysql.jdbc.ConnectionImpl.commit(ConnectionImpl.java:1646) 03-01/01:20:02 ERROR [pool-2-thread-1] LoggingPrintStream - at org.apache.commons.dbcp.DelegatingConnection.commit(DelegatingConnection.java:334) 03-01/01:20:02 ERROR [pool-2-thread-1] LoggingPrintStream - at ru.bitel.bgbilling.server.util.PoolGuardConnectionWrapper.commit(PoolGuardConnectionWrapper.jav a:73) 03-01/01:20:02 ERROR [pool-2-thread-1] LoggingPrintStream - at bitel.billing.server.contract.bean.LimitManager.lowLimit(LimitManager.java:688) 03-01/01:20:02 ERROR [pool-2-thread-1] LoggingPrintStream - ... 9 more ------------------------------------------------------------------------------------------------------------------------------------- Вот собственно сам скрипт: public class ChangeLimit extends GlobalScriptBase { Logger logger = Logger.getLogger( ChangeLimit.class); public Float getAbonPays(Integer cid,Connection con) throws Exception { String query = "SELECT n.data FROM contract c LEFT JOIN contract_tariff AS t ON c.id=t.cid LEFT JOIN tariff_plan AS p ON t.tpid=p.id LEFT JOIN module_tariff_tree as m ON m.tree_id=p.tree_id LEFT JOIN mtree_node as n ON n.mtree_id=m.id WHERE m.mid=2 and c.id = ? and n.type like '%cost%' and ( t.date2 is NULL or t.date2 > now());"; PreparedStatement getAbonPay = con.prepareStatement( query ); Float abonCost = 0.0f; getAbonPay.setInt( 1,cid ); ResultSet abonPay = getAbonPay.executeQuery(); while ( abonPay.next() ) { String abonPayCostData = abonPay.getString(1); String[] abonPayCostDataArray = abonPayCostData.split("%"); abonCost = abonCost + Float.parseFloat(abonPayCostDataArray[1].split("&")[1]); } logger.info("abonCost=" + abonCost); return abonCost; } @Override public void execute( Setup setup, ConnectionSet connectionSet ) throws Exception { Connection con = connectionSet.getConnection(); ContractManager cmanager = new ContractManager(con); BalanceUtils bmanager = new BalanceUtils(con); LimitManager lmanager = new LimitManager(con); Date curdate = new Date(); String sqlreq = "SELECT id FROM contract WHERE gr&(1<<6) > 0;"; logger.info(sqlreq); try { PreparedStatement ps = con.prepareStatement(sqlreq); ResultSet rs = ps.executeQuery(); logger.info(sqlreq); while (rs.next()) { Integer cid = rs.getInt("id"); logger.info(sqlreq + cid ); Contract contract = cmanager.getContractById(cid); BigDecimal curLimit = contract.getBalanceLimit(); BigDecimal curBalance = bmanager.getBalance(curdate,cid); BigDecimal stockval = new BigDecimal("-10.0"); String abonDebtSt = Float.toString(getAbonPays(cid,con)); BigDecimal abonDebt = new BigDecimal(abonDebtSt); BigDecimal Debt = curBalance.subtract(abonDebt); if ( curLimit.compareTo(Debt) > 0 ) { lmanager.lowLimit(cid,curLimit.subtract(Debt.add(stockval)),19); logger.info("Договор №" + cid + " " + contract.getComment() + "лимит временно изменен со значения:" + curLimit + " до значения:" + Debt.add(stockval) + " на " + curLimit.subtract(Debt.add(stockval))); } } } catch (SQLException ex ) { logger.info("Message: " + ex.getMessage()); } } } |
Автор: | e.fatoby [ 04 мар 2014, 11:35 ] |
Заголовок сообщения: | Re: Глобальный скрипт(java.sql.SQLException: Can't call comm |
А да забыл: Информация о версии: Клиент: вер. 5.2 сборка 1189 от 23.07.2013 15:29:21 os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.6.0_26 ВНИМАНИЕ: Необходимо обновить таймзоны Сервер: вер. 5.2 сборка 1526 от 23.07.2013 15:29:29 os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.7.0_01 ВНИМАНИЕ: Спецификация версии 1.7 не рекомендуется bill вер. 5.2 сборка 309 от 18.07.2013 14:33:12 card вер. 5.2 сборка 203 от 21.06.2013 20:24:27 dba вер. 5.2 сборка 150 от 12.10.2012 20:00:49 inet вер. 5.2 сборка 1213 от 24.07.2013 15:33:55 npay вер. 5.2 сборка 204 от 15.07.2013 19:23:12 reports вер. 5.2 сборка 193 от 28.02.2013 10:57:03 rscm вер. 5.2 сборка 172 от 24.04.2013 11:02:54 voiceip вер. 5.2 сборка 207 от 22.07.2013 15:28:03 |
Автор: | stark [ 04 мар 2014, 17:49 ] |
Заголовок сообщения: | Re: Глобальный скрипт(java.sql.SQLException: Can't call comm |
e.fatoby писал(а): А да забыл: Информация о версии: Клиент: вер. 5.2 сборка 1189 от 23.07.2013 15:29:21 os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.6.0_26 ВНИМАНИЕ: Необходимо обновить таймзоны Сервер: вер. 5.2 сборка 1526 от 23.07.2013 15:29:29 os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.7.0_01 ВНИМАНИЕ: Спецификация версии 1.7 не рекомендуется bill вер. 5.2 сборка 309 от 18.07.2013 14:33:12 card вер. 5.2 сборка 203 от 21.06.2013 20:24:27 dba вер. 5.2 сборка 150 от 12.10.2012 20:00:49 inet вер. 5.2 сборка 1213 от 24.07.2013 15:33:55 npay вер. 5.2 сборка 204 от 15.07.2013 19:23:12 reports вер. 5.2 сборка 193 от 28.02.2013 10:57:03 rscm вер. 5.2 сборка 172 от 24.04.2013 11:02:54 voiceip вер. 5.2 сборка 207 от 22.07.2013 15:28:03 Обновитесь..У нас уже давно autocommit=true в глобальных скриптах, у вас старая версия. |
Автор: | e.fatoby [ 01 апр 2014, 10:54 ] |
Заголовок сообщения: | Re: Глобальный скрипт(java.sql.SQLException: Can't call comm |
Обновил вчера версию софта: Информация о версии: Клиент: вер. 5.2 сборка 1205 от 19.03.2014 15:16:50 os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.6.0_26 ВНИМАНИЕ: Необходимо обновить таймзоны Сервер: вер. 5.2 сборка 1584 от 27.03.2014 14:31:04 os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.7.0_01 ВНИМАНИЕ: Спецификация версии 1.7 не рекомендуется bill вер. 5.2 сборка 317 от 05.02.2014 19:22:08 card вер. 5.2 сборка 205 от 03.12.2013 13:09:40 dba вер. 5.2 сборка 151 от 01.10.2013 17:52:42 inet вер. 5.2 сборка 1301 от 31.03.2014 16:27:05 npay вер. 5.2 сборка 206 от 14.11.2013 18:57:49 reports вер. 5.2 сборка 196 от 23.01.2014 15:06:15 rscm вер. 5.2 сборка 172 от 24.04.2013 11:02:54 voiceip вер. 5.2 сборка 209 от 23.01.2014 18:25:25 Ничего не изменилось,сегодня скрипт вновь не отработал,выдал ту же самую ошибку: 4-01/01:20:00 ERROR [pool-2-thread-1] LoggingPrintStream - ru.bitel.bgbilling.common.BGException: java.sql.SQLException: Can't call commit when autocommit=true 04-01/01:20:00 ERROR [pool-2-thread-1] LoggingPrintStream - at bitel.billing.server.contract.bean.LimitManager.lowLimit(LimitManager.java:692) 04-01/01:20:00 ERROR [pool-2-thread-1] LoggingPrintStream - at ChangeLimit.execute(ChangeLimit.java:70) 04-01/01:20:00 ERROR [pool-2-thread-1] LoggingPrintStream - at ru.bitel.bgbilling.kernel.script.server.bean.GlobalScriptInvoker.invoke(GlobalScriptInvoker.java:22) 04-01/01:20:00 ERROR [pool-2-thread-1] LoggingPrintStream - at ru.bitel.bgbilling.kernel.script.server.GlobalScriptServiceImpl.executeGlobalScript(GlobalScriptServiceImpl.java:75) 04-01/01:20:00 ERROR [pool-2-thread-1] LoggingPrintStream - at bitel.billing.server.script.global.bean.GlobalScriptTimer.executeJava(GlobalScriptTimer.java:81) 04-01/01:20:00 ERROR [pool-2-thread-1] LoggingPrintStream - at bitel.billing.server.script.global.bean.GlobalScriptTimer.executeTask(GlobalScriptTimer.java:48) 04-01/01:20:00 ERROR [pool-2-thread-1] LoggingPrintStream - at ru.bitel.bgbilling.kernel.task.server.TaskBase.run(TaskBase.java:74) 04-01/01:20:00 ERROR [pool-2-thread-1] LoggingPrintStream - at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) 04-01/01:20:00 ERROR [pool-2-thread-1] LoggingPrintStream - at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) 04-01/01:20:00 ERROR [pool-2-thread-1] LoggingPrintStream - at java.lang.Thread.run(Thread.java:722) 04-01/01:20:00 ERROR [pool-2-thread-1] LoggingPrintStream - Caused by: java.sql.SQLException: Can't call commit when autocommit=true 04-01/01:20:00 ERROR [pool-2-thread-1] LoggingPrintStream - at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:934) 04-01/01:20:00 ERROR [pool-2-thread-1] LoggingPrintStream - at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:931) 04-01/01:20:00 ERROR [pool-2-thread-1] LoggingPrintStream - at com.mysql.jdbc.ConnectionImpl.commit(ConnectionImpl.java:1646) 04-01/01:20:00 ERROR [pool-2-thread-1] LoggingPrintStream - at org.apache.commons.dbcp.DelegatingConnection.commit(DelegatingConnection.java:334) 04-01/01:20:00 ERROR [pool-2-thread-1] LoggingPrintStream - at ru.bitel.bgbilling.server.util.PoolGuardConnectionWrapper.commit(PoolGuardConnectionWrapper.java:73) 04-01/01:20:00 ERROR [pool-2-thread-1] LoggingPrintStream - at bitel.billing.server.contract.bean.LimitManager.lowLimit(LimitManager.java:688) Вручную нормально отработал. |
Автор: | stark [ 02 апр 2014, 13:06 ] |
Заголовок сообщения: | Re: Глобальный скрипт(java.sql.SQLException: Can't call comm |
Проверим. Возможно ошибка. |
Автор: | Artur [ 03 апр 2014, 15:32 ] |
Заголовок сообщения: | Re: Глобальный скрипт(java.sql.SQLException: Can't call comm |
Здравствуйте! Действительно, подобную ситуацию получилось воспроизвести. Будем разбираться и исправлять. |
Автор: | Artur [ 03 апр 2014, 17:06 ] |
Заголовок сообщения: | Re: Глобальный скрипт(java.sql.SQLException: Can't call comm |
Исправлено для всех текущих версий. Ожидайте в ближайшем обновлении. |
Автор: | Akhmat [ 30 дек 2016, 13:52 ] |
Заголовок сообщения: | Re: Глобальный скрипт(java.sql.SQLException: Can't call comm |
Добрый и с наступающим друзья ![]() Код: Method Invocation chargeService.chargeUpdate : at Line: 137 : in file: Акция "Благодарность за доверие" : chargeService .chargeUpdate ( ch ) Target exception: ru.bitel.bgbilling.common.BGException: java.sql.SQLException: Can't call commit when autocommit=true Код: Информация о версии: Клиент: вер. 6.2.848 / 14.12.2016 14:30:47 os: Windows 7; java: Java HotSpot(TM) Client VM, v.1.8.0_45 Сервер: вер. 6.2.1145 / 30.11.2016 17:54:18 os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_111 вручную если запускать, отрабатывает, по планировщику ошибка. BGBS скрипт |
Автор: | barguzin2 [ 30 дек 2016, 13:58 ] |
Заголовок сообщения: | Re: Глобальный скрипт(java.sql.SQLException: Can't call comm |
Да, кстати, тоже натыкался на такую ошибку, только при вызове PaymentService из дин.кода через планировщик. При ручном запуске - всё ОК. |
Автор: | Artur [ 30 дек 2016, 14:05 ] |
Заголовок сообщения: | Re: Глобальный скрипт(java.sql.SQLException: Can't call comm |
Здравствуйте. Покажите конфигурацию задачи. |
Автор: | barguzin2 [ 30 дек 2016, 14:09 ] |
Заголовок сообщения: | Re: Глобальный скрипт(java.sql.SQLException: Can't call comm |
Как обычно type=1 tids=5 |
Автор: | Artur [ 30 дек 2016, 14:13 ] |
Заголовок сообщения: | Re: Глобальный скрипт(java.sql.SQLException: Can't call comm |
Попробуйте указать в конфигурации задачи опцию Код: autocommit=false
|
Автор: | Akhmat [ 30 дек 2016, 14:14 ] |
Заголовок сообщения: | Re: Глобальный скрипт(java.sql.SQLException: Can't call comm |
у меня tids=12 переделал на tids=12 autocommit=false посмотрим |
Автор: | Akhmat [ 08 янв 2017, 13:56 ] |
Заголовок сообщения: | Re: Глобальный скрипт(java.sql.SQLException: Can't call comm |
с autocommit=false все работает |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |