[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

Discover more from naiwaen@DebuggingSoft

Subscribe to get the latest posts sent to your email.