Activiti  با Spring boot

برای شروع به کار، به plugin های activiti نیاز داریم. پست زیر نحوه ی اضافه نمودن این plugin ها به inteliji را توضیح می دهد. http://vrgl.ir/WJL6m جهت شروع به کار 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کامپوننت Script Task:یکی از کامپوننت های 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(&quot/activiti&quot) public class ScriptTaskController { @Autowired private RuntimeService runtimeService; @GetMapping(&quotscript-task/js&quot) public String jsScriptTask() { runtimeService.startProcessInstanceByKey(&quotjs-script-task-process&quot); return &quotcheck the console log...&quot } }نمونه groovy:اضافه نمودن وابستگی زیر به 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(&quotscript-task/groovy&quot) public String groovyScriptTask() { runtimeService.startProcessInstanceByKey(&quotgroovy-script-task-process&quot); return &quotcheck the console log...&quot } ..... کامپوننت ServiceTask:برای اجرای متدهای جاوایی در activiti، از service task استفاده می کنیم. در اینجا دو مورد Delegate و Expression مورد بررسی قرار می دهیم.نمونه Delegate :یک کلاس ایجاد کنید و اینترفیس JavaDelegate را پیاده سازی کنید. عملیاتی که قرار است task شما انجام دهد را در متد execute پیاده سازی نمایید.public class JavaDelegateService implements JavaDelegate { @Override public void execute(DelegateExecution execution) { System.out.println(&quotJava Delegate Service Task executed successfully.&quot); System.out.println(&quotAnd the Sum of 2 + 2= &quot + (2 + 2)); } }در فایل bpmn که ایجاد نمودید، کلاس مربوطه را معرفی نمایید.نمونه Expression :با ELexpresion نام کلاس و متد مربوطه را به task می دهیم.public class MethodExpressionService { public void myService() { System.out.println(&quotMethod Expression Service Task executed successfully.&quot); System.out.println(&quotAnd the Multiply of 12 * 2= &quot + (12 * 2)); } }جهت تست هر دو Service task ها:@RestController @RequestMapping(&quotactiviti&quot) public class ServiceTaskController { @Autowired private RuntimeService runtimeService; @GetMapping(&quotservice/delegate&quot) public String startTheDelegateProcess() { runtimeService.startProcessInstanceByKey(&quotjava-delegate-service-task-process&quot); return &quotCheck the console log...&quot } @GetMapping(&quotservice/expression&quot) public String startTheExpressionProcess() { runtimeService.startProcessInstanceByKey(&quotmethod-expression-service-task-process&quot); return &quotCheck the console log...&quot } }به صورت پیش فرض از دیتابیس h2 برای مدیریت process id,task id و ... استفاده می کند. در صورت نیاز می توانید اطلاعات دیتابیس خودتون مانند اوراکل را نیز در application.properties قرار دهید.در نمونه کد زیر، برای تست پروژه به security نیاز دارد که در application.propertiesمقادیر user-pass را قرار داده ام.سورس پروژه