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/