Лучшие практики: Хранение состояния рабочего процесса объекта в базе данных?

В последнее время у нас была та же проблема, и оказалось, что это плохой URL-адрес и, следовательно, стандартный HTTP-ответ 403 (который, очевидно, не является корректным XML, который ищет клиент). Я собираюсь поделиться деталями, если кто-то из того же контекста столкнулся с этой проблемой:

Это было веб-приложение на основе Spring, в котором компонент «JaxWsPortProxyFactoryBean» был настроен на предоставление прокси для удаленного port.

<bean id="ourPortJaxProxyService"
    class="org.springframework.remoting.jaxws.JaxWsPortProxyFactoryBean"
    p:serviceInterface="com.amir.OurServiceSoapPortWs"
    p:wsdlDocumentUrl="${END_POINT_BASE_URL}/OurService?wsdl"
    p:namespaceUri="http://amir.com/jaxws" p:serviceName="OurService"
    p:portName="OurSoapPort" />

«END_POINT_BASE_URL» - это переменная среды, настроенная в «setenv.sh» экземпляра Tomcat, на котором размещено веб-приложение. Содержимое файла выглядит примерно так:

export END_POINT_BASE_URL="http://localhost:9001/BusinessAppServices"
#export END_POINT_BASE_URL="http://localhost:8765/BusinessAppServices"

Отсутствует ";" после того, как каждая строка вызвала неверный URL и, следовательно, плохой ответ. То есть вместо «BusinessAppServices / OurService? Wsdl» URL имел CR перед «/». «Монитор TCP / IP» был весьма полезен при устранении проблемы.

12
задан mat 13 December 2008 в 10:19
поделиться

5 ответов

Если бы я понимаю правильно, я добавил бы таблицу BoxItemTasks (просто таблица перечисления, правильно?), затем таблица BoxItemActions с внешними ключами к BoxItems и к BoxItemTasks для того, какая задача это. Если Вы хотите сделать его так, чтобы конкретная задача могла только быть выполнена однажды на конкретном объекте поля, просто сделайте (Объекты + Задачи), пара столбцов является первичным ключом BoxItemActions.

(Вы разметили его намного лучше, чем я сделал, и престижность за то, что правильно интерпретировали то, что я говорил. То, что Вы записали, точно, что я изображал.)

Что касается определения текущего состояния, Вы могли записать триггер на BoxItemActions, который обновляет отдельный столбец BoxItems. LastAction. Для параллельных действий Ваш триггер мог просто иметь особые случаи для решения, какие меры принимают новизну.

4
ответ дан 2 December 2019 в 22:52
поделиться

Как предыдущий предложенный ответ, я повредил бы Вашу таблицу в несколько.

BoxItemActions, содержа список действий, которые должен пройти поток операций, создал каждый раз, когда BoxItem создается. В этой таблице можно отследить подробные даты \времена \пользователи того, когда каждая задача была выполнена.

С этим типом приложения зная то, куда Поле должно пойти затем, может стать довольно хитрым, также - 'Карта' остающихся шагов для Поля окажется довольно полезной. Также, эта таблица может сгруппироваться как сумасшедший, сотни строк на поле, и все еще будет очень легко запросить.

Это также позволяет иметь 'различные пути', которые могут легко быть изменены. Таблица основных данных 'путей' через поток операций является одним решением, где, поскольку каждое поле создается, пользователь должен выбрать, за каким 'путем' поле будет следовать. Или Вы могли настроить так, чтобы, когда пользователь создает поле, они выбрали задачи, требуются для этого конкретного поля. Зависит от нашей бизнес-проблемы.

3
ответ дан 2 December 2019 в 22:52
поделиться

Для этого вида проблемы считайте схему базы данных показанной в http://www.databaseanswers.org/data_models/workflow/index.htm, который моделирует серию событий в бизнес-процессе.

0
ответ дан 2 December 2019 в 22:52
поделиться

Я думаю, что сериализировал бы объект Рабочего процесса к XML и хранилищу в базе данных со столбцом ID. Может быть более трудно сообщить относительно, но это кажется, что может работать в Вашем случае.

0
ответ дан 2 December 2019 в 22:52
поделиться

Если это имеет значение в BizTalk они "обезвоживают" продолжительные шаблоны сообщения (рабочие процессы и т.п.) двоичным файлом, сериализирующим их к базе данных.

0
ответ дан 2 December 2019 в 22:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: