برای شروع به کار، به plugin های activiti نیاز داریم. پست زیر نحوه ی اضافه نمودن این plugin ها به inteliji را توضیح می دهد.
جهت شروع به کار dependency زیر را در فایل pom اضافه می کنیم.
<dependency> <groupId>org.activiti</groupId> <artifactId>activiti-spring-boot-starter</artifactId> <version>7.0.0.Beta1</version> </dependency>
در این آموزش مدل های Script Task،Service Task را مورد بررسی قرار می دهیم.
نکته :تمام فایل های bpmn را در مسیر زیر قرار دهید:(Springboot به صورت پیش فرض در این مسیر به دنبال فایل های با پسوند bpmn می گردد)
src/main/resources/processes
یکی از کامپوننت های bpmn، با نام Script Task است که دو نوع Groovy، javascript را پشتیبانی می کند.
و نوع آن را در بخش script format تعیین می کنیم.
برای هر فایل bpmnای یک شناسه idقرار می دهیم که یکتا باشد و بعدا در کد با objectای، از جنس org.activiti.engine.RuntimeService می گوییم کدوم process اجرا شود.
مانند شکل زیر یک flow، با نقاط شروع و پایان و کامپوننت Script task قرار دهید. نوع فرمت را javascript انتخاب نمایید. برای این فایل، ما شناسه را مقدار "js-script-task-process" تعریف کرده ایم.
برای اجرا این task یک کلاس کنترلر ایجاد کردم که با ارسال درخواست، مقدار عبارت در script بالا را در console نمایش می دهد.
@RestController @RequestMapping("/activiti") public class ScriptTaskController { @Autowired private RuntimeService runtimeService; @GetMapping("script-task/js") public String jsScriptTask() { runtimeService.startProcessInstanceByKey("js-script-task-process"); return "check the console log..." } }
اضافه نمودن وابستگی زیر به pom فایل:
<dependency> <groupId>org.codehaus.groovy</groupId> <artifactId>groovy-all</artifactId> <version>2.4.17</version> </dependency>
یک فایل جدید با پسوند bpmn، در مسیر مربوطه ایجاد می کنیم.flow مانند زیر با شناسه "groovy-script-task-process" ایجاد می کنیم و نوع فرمت را groovy انتخاب می کنیم.
..... @Autowired private RuntimeService runtimeService; @GetMapping("script-task/groovy") public String groovyScriptTask() { runtimeService.startProcessInstanceByKey("groovy-script-task-process"); return "check the console log..." } .....
برای اجرای متدهای جاوایی در activiti، از service task استفاده می کنیم. در اینجا دو مورد Delegate و Expression مورد بررسی قرار می دهیم.
یک کلاس ایجاد کنید و اینترفیس JavaDelegate را پیاده سازی کنید. عملیاتی که قرار است task شما انجام دهد را در متد execute پیاده سازی نمایید.
public class JavaDelegateService implements JavaDelegate { @Override public void execute(DelegateExecution execution) { System.out.println("Java Delegate Service Task executed successfully."); System.out.println("And the Sum of 2 + 2= " + (2 + 2)); } }
در فایل bpmn که ایجاد نمودید، کلاس مربوطه را معرفی نمایید.
با ELexpresion نام کلاس و متد مربوطه را به task می دهیم.
public class MethodExpressionService { public void myService() { System.out.println("Method Expression Service Task executed successfully."); System.out.println("And the Multiply of 12 * 2= " + (12 * 2)); } }
جهت تست هر دو Service task ها:
@RestController @RequestMapping("activiti") public class ServiceTaskController { @Autowired private RuntimeService runtimeService; @GetMapping("service/delegate") public String startTheDelegateProcess() { runtimeService.startProcessInstanceByKey("java-delegate-service-task-process"); return "Check the console log..." } @GetMapping("service/expression") public String startTheExpressionProcess() { runtimeService.startProcessInstanceByKey("method-expression-service-task-process"); return "Check the console log..." } }
به صورت پیش فرض از دیتابیس h2 برای مدیریت process id,task id و ... استفاده می کند. در صورت نیاز می توانید اطلاعات دیتابیس خودتون مانند اوراکل را نیز در application.properties قرار دهید.
در نمونه کد زیر، برای تست پروژه به security نیاز دارد که در application.propertiesمقادیر user-pass را قرار داده ام.