Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Рализация простенького Workflow


Автор: unkis 8.12.2011, 10:35
Ребята реализовать нужно примерно следуюшее:

Через WebService приходит объект, над этим объектом и с помошью него, должно производиться какое-то количество действий, я называкю их Action.
Набор определённых действий над объектом, я называю процессом.

Вот так выглядит простенькая диаграмма классов.

http://s1.ipicture.ru/

Есть основной класс Process, который в себе содержит объект и список действий, задач.

Проблема заключается в том, как сохранить этот процесс с объектом и его действиями в базу, чтобы потом черз какое-то время извлечь этот процесс и выполнить все действия?



Автор: _Y_ 8.12.2011, 12:01
Если я правильно понял, нужно сохранять последовательность действий и, возможно, параметры этих действий. 

Тогда так примерно:
Как нарисовано, каждый процесс - List содержащий ссылки на обьекты имплементирующие ActionInterface. 

Если предполагается сохранять все в какой-то стандартной реляционной БД без записи данных во множество различных фаилов, в ActionInterface прописываеем методы "конвертировать аттрибуты в String" и "восстановить аттрибуты из String". Метод "восстановить аттрибуты из String" удобно вызывать из конструкторов, за искллючением случаев, когда данный Action аттрибутов не имеет.

БД может выглядеть как-то так (но вариантов множество):
1. Таблица "Processes": поля "Имя-идентифицатор процесса" и "Массив идентификаторов Actions". В известных мне БД массивы напрямую храниться не могут, но, проще всего будет все-таки записать их в одно поле String, разделив, например, запятыми (впрочем, решений здесь множество).
2. Таблица "Actions": поля "Имя-идентифицатор Action", "Имя класса Action" и "Данные".

При чтении из БД:
1. Создаем пустой список типа ActionInterface.
2. Находим нужный процесс в таблице  "Processes".
3. Читаем из этой таблицы список Actions, разбивам его по запятым на массив.
4. В цикле проходим по полученному массиву читая для каждиого идентифицатора Action строку из второй таблицы. При этом создаем обьекты классов указаннык в поле "Имя класса Action", передавая конструкторам содержание поля "Данные". Созданные обьекты добавляем в список.
5. После окончания цикла чтения имеем список Actions и пользуемся им как хотим.

ЗЫ: Можно сделать и проще, и сложнее, ни это уже зависит от специфических требований задачи.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)