|
17.03.2016, 14:27 | #1 |
Участник
|
setConnection для прямых запросов на SQL
Есть такая вещь, как setConnection() - устанавливает отдельное соединение для запроса к таблице, которое существует изолированно от основной транзакции. Например, так работает выделение номеров в NumberSquenceTable.
Вопрос: а можно как-то в отдельном соединении запустить executeQuery()? Возможно, надо просто как-то по-другому инициализировать Connection? X++: ResultSet get(str _sql) { ResultSet rs; Connection con = new Connection(); ; new SqlStatementExecutePermission(_sql).assert(); rs = con.createStatement().executeQuery(_sql); CodeAccessPermission::revertAssert(); return rs; } Последний раз редактировалось Corel; 17.03.2016 в 14:45. |
|
17.03.2016, 14:35 | #2 |
Участник
|
SysOperation запустить ассинхронно?
Какую проблему решить пытаетесь?
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0 |
|
17.03.2016, 14:58 | #3 |
Участник
|
SysOperation - оно для 2012 же только? Тогда не годится.
Задача - вставить значение, полученное во время работы кода, в отдельную таблицу на SQL. Значение обычно получается в глубинах транзакций, а вставить в эту отдельную таблицу пытаются часто и разные АОСы. Поэтому нередки ситуации, когда во время работы долгой обработки, которая дошла до этой вставки, сделала её и пошла дальше, все остальные процессы, которые хотят сделать такую же вставку, вынуждены ждать завершения этой обработки. |
|
17.03.2016, 19:34 | #4 |
Участник
|
Скорее всего на таблице отсутствует уникальный индекс и при вставке записи в нее она блокируется целиком.
PS. Желателен даже Primary Index. |
|
22.03.2016, 11:37 | #5 |
Участник
|
Хм, разве это так работает? На таблице индекса вообще нет, да и нужен ли, если идёт только вставка?
И всё же, если вернуться к изначальному вопросу: возможно ли эту операцию (вызов SQL-запроса) оформить изолированной транзакцией? Или вызов SQL-запроса через Statement.executeQuery() и так изолирован и действительно дело в блокировке все таблицы при любой вставке? |
|
22.03.2016, 17:54 | #6 |
Участник
|
Что бы победить врага, его нужно сначала найти.
Проблемы блокировок разбирались на этом форуме кучу раз. Когда вы найдете таблицу, на которой все стопорится, то это уже будет уже пол дела. Если у вас есть серьезные основания подозревать, что блокировка происходит именно на скулевой-неАХ табличке, то сделайте джоб со вставкой в нее и с помощью двух клиентских сессий проверьте это. Для этого в одной сессии прямо на ttscommit ставите брэк-поинт в джобе, запускаете его и он останавливается, а в другой пытаетесь выполнить джоб целиком. Результат ? Последний раз редактировалось Alexius; 22.03.2016 в 18:17. |
|
22.03.2016, 18:34 | #7 |
Участник
|
Цитата:
Есть 3 типа создаваемых соединений. 3 класса Connection - "поднимает" текущее, уже существующее соединение UserConnection - создает новое соединение, но с реквизитами существующего ODBCConnection - создает новое соединение по указанным реквизитам Зависти от используемого типа соединения. Собственно, давно бы уже проверили Сценарий теста Вам уже подсказали.
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
|
За это сообщение автора поблагодарили: gl00mie (2). |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|