Skip to main content

Welcome to a Grasp lesson

Create a free account to keep studying and create your own study path.

Lesson 7

Triển khai và chạy quy trình Camunda

Recommended resources

Chào bạn,

Ở bài học trước, chúng ta đã thành công trong việc xây dựng "nhà máy" của mình: một ứng dụng Spring Boot đã tích hợp sẵn Camunda engine và các công cụ web đi kèm. Bạn đã có thể khởi động ứng dụng và đăng nhập vào Camunda Cockpit, Tasklist, và Admin. Nhà máy đã sẵn sàng, nhưng vẫn chưa có "dây chuyền sản xuất" nào cả.

Trong bài học hôm nay, chúng ta sẽ thực hiện chính xác điều đó. Mục tiêu của chúng ta là Deploy và chạy một quy trình nghiệp vụ đơn giản trên Camunda. Chúng ta sẽ thiết kế một "bản thiết kế" (một sơ đồ BPMN), đưa nó vào nhà máy (deploy), và sau đó khởi động "dây chuyền sản xuất" đầu tiên (chạy một process instance).

Đây là một bước cực kỳ quan trọng, biến một sơ đồ tĩnh thành một quy trình có thể thực thi, "sống" bên trong engine. Với kinh nghiệm của một developer, bạn sẽ thấy việc tích hợp "bản thiết kế" này vào ứng dụng Spring Boot rất tự nhiên.

Hãy bắt đầu nào!

1. Tạo "Bản thiết kế": Mô hình hóa Quy trình BPMN đơn giản

Để tạo ra một quy trình, chúng ta cần một công cụ chuyên dụng gọi là Camunda Modeler. Đây là một ứng dụng desktop cho phép bạn vẽ các sơ đồ BPMN, DMN (bảng quyết định) và CMMN (quản lý trường hợp). Trong các module sau, chúng ta sẽ khám phá Modeler chi tiết hơn, nhưng hôm nay, chúng ta chỉ cần dùng nó để tạo một quy trình rất cơ bản.

Nếu bạn chưa cài đặt, hãy tải về từ trang web chính thức của Camunda tại camunda.com/download/modeler/.

Video sau đây sẽ hướng dẫn bạn cách sử dụng Modeler để tạo một quy trình đơn giản, giống như "kịch bản" chúng ta muốn tự động hóa.

Get Started With Camunda and Spring boot

Video "Get Started With Camunda and Spring boot" sẽ minh họa cách tạo một quy trình BPMN đơn giản từ đầu.

Hãy xem phần video từ 06:46 đến 08:15. Trong phần này, hãy chú ý đến các thao tác sau: Tạo sơ đồ BPMN mới. Thiết lập thuộc tính cho quy trình: Click vào vùng trống của sơ đồ và nhìn vào bảng thuộc tính (Properties Panel) bên phải. Tìm và điền vào hai trường quan trọng: Id: Đây là định danh duy nhất của quy trình trong code, ví dụ: process-payment. Name: Đây là tên hiển thị thân thiện với người dùng, ví dụ: Process Payment. Vẽ quy trình: Kéo thả các phần tử để tạo một luồng: Start Event (vòng tròn) -> User Task (hình chữ nhật có biểu tượng người) -> End Event (vòng tròn đậm).

Sau khi xem video, hãy tự mình tạo một quy trình tương tự. Ví dụ, một quy trình "Phê duyệt đơn nghỉ phép" với một User Task là "Manager Review". Hãy đảm bảo bạn đặt một giá trị Id dễ nhớ cho quy trình của mình.


2. Deploy Quy trình: Đưa "Bản thiết kế" vào "Nhà máy"

Với ứng dụng Spring Boot và embedded engine, việc deploy một quy trình mới cực kỳ đơn giản. Camunda sẽ tự động quét và deploy bất kỳ file .bpmn nào được đặt trong thư mục src/main/resources của project khi ứng dụng khởi động.

Đây là một cơ chế quen thuộc với các lập trình viên Spring, tương tự như cách Spring Boot tìm các file cấu hình hoặc template.

Các bước thực hiện:

  1. Trong Camunda Modeler, lưu quy trình bạn vừa tạo (File > Save File As...).
  2. Chọn thư mục src/main/resources bên trong project Spring Boot mà bạn đã tạo ở bài học trước.
  3. Đặt tên cho file, ví dụ: leave-approval.bpmn.
  4. Quay lại IDE của bạn, khởi động lại ứng dụng Spring Boot.

Trong lúc ứng dụng khởi động, bạn sẽ thấy các dòng log cho biết Camunda engine đang được khởi tạo và deploy quy trình của bạn.

Để xác nhận rằng quy trình đã được deploy thành công, hãy vào Camunda Cockpit.

Camunda Cockpit: Deployed 'loanRequest' Process Definition
Đây là giao diện bạn sẽ thấy trong Cockpit sau khi deploy thành công. Lưu ý rằng nó hiển thị một "Process Definition" (định nghĩa quy trình) - đây là bản thiết kế, chứ chưa phải là một quy trình đang chạy.

Trang tài liệu chính thức của Camunda cũng xác nhận phương pháp này.

Modeling a BPMN 2.0 Process

Để có thêm thông tin tham khảo, hãy đọc phần tài liệu "Modeling a BPMN 2.0 Process" của Camunda.

Hãy đọc phần đầu tiên, "Model an Executable BPMN 2.0 Process and Deploy It". Phần này khẳng định lại rằng chỉ cần lưu file BPMN vào thư mục src/main/resources, nó sẽ được tự động deploy khi engine khởi động.


3. Chạy Quy trình: Bắt đầu "Dây chuyền sản xuất"

Sau khi đã deploy "bản thiết kế", chúng ta có thể bắt đầu tạo ra các "sản phẩm", hay còn gọi là các process instance (thực thể quy trình). Mỗi process instance là một lần thực thi độc lập của quy trình đó. Ví dụ, nếu quy trình là "Phê duyệt đơn nghỉ phép", mỗi lần một nhân viên nộp đơn sẽ tạo ra một process instance mới.

Có nhiều cách để bắt đầu một process instance. Chúng ta sẽ khám phá hai cách phổ biến nhất.

Cách 1: Bắt đầu từ Giao diện Người dùng (Tasklist)

Đây là cách trực quan và đơn giản nhất, thường được dùng để kiểm thử hoặc cho phép người dùng tự khởi tạo quy trình.

Get Started With Camunda and Spring boot

Hãy quay lại video "Get Started With Camunda and Spring boot" để xem cách khởi tạo một process instance từ Tasklist.

Xem phần video từ 09:12 đến 10:20. Chú ý các bước: Truy cập vào Tasklist. Nhấn nút Start process. Chọn quy trình của bạn từ danh sách (tên hiển thị là thuộc tính Name bạn đã đặt). Nhấn Start. Sau khi bắt đầu, bạn sẽ thấy một công việc mới xuất hiện trong danh sách Tasklist. Điều này chứng tỏ quy trình đã chạy và đang dừng lại ở bước User Task, chờ người dùng hành động.

Cách 2: Bắt đầu bằng Code (Programmatically)

Với vai trò là một developer, bạn sẽ thường xuyên cần khởi tạo quy trình từ bên trong logic của ứng dụng, ví dụ như khi có một yêu cầu API mới hoặc một sự kiện nào đó xảy ra. Camunda cung cấp một bộ Java API phong phú để làm việc này.

Dịch vụ cốt lõi để quản lý các process instance đang chạy là RuntimeService.

Các bước thực hiện:

  1. Mở lớp Application chính của bạn (Application.java) hoặc tạo một Spring Component mới.
  2. Sử dụng dependency injection của Spring để tiêm (@Autowired) RuntimeService.
  3. Gọi phương thức startProcessInstanceByKey() và truyền vào Id của quy trình mà bạn đã định nghĩa trong Modeler.

Bạn có thể đặt đoạn code này vào một REST controller để khởi tạo quy trình khi gọi một endpoint, hoặc lắng nghe một sự kiện của Spring. Một cách tiếp cận hay là lắng nghe sự kiện PostDeployEvent của Camunda để tự động khởi tạo một instance ngay sau khi deploy, rất hữu ích cho việc kiểm thử.

import org.camunda.bpm.engine.RuntimeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;

@Component
public class ProcessStarter {

    @Autowired
    private RuntimeService runtimeService;

    @EventListener(ApplicationReadyEvent.class)
    public void startProcess() {
        // Sử dụng process definition key (thuộc tính 'Id' trong Modeler)
        runtimeService.startProcessInstanceByKey("leave-approval-process");
        System.out.println("Process instance started!");
    }
}

Trong ví dụ trên, mỗi khi ứng dụng Spring Boot sẵn sàng, một instance của quy trình leave-approval-process sẽ được tự động khởi tạo. Bạn có thể kiểm tra điều này bằng cách vào Tasklist và sẽ thấy một task mới đang chờ.

Tài liệu của Camunda cũng mô tả cách làm này, bạn có thể tham khảo thêm.

Modeling a BPMN 2.0 Process

Phần tài liệu "Modeling a BPMN 2.0 Process" cũng minh họa cách khởi tạo quy trình bằng code.

Đọc phần "Start a Process Instance after Process Application has been Deployed". Phần này sử dụng sự kiện PostDeployEvent để kích hoạt việc khởi tạo quy trình, một kỹ thuật tương tự như ví dụ trên.


Tổng kết bài học

Hôm nay, bạn đã thực hiện thành công các bước đầu tiên để đưa một quy trình vào cuộc sống:

  • Mô hình hóa: Bạn đã sử dụng Camunda Modeler để tạo một sơ đồ quy trình BPMN đơn giản.
  • Deploy: Bạn đã học được cách deploy quy trình một cách đơn giản bằng cách đặt file .bpmn vào thư mục src/main/resources của dự án Spring Boot.
  • Xác minh: Bạn đã kiểm tra trong Cockpit để chắc chắn rằng định nghĩa quy trình (process definition) đã được deploy.
  • Chạy: Bạn đã học hai cách để khởi tạo một thực thể quy trình (process instance): thông qua giao diện Tasklist và bằng Java API (RuntimeService).

"Nhà máy" của bạn giờ đây đã có "dây chuyền sản xuất" đầu tiên và đang hoạt động.


Xem trước bài học tiếp theo

Chúng ta đã khởi tạo thành công một process instance, nhưng nó đang ở đâu và trạng thái của nó như thế nào? Trong bài học tiếp theo, "Sử dụng Camunda Cockpit để theo dõi một thực thể quy trình (process instance)", chúng ta sẽ đi sâu vào Cockpit. Bạn sẽ học cách tìm kiếm instance vừa chạy, xem nó đang dừng lại ở bước nào, kiểm tra các biến số của nó và hiểu rõ hơn về vòng đời của một quy trình từ khi bắt đầu đến khi kết thúc.