[BPMN] เปลี่ยน Activiti Framework มาใช้ MySQL

จาก Blog ตอนก่อนหน้าที่ได้ติดตั้งตัว Activiti Framework แต่ยังใช้ตัว H2 ซึ่งเป็น In-Memory Database คราวนี้ ลองมาเปลี่ยนใช้ DBMS เจ้าอื่นๆบ้าง โดยใช้ตัว MySQL ครับ เพิ่มให้ Web Application แต่ละตัวทำงานเชื่อมโยงกันได้ครับ หากย้อนกลับไปดูไฟล์ของ Activiti Framework ที่ Download มาพบว่าข้างในมี Folder database ดังรูปนะครับ

ลองเข้าลึกไปอีกที อ่ามีให้ครบครัน ทั้ง Create / Drop / Upgrade ครับ ต้องนี้คงต้องภาวนาขอให้ Script ที่ให้มามันครบนะครับ เพราะ ส่วนใหญ่ Open-Source มันจะตามอะไรกันยากนิดนึง ที่เขียน Blog ไว้ เพิ่มทวนความจำเหมือนกัน ไม่งั้นเดี๋ยวตอนกลับมาดูอีกทีจะลีมได้ครับ

หลังจากเห็นสิ่งที่ Activiti Framework เตรียมมาให้แล้ว คราวนี้ลองมาทำกันบ้าง ดีกว่า โดยมีขั้นตอน ดังนี้

Step 1 : เตรียมตัว

  • ลง Activiti Framework แล้ว
  • ติดตั้ง DBMS ในทีมนี้ ผมขอใช้ MySQL แล้วกันครับ แต่ถ้าว่างขอเสี่ยงลองตัว MariaDB ด้วย
  • เตรียมไฟล์ mysql-connector-java เอาไว้สำหรับเชือมต่อ MySQL หรือ MariaDB โดยในที่นี้ของใช้ไฟล์ mysql-connector-java-5.1.45.jar

Step 2 : ลงมือกันครับ

  • สำหรับวิธีการสำหรับสร้าง Database ขึ้นมานั้นมีหลายแบบครับ เดียว
  • สร้าง Database สำหรับ Activiti-App และ Activiti-Rest ในที่นี้กำหนดชื่อ Database เป็น activiti  ดังรูป
  • สร้าง Database สำหรับ Activiti-Admin ในที่นี้กำหนดชื่อ Database เป็น activitiadmin ดังรูป

Step 2.1 : Run ผ่าน Script SQL

  • จากนั้น Run Script ตาม Database ในแต่ละชนิดได้เลย อันนี้น่าจะเหมาะสำหรับ DBA ที่ต้อง Run Script ขึ้น Production ดังรูป

Step 2.2 : Config Properties Files และ XML File ที่เกี่ยวข้อง

  • สร้าง Database ในที่นี้กำหนดชื่อ Database เป็น activiti โดยถ้าลองขุดเข้าไปในไฟล์ activiti-engine-6.0.0.jar โดยข้างในมี Script เก็บไว้อยู่ ดังรูป

Step 2.2.1 : Config สำหรับ Activiti-App ใช้ Database "activiti"

  • นำไฟล์ mysql-connector-java-5.1.45.jar Copy ไปวางไว้ใน Path <CATALINA_HOME>/webapps/activiti-app/WEB-INF/lib ดังรูป
  • ไฟล์ Properties อยู่ที่ <CATALINA_HOME>/webapps/activiti-app/WEB-INF/classes/META-INF/activiti-app/activiti-app.properties สำหรับการแก้ไข มีดังนี้
    • ของเดิม
      #database driver
      datasource.driver=org.h2.Driver
      datasource.url=jdbc:h2:mem:activiti;DB_CLOSE_DELAY=-1
      #database user
      datasource.username=sa
      datasource.password=
      #hibernate.dialect
      hibernate.dialect=org.hibernate.dialect.H2Dialect
    • ของใหม่
      #mysql driver
      datasource.driver=com.mysql.jdbc.Driver
      datasource.url=jdbc:mysql://127.0.0.1:3306/activiti?characterEncoding=UTF-8
      #mysql user
      datasource.username=root
      datasource.password=
      #hibernate.dialect
      hibernate.dialect=org.hibernate.dialect.MySQLDialect

Step 2.2.2 : Config สำหรับ Activiti-Rest ใช้ Database "activiti"

  • นำไฟล์ mysql-connector-java-5.1.45.jar Copy ไปวางไว้ใน Path <CATALINA_HOME>/webapps/activiti-rest/WEB-INF/lib ดังรูป
  • Config สำหรับ Activiti-Rest โดยไฟล์ Properties อยู่ที่ <CATALINA_HOME>/webapps/activiti-rest/WEB-INF/classes/db.properties สำหรับการแก้ไข มีดังนี้
    • ของเดิม
      db=h2
      jdbc.driver=org.h2.Driver
      jdbc.url=jdbc:h2:mem:activiti;DB_CLOSE_DELAY=-1
      jdbc.username=sa
      jdbc.password=
    • ของใหม่
      db=mysql
      jdbc.driver=com.mysql.jdbc.Driver
      jdbc.url=jdbc:mysql://localhost:3306/activiti?autoReconnect=true
      jdbc.username=root
      jdbc.password=

Step 2.2.3 : Config สำหรับ Activiti-Admin ใช้ Database "activitiadmin"

  • นำไฟล์ mysql-connector-java-5.1.45.jar Copy ไปวางไว้ใน Path <CATALINA_HOME>/webapps/activiti-admin/WEB-INF/lib ดังรูป
  • Config สำหรับ Activiti-Rest โดยไฟล์ Properties อยู่ที่ <CATALINA_HOME>/webapps/activiti-admin/WEB-INF/classes/META-INF/activiti-admin/activiti-admin.properties สำหรับการแก้ไข มีดังนี้
    • ของเดิม - ในไฟล์ถูก Comment ไว้หมดเลยครับ
    • ของใหม่ - อันนี้ผมเอา Config มาจากตัว Activity-App ครับ
      #mysql driver
      datasource.driver=com.mysql.jdbc.Driver
      datasource.url=jdbc:mysql://127.0.0.1:3306/activitiadmin?characterEncoding=UTF-8
      #mysql user
      datasource.username=root
      datasource.password=
      #hibernate.dialect
      hibernate.dialect=org.hibernate.dialect.MySQLDialect

หมายเหตุ <CATALINA_HOME> คือ ที่ตั้งของ Tomcat Server เช่น D:\tomcat_8.5.24 ครับ

Step 3 : มาดูผลลัพธ์กันครับ

  • เมื่อทำเสร็จแล้ว อย่าลืม Start Tomcat ใหม่อีกครั้ง ถ้าทำตาม Step 2.2 ตัว Hibernate มันกำลังสร้าง Table และ Restore Default Data ให้ ลองสังเกตุดูจาก Log ได้้เลย
  • ลองมาดู Database activiti Table มีมาอื้อเลยครับ ดังรูป
  • ลองมาดู Database activitiadmin Table มีมาอื้อเลยครับ ดังรูป

Step 4 : ทดสอบระบบนิดหน่อย

  • Activiti-App : ลอง Login เข้ามา พบ Default User ที่ระบบสร้างให้ ดังนี้
  • Activiti-Admin : Step แรกต้อง Set ให้มันเชื่อมต่อกับ Activiti-App ก่่อน
    • เข้ามาในส่วนของ End Point แก้ให้รู้จักกับ Activiti-App ถ้าเข้า Activi-App ผ่าน url ไหน ปรับ End Point ให้ตรงครับ เช่น  http://localhost:8080/activiti-app/ ดังรูป
    • พอตั้งค่าเสร็จ ลองมาดูใน Tab อื่นๆ พอ Demo Process ที่ถูก Deploy ไว้ครับ ดังรูป
  • Activiti-Rest : อันนี้ต้องใช้ Tools ช่วย โดยผมขอใช้ตัว Postman ครับ ซึ่งเรามีการกำหนด Request http://localhost:8080/activiti-rest/service/repository/deployments ส่วนค่าอิื่นๆ สามารถดูได้จากรูปได้เลย

Config อื่นๆที่่ควรรู้

  • แก้ไขไม่ให้ตัว Actvivi Framework - Auto Upgrade ตัว Database ในกรณีที่มีการเปลี่ยนเวอร์ชัน โดยต้องไปแก้ไขที่ engine.properties ซึ่งอยู่ใน Activit-Rest ดังนี้
    • เข้าไปที่ <CATALINA_HOME>/webapps/activiti-rest/WEB-INF/classes/ จากนั้นเปิดไฟล์ engine.properties โดยปรับแก้ Properties engine.schema.update ให้มีค่าเป็น false ตามตัวอย่างด้านล่าง
      # engine properties
      engine.schema.update=false
  • แก้ไขไม่ให้ตัว Actvivi Framework - ใส่ข้อมูล Demo ลงในระบบ โดยต้องไปแก้ไขที่ engine.properties ซึ่งอยู่ใน Activit-Rest ดังนี้
    • เข้าไปที่ <CATALINA_HOME>/webapps/activiti-rest/WEB-INF/classes/ จากนั้นเปิดไฟล์ engine.properties ถ้าไม่อยากให้ระบบมันสร้าง Demo Data ให้ เราสามารถเปลี่ยน properties ที่ต้องการให้มีค่าเป็น False ได้ครับ ตามตัวอย่างด้านล่าง ที่แก้ไข ไม่ให้ระบบใส่
      # demo data properties
      create.demo.users=false
      create.demo.definitions=true
      create.demo.models=true
      create.demo.reports=false