Добрый день!
1. При срабатывании raiserror в обработчике SQL, после изменения переменных на форме элемента Действие, процесс, как и положено, не двигается дальше, но при этом переменные введённые(изменённые) на форме сохраняются в процессе. Так и задумывалось или это ошибка?
2. Если на элемент Действие наложить таймер с задержкой и альтернативным путём выполнения, а по основному пути в обработчике SQL срабатывает raiserror, форма меняется на
"Данное задание уже выполнено другим пользователем или просрочено", и задание исчезает из Списка заданий пользователя, хотя процесс по основному пути дальше обработчика SQL не пошёл.
Версия сервера 4.3.0 с последними изменениями из trunk на 06.07.2016
Last edit: Artur Nigmatullin 2016-07-06
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Попробовал на тестовом процессе, где убрал всё лишнее, оставив только суть проблемы, там всё ок, переменные не перезаписываются при получении raiserror. Буду разбираться. Извините за беспокойство.
А вот с таймером ошибка воспроизводится
На самом деле, так и не сумел понять закономерность почему в одном процессе задание исчезает после срабатывания raiserror с сообщением "Данное задание уже выполнено другим пользователем или просрочено", а в другом всё работает. И похоже что данная ошибка никак не связана с таймером
Last edit: Artur Nigmatullin 2016-07-07
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Добрый день.
Изменение переменных БП и движение точки управления выполняется в одной транзакции.
Немного описано в http://www.runawfe.org/rus/doc/ProcessTransactions.
Если вы сможете воспроизвести обратное - рапортуйте баг со всем необходимым (БП, процедура и т.п.) - разберёмся.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Не смог создать тестовый процесс, потому что если создаю с нуля ошибку воспроизвести не получается. Поэтому прикрепляю урезанную версию реального процесса, где эта ошибка воспроизводится. БД MSSQL. Сервер и Редактор обновлены 11.07.2016.
Добрый день.
Я попытался воспроизвести проблему на SQL Server 11.0.2100.60, не получилось.
1. Использовал один и тот же источник данных что и для runawfe
2. Настроил другой источник данных
3. Настроил другой источник данных в режиме
<system-properties>
<property name="com.arjuna.ats.arjuna.allowMultipleLastResources" value="true"/>
</system-properties>
Пишет замечание, но логической ошибки всё равно не наблюдаю.
06:28:44,799 WARN [com.arjuna.ats.arjuna] (timerFactory) ARJUNA012142: You have chosen to enable multiple last resources in the transaction manager. This is transactionally unsafe and should not be relied upon.
Данные при откате транзакции не меняются, управление не уходит из задачи.
В связи с этим вопросы:
- сколько используется источников данных в jboss?
- как у вас они настроены
- какая версия SQL Server
Добрый день!
Попробовал на всякий случай создать в mssql чистую базу, ошибка повторилась.
Попробовал тот же процесс но Руну запустил на стандартном h2, при этом raiserror все равно выполняется в базе данных mssql,ошибка не воспроизводится.
в standalone прописаны в блоках datasource 5 источников данных в том числе стандартный h2. Источники данных в mssql описываются так:
Для использования mssql в качестве сервера Руны в файле wfe.custom.database.properties прописаны свойства:
hibernate.dialect=org.hibernate.dialect.SQLServerDialect
hibernate.connection.datasource=java:/mssqlds
версия mssql на котором крутится руна, а также расположены 2 других источника данных, в том числе тот на котором выполняется функция raiserror:
Microsoft SQL Server 2012 - 11.0.2100.60 (X64)
Feb 10 2012 19:39:15
Copyright (c) Microsoft Corporation
Developer Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
версия mssql с ещё одним источником данных:
Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64)
Apr 2 2010 15:48:46
Copyright (c) Microsoft Corporation
Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Думаю что проблема кроется в использовании jta="false": http://www.mastertheboss.com/jboss-server/jboss-datasource/demystifying-datasource-jta-and-xa-settings-on-jboss-wildfly.
По-хорошему нужно использовать XA источники данных (распределённые транзакции).
Использование "com.arjuna.ats.arjuna.allowMultipleLastResources" видимо получше в данном сценарии, но тоже может приводить к проблемам при некоторых условиях (SQL в обработчике закоммитится, а выполнение БП откатится назад).
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Большое спасибо!
Удаление свойства jta="false" в datasource источника данных для сервера самой Руны на mssql помогло.
Datasource mssql выглядит теперь так:
`
<datasource jndi-name="java:/mssqlds" pool-name="java:/mssqlds_Pool">
<connection-url>jdbc:jtds:sqlserver://localhost;DatabaseName=runa_server</connection-url>
<driver>mssql</driver>
<transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation>
<pool>
<min-pool-size>5</min-pool-size>
<max-pool-size>30</max-pool-size>
</pool>
<security>
<user-name>sa</user-name>
<password>sa</password>
</security>
</datasource>
`
В остальных источниках данных mssql не стал пока удалять jta="false" потому, что на самом деле не понимаю, что даёт это свойство, но почему то раньше я его ставил.
Last edit: Artur Nigmatullin 2016-07-27
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Оно делает источники данных локальными источниками, не вовлекая их в общую транзакцию сервера приложений. Кроме спец. случаев это нежелательный режим, по-моему.
Ставили вы его возможно потому что без него не работает работа с несколькими источниками данных :)
Last edit: Dofs 2016-07-28
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Добрый день!
1. При срабатывании raiserror в обработчике SQL, после изменения переменных на форме элемента Действие, процесс, как и положено, не двигается дальше, но при этом переменные введённые(изменённые) на форме сохраняются в процессе. Так и задумывалось или это ошибка?
2. Если на элемент Действие наложить таймер с задержкой и альтернативным путём выполнения, а по основному пути в обработчике SQL срабатывает raiserror, форма меняется на
"Данное задание уже выполнено другим пользователем или просрочено", и задание исчезает из Списка заданий пользователя, хотя процесс по основному пути дальше обработчика SQL не пошёл.
Версия сервера 4.3.0 с последними изменениями из trunk на 06.07.2016
Last edit: Artur Nigmatullin 2016-07-06
Попробовал на тестовом процессе, где убрал всё лишнее, оставив только суть проблемы, там всё ок, переменные не перезаписываются при получении raiserror. Буду разбираться. Извините за беспокойство.
А вот с таймером ошибка воспроизводится
На самом деле, так и не сумел понять закономерность почему в одном процессе задание исчезает после срабатывания raiserror с сообщением "Данное задание уже выполнено другим пользователем или просрочено", а в другом всё работает. И похоже что данная ошибка никак не связана с таймером
Last edit: Artur Nigmatullin 2016-07-07
Добрый день.
Изменение переменных БП и движение точки управления выполняется в одной транзакции.
Немного описано в http://www.runawfe.org/rus/doc/ProcessTransactions.
Если вы сможете воспроизвести обратное - рапортуйте баг со всем необходимым (БП, процедура и т.п.) - разберёмся.
Не смог создать тестовый процесс, потому что если создаю с нуля ошибку воспроизвести не получается. Поэтому прикрепляю урезанную версию реального процесса, где эта ошибка воспроизводится. БД MSSQL. Сервер и Редактор обновлены 11.07.2016.
Last edit: Artur Nigmatullin 2016-07-11
Добрый день.
Я попытался воспроизвести проблему на SQL Server 11.0.2100.60, не получилось.
1. Использовал один и тот же источник данных что и для runawfe
2. Настроил другой источник данных
3. Настроил другой источник данных в режиме
<system-properties>
<property name="com.arjuna.ats.arjuna.allowMultipleLastResources" value="true"/>
</system-properties>
Пишет замечание, но логической ошибки всё равно не наблюдаю.
06:28:44,799 WARN [com.arjuna.ats.arjuna] (timerFactory) ARJUNA012142: You have chosen to enable multiple last resources in the transaction manager. This is transactionally unsafe and should not be relied upon.
Данные при откате транзакции не меняются, управление не уходит из задачи.
В связи с этим вопросы:
- сколько используется источников данных в jboss?
- как у вас они настроены
- какая версия SQL Server
Last edit: Dofs 2016-07-24
Добрый день!
Попробовал на всякий случай создать в mssql чистую базу, ошибка повторилась.
Попробовал тот же процесс но Руну запустил на стандартном h2, при этом raiserror все равно выполняется в базе данных mssql,ошибка не воспроизводится.
<datasource jta="false" jndi-name="java:/mssqlds" pool-name="java:/mssqlds_Pool">
<connection-url>jdbc:jtds:sqlserver://localhost;DatabaseName=wfe</connection-url>
<driver>mssql</driver>
<transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation>
<pool>
<min-pool-size>5</min-pool-size>
<max-pool-size>30</max-pool-size>
</pool>
<security>
<user-name>sa</user-name>
<password>sa</password>
</security>
</datasource>
и драйвер:
<driver name="mssql" module="net.sourceforge.jtds">
<driver-class>net.sourceforge.jtds.jdbc.Driver</driver-class>
<xa-datasource-class>net.sourceforge.jtds.jdbcx.JtdsDataSource</xa-datasource-class>
</driver>
Для использования mssql в качестве сервера Руны в файле wfe.custom.database.properties прописаны свойства:
hibernate.dialect=org.hibernate.dialect.SQLServerDialect
hibernate.connection.datasource=java:/mssqlds
версия mssql на котором крутится руна, а также расположены 2 других источника данных, в том числе тот на котором выполняется функция raiserror:
Microsoft SQL Server 2012 - 11.0.2100.60 (X64)
Feb 10 2012 19:39:15
Copyright (c) Microsoft Corporation
Developer Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64)
Apr 2 2010 15:48:46
Copyright (c) Microsoft Corporation
Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
Думаю что проблема кроется в использовании jta="false": http://www.mastertheboss.com/jboss-server/jboss-datasource/demystifying-datasource-jta-and-xa-settings-on-jboss-wildfly.
По-хорошему нужно использовать XA источники данных (распределённые транзакции).
Использование "com.arjuna.ats.arjuna.allowMultipleLastResources" видимо получше в данном сценарии, но тоже может приводить к проблемам при некоторых условиях (SQL в обработчике закоммитится, а выполнение БП откатится назад).
Большое спасибо!
Удаление свойства jta="false" в datasource источника данных для сервера самой Руны на mssql помогло.
Datasource mssql выглядит теперь так:
`
<datasource jndi-name="java:/mssqlds" pool-name="java:/mssqlds_Pool">
<connection-url>jdbc:jtds:sqlserver://localhost;DatabaseName=runa_server</connection-url>
<driver>mssql</driver>
<transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation>
<pool>
<min-pool-size>5</min-pool-size>
<max-pool-size>30</max-pool-size>
</pool>
<security>
<user-name>sa</user-name>
<password>sa</password>
</security>
</datasource>
`
В остальных источниках данных mssql не стал пока удалять jta="false" потому, что на самом деле не понимаю, что даёт это свойство, но почему то раньше я его ставил.
Last edit: Artur Nigmatullin 2016-07-27
Оно делает источники данных локальными источниками, не вовлекая их в общую транзакцию сервера приложений. Кроме спец. случаев это нежелательный режим, по-моему.
Ставили вы его возможно потому что без него не работает работа с несколькими источниками данных :)
Last edit: Dofs 2016-07-28
Настроил источники данных MSSQL в таком виде:
<xa-datasource jndi-name="java:/mssqlds" pool-name="mssqlds" enabled="true" use-ccm="false">
<xa-datasource-property name="ServerName">
localhost
</xa-datasource-property>
<xa-datasource-property name="DatabaseName">
runa_server
</xa-datasource-property>
<driver>mssql</driver>
<transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation>
<xa-pool>
<min-pool-size>5</min-pool-size>
<max-pool-size>30</max-pool-size>
<is-same-rm-override>false</is-same-rm-override>
<interleaving>false</interleaving>
<pad-xid>false</pad-xid>
<wrap-xa-resource>false</wrap-xa-resource>
</xa-pool>
<security>
<user-name>sa</user-name>
<password>sa</password>
</security>
<validation>
<validate-on-match>false</validate-on-match>
<background-validation>false</background-validation>
</validation>
<statement>
<share-prepared-statements>false</share-prepared-statements>
</statement>
</xa-datasource>
Last edit: Artur Nigmatullin 2016-08-03