1 / 20

Реализация интегрированных с Seam конвертеров для jBPM

Реализация интегрированных с Seam конвертеров для jBPM. Цели исследования. Проанализировать стандартную реализацию конверторов типов в jBPM Определить ограничения накладываемые стандартной реализацией и найти пути для их обхода. Используемые версии фреймворков. JBoss Seam:

elan
Download Presentation

Реализация интегрированных с Seam конвертеров для jBPM

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Реализация интегрированных с Seam конвертеров для jBPM

  2. Цели исследования • Проанализировать стандартную реализацию конверторов типов в jBPM • Определить ограничения накладываемые стандартной реализацией и найти пути для их обхода

  3. Используемые версии фреймворков • JBoss Seam: версия 2.2.0.GA • jBPM: версия 3.2.2 (так как используется по умолчанию в Seam, с которой данный фреймворк интегрирован)

  4. Стандартное использование Bijection для переменных с BUSINESS_PROCESS контекст • Пример использования: В данном случае, после выполнения метода createTodo(), выполняется Outjection поля payload, которую Seam сохраняет в BUSINESS_PROCESS контекст (поскольку Seam интегрирован с jBPM, то технически это реализуется как запись значения этого поля в виде переменной, прикрепленной к задаче(TaskInstance), в базу данных jBPM).

  5. Способ хранения переменных, прикрепленных к задаче, в базе данных jBPM • Переменные, прикрепленные к задаче jBPM, хранятся в таблице JBPM_VARIABLEINSTANCE, которая имеет следующую структуру:

  6. Типы данныхдля переменных, поддерживаемые jBPM,и стандартные конвертеры для приведения к данным типам • Исходя из предыдущей таблицы, типы данных, которые могут хранится в таблице переменных процесса, это byte[], Date, double, long, string, при этом значения переменных записываются в одно из полей таблицы: BYTEARRAYVALUE_, DATEVALUE_, DOUBLEVALUE_, LONGVALUE_ и STRINGVALUE_, соответственно. (Для объектов, которые сохраняются с использованием Hibernate предусмотрены также поля LONGIDCLASS_ и STRINGIDCLASS_, для ID с типом Long или String, соответственно). • Для преобразования объектов произвольных Java-классов к вышеуказанным типам данных в jBPMреализованы следующие стандартные конвертеры: • BooleanToStringConverter • BytesToByteArrayConverter • ByteToLongConverter • CharacterToStringConverter • DateToLongConverter • DoubleToStringConverter • FloatToDoubleConverter • FloatToStringConverter • IntegerToLongConverter • SerializableToByteArrayConverter • ShortToLongConverter

  7. Конфигурирование конвертеров в jBPM • Конфигурация конвертеров в jBPM производится в конфигурационном файле jbpm.varmapping.xml следующим образом: гдеmatcherсодержит описание класса для проверки соответствия типа данных переменной типу данных, который преобразует конвертер, указанный в теге converter, а variable-instanceсодержит тип данных после преобразования (одиниз предопределенных в jBPM), который будет сохранятся в базу данных.

  8. Необходимость в реализации дополнительных конвертеров, постановка задачи • Как следует из рассмотренного выше списка конвертеров, в стандартной реализации jBPMсуществует возможность для конвертации только ограниченного числа стандартных типов Java. • В случае если переменная представляет собой объект некоторого произвольного класса остается возможность для использования конвертера SerializableToByteArrayConverterдля сохранения объекта в базе данных (для этого данный класс должен реализовывать интерфейс Serializable). • Минус использования конвертера SerializableToByteArrayConverter заключается в том, что в базу данных сохраняются данные в бинарном виде, что вызовет проблемы в случае необходимости в дальнейшем производить поиск и обработку сохраненных данных. • Таким образом возникает задача: реализовать дополнительные конвертеры jBPM для преобразования произвольных объектов Java к виду, удобному для их поиска по какому-либо фильтру и последующей обработки, с их интеграцией с фреймворкомSeam.

  9. Реализация аннотации для конвертера jBPM • Дополнительные конвертеров jBPM будем реализовывать по аналогии с конвертерами JSF, когда для регистрации и использования конвертеров в Seam достаточно проставить аннотацию для класса, реализующего конвертер. • Аннотация для конвертера jBPM реализована следующим образом: Таким образом, для реализации конвертера jBPMнеобходимо и достаточно, чтобы для этого класса была указана данная аннотация, а также класс конвертера реализовывал интерфейс org.jbpm.context.exe.Converter.

  10. Реализация конвертера jBPM • Пример реализации конвертера jBPM, исходя из указанных на предыдущем слайде условий:

  11. Обработка аннотации и регистрация конвертера в jBPM во время инициализации приложения • В предыдущем примере элементы аннотации конвертера имеют следующее значение: jbpmConverterId – id конвертера, с которым конвертер зарегистрирован в jBPM, forClass – класс, для которого должен применятся этот конвертер, toJbpmVariableClass – класс, в который производится преобразование (является стандартным классом jBPM и представляет собой один из типов данных, который сохраняется в таблицу JBPM_VARIABLEINSTANCE базы данных jBPM). • Для использования конвертера необходимо зарегистрировать его в jBPM, для этого используется обработка стандартного события Seam - org.jboss.seam.postInitialization, которое генерируется при старте приложения, после инициализации всех компонентов Seam. (Обработка компонентов Seam c аннотацией и реализация регистрации конвертеров jBPMнаходится в классе JbpmConvertersLoader).

  12. Реализация класса JbpmConvertersLoader • Получение имен всех компонентов Seam вконтексте Application:

  13. Реализация класса JbpmConvertersLoader(часть 2) • Определение среди всех компонентов Seam конвертеров jBPM и их регистрация:

  14. Реализация класса JbpmConvertersLoader(часть 3) • Регистрация конвертера jBPM:

  15. Реализация класса JbpmConvertersLoader(часть 4) • Добавление конвертера jBPM в коллекции конвертеров (необходимо для обратной конвертации из объекта VariableInstance в исходный объект):

  16. Реализация класса JbpmConvertersLoader(часть 5) • Добавление типа jBPM (необходимо для прямой конвертации из исходного объекта в объект VariableInstance):

  17. Реализация класса ClassNameMatcher • Реализация класса ClassNameMatcher (необходим для определения соответствующего конвертера для определенного класса):

  18. Реализация класса ConvertersStorage • Реализация класса ConvertersStorage(необходим для доступа к коллекциям конвертеров jBPM):

  19. Результат реализации и возможности использования дополнительных конвертеров jBPM • Таким образом, была рассмотрена задача добавления дополнительных конвертеров jBPM, интегрированных с фреймворком Seam. В результате проведенной работы, была реализована возможность добавления конвертеров jBPM для произвольных объектов Java c помощью аннотаций. • Данная дополнительная функциональность позволяет избежать проблем, связанных с необходимостью обработки сериализованных объектов, хранящихся в базе данных в бинарном виде, позволяя сохранять объекты в базу данных jBPM в произвольном, удобном для обработки виде. При этом, реализация новых конвертеров jBPM, реализованным способом, практически не требует дополнительных трудозатрат.

  20. Ваши вопросы

More Related