Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > 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 и пользуемся им как хотим. ЗЫ: Можно сделать и проще, и сложнее, ни это уже зависит от специфических требований задачи. |