jBPM5 (Java Business Process Management 5) তে Persistence ব্যবহারের মাধ্যমে ব্যবসায়িক প্রক্রিয়ার অবস্থা, টাস্ক এবং ভেরিয়েবল ডাটাবেসে সংরক্ষিত হয়, যা পরবর্তীতে পুনরুদ্ধার করা যায়। এটি JPA (Java Persistence API) এবং Hibernate এর মাধ্যমে বাস্তবায়িত হয়। এখানে একটি উদাহরণ দিয়ে ব্যাখ্যা করা হবে কিভাবে jBPM5 এ Persistence কাজ করে এবং কীভাবে ডাটাবেসে প্রক্রিয়া এবং টাস্কের অবস্থা সংরক্ষণ এবং পুনরুদ্ধার করা যায়।
jBPM5 Persistence উদাহরণ
ধরা যাক, একটি প্রক্রিয়া আছে যা loan approval এর জন্য ব্যবহৃত হয়। এই প্রক্রিয়াতে কিছু ভেরিয়েবল রয়েছে, যেমন loanAmount, loanType ইত্যাদি, এবং এই প্রক্রিয়াগুলির অবস্থা ডাটাবেসে সংরক্ষণ করা হবে। আমরা এখানে দেখাবো কিভাবে jBPM5 এ প্রক্রিয়া এবং টাস্কের অবস্থা JPA ব্যবহার করে ডাটাবেসে সংরক্ষণ এবং পুনরুদ্ধার করা যায়।
1. jBPM5 Persistence কনফিগারেশন:
প্রথমে, jBPM5 এর জন্য persistence.xml ফাইল তৈরি করা হয়, যেখানে ডাটাবেস এবং JPA কনফিগারেশন করা হয়। এটি Hibernate অথবা অন্যান্য JPA প্রদানকারী ব্যবহার করে ডাটাবেসে ডেটা সংরক্ষণ করবে।
persistence.xml (এটি META-INF ফোল্ডারে রাখা হবে):
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
<persistence-unit name="org.jbpm.persistence.jpa">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>org.jbpm.process.instance.ProcessInstance</class>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
<property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/jbpm"/>
<property name="hibernate.connection.username" value="root"/>
<property name="hibernate.connection.password" value="password"/>
</properties>
</persistence-unit>
</persistence>
এখানে hibernate.dialect এবং hibernate.connection.url-এ আপনার ডাটাবেসের তথ্য বসানো হবে। এই কনফিগারেশনের মাধ্যমে jBPM5 ডাটাবেসের সঙ্গে সংযুক্ত হয়ে প্রক্রিয়ার অবস্থা সংরক্ষণ করতে পারবে।
2. প্রক্রিয়া শুরু করা এবং Persistence পরিচালনা করা:
এখন, আমরা একটি প্রক্রিয়া শুরু করবো এবং সেই প্রক্রিয়ায় কিছু ভেরিয়েবল সেট করবো। তারপর, jBPM5 এ সেই প্রক্রিয়ার অবস্থা ডাটাবেসে সংরক্ষিত হবে।
LoanApprovalProcess.java:
import org.jbpm.process.instance.ProcessInstance;
import org.jbpm.runtime.manager.impl.DefaultProcessRuntime;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import java.util.HashMap;
import java.util.Map;
public class LoanApprovalProcess {
public static void main(String[] args) {
// EntityManagerFactory for Persistence
EntityManagerFactory emf = Persistence.createEntityManagerFactory("org.jbpm.persistence.jpa");
EntityManager em = emf.createEntityManager();
// Create the process runtime
DefaultProcessRuntime processRuntime = new DefaultProcessRuntime(em);
// Define process variables
Map<String, Object> parameters = new HashMap<>();
parameters.put("loanAmount", 5000000); // Example loan amount
parameters.put("loanType", "Home Loan"); // Loan type
// Start the process
ProcessInstance processInstance = processRuntime.startProcess("com.sample.loanApproval", parameters);
// Persist the process instance
em.getTransaction().begin();
em.persist(processInstance); // Saving the process instance to the database
em.getTransaction().commit();
// Print out the process instance id
System.out.println("Started loan approval process with instance id: " + processInstance.getId());
// Close the entity manager
em.close();
}
}
3. Persistence-এ Processe Instance সংরক্ষণ:
উপরের কোডে, আমরা processRuntime.startProcess() মেথড ব্যবহার করে একটি প্রক্রিয়া শুরু করেছি এবং তার সাথে কিছু ভেরিয়েবল (loanAmount, loanType) সেট করেছি। এরপর EntityManager ব্যবহার করে আমরা সেই প্রক্রিয়ার ইনস্ট্যান্সকে ডাটাবেসে persist করেছি।
4. প্রক্রিয়ার অবস্থা পুনরুদ্ধার করা:
এখন, আমরা ডাটাবেস থেকে সংরক্ষিত প্রক্রিয়ার ইনস্ট্যান্স পুনরুদ্ধার করবো এবং তার অবস্থা দেখতে পারবো। EntityManager ব্যবহার করে আমরা প্রক্রিয়ার অবস্থা ডাটাবেস থেকে ফেরত আনতে পারি।
RetrieveProcessInstance.java:
import org.jbpm.process.instance.ProcessInstance;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
public class RetrieveProcessInstance {
public static void main(String[] args) {
// EntityManagerFactory for Persistence
EntityManagerFactory emf = Persistence.createEntityManagerFactory("org.jbpm.persistence.jpa");
EntityManager em = emf.createEntityManager();
// Retrieve the process instance by id
Long processInstanceId = 1L; // Example Process Instance ID
ProcessInstance processInstance = em.find(ProcessInstance.class, processInstanceId);
if (processInstance != null) {
System.out.println("Process Instance ID: " + processInstance.getId());
System.out.println("Process Status: " + processInstance.getState());
} else {
System.out.println("Process Instance not found.");
}
// Close the entity manager
em.close();
}
}
এখানে, em.find() মেথড ব্যবহার করে আমরা processInstanceId এর মাধ্যমে প্রক্রিয়া ইনস্ট্যান্সটি পুনরুদ্ধার করছি এবং তার অবস্থা দেখতে পাচ্ছি।
5. Task Persistence:
Human Task ব্যবস্থাপনার ক্ষেত্রে টাস্কের অবস্থা, ব্যবহারকারীর কার্যক্রম ইত্যাদি ডাটাবেসে persist করা হয়।
TaskPersistenceExample.java:
import org.jbpm.task.Task;
import org.jbpm.task.TaskService;
import org.jbpm.task.UserGroupCallbackImpl;
public class TaskPersistenceExample {
public static void main(String[] args) {
TaskService taskService = new TaskService();
// Retrieve task by id
Task task = taskService.getTaskById(1L); // Task ID 1
if (task != null) {
System.out.println("Task ID: " + task.getId());
System.out.println("Task Name: " + task.getName());
System.out.println("Task Status: " + task.getTaskStatus());
} else {
System.out.println("Task not found.");
}
}
}
এই কোডে TaskService ব্যবহার করে আমরা একটি টাস্কের অবস্থা ডাটাবেস থেকে পুনরুদ্ধার করছি।
jBPM5 Persistence ব্যবসায়িক প্রক্রিয়ার অবস্থা, টাস্ক, এবং ভেরিয়েবল ডাটাবেসে সংরক্ষণ এবং পুনরুদ্ধার করতে সহায়তা করে। এটি প্রক্রিয়ার অবস্থা ডাটাবেসে সঠিকভাবে ট্র্যাক করতে এবং প্রয়োজনে প্রক্রিয়া পুনরুদ্ধার করতে সাহায্য করে। উপরের উদাহরণে, আমরা দেখেছি কিভাবে JPA এবং Hibernate ব্যবহার করে jBPM5 এ প্রক্রিয়া এবং টাস্কের অবস্থা persist এবং retrieve করা যায়।
Read more