EJB (Enterprise JavaBeans) একটি শক্তিশালী Java EE প্রযুক্তি যা ব্যবসায়িক লজিক (business logic) তৈরি এবং পরিচালনা করার জন্য ব্যবহৃত হয়। EJB-এর একটি গুরুত্বপূর্ণ বৈশিষ্ট্য হল Transaction Management, যা একটি অ্যাপ্লিকেশনে ট্রানজেকশনের কাজ স্বয়ংক্রিয়ভাবে পরিচালনা করতে সাহায্য করে। Transaction Management আপনার অ্যাপ্লিকেশনগুলোর ডেটা প্রসেসিং এবং অর্গানাইজেশনকে সমন্বিতভাবে পরিচালনা করে, যাতে ডেটাবেস এবং অন্যান্য রিসোর্সে একাধিক কার্যকলাপ সফলভাবে এবং নির্ভরযোগ্যভাবে সম্পাদিত হতে পারে।
1. EJB এবং Transaction Management এর ভূমিকা
Transaction Management EJB-এ ব্যবসায়িক কার্যক্রমের একীকরণ এবং একাধিক কার্যকলাপের আর্কিটেকচারে অত্যন্ত গুরুত্বপূর্ণ ভূমিকা পালন করে। এটি নিশ্চিত করে যে, একাধিক অপারেশন (যেমন ডেটাবেস আপডেট) একযোগভাবে সফলভাবে বা ব্যর্থ হলে সবকিছু একযোগভাবে রোলব্যাক হবে। ট্রানজেকশনগুলি নিশ্চিত করে যে অ্যাপ্লিকেশনের জন্য ACID (Atomicity, Consistency, Isolation, Durability) প্রিন্সিপলগুলি বজায় থাকবে।
2. EJB-এ Transaction Management এর প্রধান বৈশিষ্ট্যসমূহ
- Atomicity: একাধিক অপারেশন একযোগে সম্পাদিত হবে, যদি কোনো একটি অপারেশন ব্যর্থ হয়, তবে তা পুরোপুরি রোলব্যাক হবে।
- Consistency: ট্রানজেকশন শুরু হওয়ার আগে এবং শেষ হওয়ার পরে ডেটাবেস বা সিস্টেমের অবস্থা পূর্বের সঙ্গতি বজায় রাখবে।
- Isolation: একাধিক ট্রানজেকশন একে অপরকে প্রভাবিত না করে সম্পাদিত হবে।
- Durability: একবার একটি ট্রানজেকশন সফলভাবে সম্পন্ন হলে, তার ফলাফল স্থায়ীভাবে সিস্টেমে সংরক্ষিত হবে।
EJB-এর মাধ্যমে Transaction Management-এর দুটি প্রধান ধরন থাকে:
- Bean Managed Transactions (BMT): এখানে অ্যাপ্লিকেশন কোডের মাধ্যমে ট্রানজেকশন ব্যবস্থাপনা করা হয়।
- Container Managed Transactions (CMT): এখানে EJB কন্টেইনার স্বয়ংক্রিয়ভাবে ট্রানজেকশন পরিচালনা করে।
3. Container Managed Transactions (CMT)
CMT হল EJB-এ ট্রানজেকশন ম্যানেজমেন্টের একটি জনপ্রিয় পদ্ধতি, যেখানে EJB কন্টেইনার স্বয়ংক্রিয়ভাবে ট্রানজেকশন শুরু, সমাপ্ত এবং রোলব্যাক করে। CMT এর মাধ্যমে, ডেভেলপারদের ট্রানজেকশন ম্যানেজমেন্ট সম্পর্কে চিন্তা করার প্রয়োজন হয় না কারণ কন্টেইনার সবকিছু ম্যানেজ করে।
CMT ব্যবহার করার জন্য @TransactionManagement এবং @TransactionAttribute অ্যানোটেশন ব্যবহার করা হয়।
উদাহরণ:
import javax.ejb.Stateless;
import javax.ejb.TransactionManagement;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
@Stateless
@TransactionManagement(javax.ejb.TransactionManagementType.CONTAINER)
public class AccountService {
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public void transferFunds(Account source, Account target, double amount) {
source.debit(amount);
target.credit(amount);
}
}
এখানে:
- @TransactionManagement: এটি EJB কন্টেইনারকে জানায় যে ট্রানজেকশন ম্যানেজমেন্ট কন্টেইনার দ্বারা হবে।
- @TransactionAttribute: এটি একটি মেথডের জন্য ট্রানজেকশন পলিসি নির্ধারণ করে।
REQUIREDট্রানজেকশন পলিসি অনুযায়ী, যদি ট্রানজেকশন না থাকে, তাহলে নতুন একটি ট্রানজেকশন শুরু হবে।
ট্রানজেকশন পলিসির ধরন:
- REQUIRED: যদি ট্রানজেকশন চলমান থাকে, তবে এটি ব্যবহার করবে। যদি না থাকে, তবে নতুন একটি ট্রানজেকশন শুরু করবে।
- REQUIRES_NEW: একটি নতুন ট্রানজেকশন শুরু করবে এবং বর্তমান ট্রানজেকশন সাসপেন্ড করবে।
- MANDATORY: শুধুমাত্র যদি একটি ট্রানজেকশন চলমান থাকে, তবেই এটি কাজ করবে। অন্যথায়, একটি ব্যতিক্রম হবে।
- SUPPORTS: যদি একটি ট্রানজেকশন চলমান থাকে, তবে এটি ব্যবহার করবে; অন্যথায়, এটি ট্রানজেকশন ছাড়া কাজ করবে।
- NOT_SUPPORTED: এটি ট্রানজেকশন ছাড়া কাজ করবে এবং যদি একটি ট্রানজেকশন চলমান থাকে, তবে তা সাসপেন্ড করবে।
4. Bean Managed Transactions (BMT)
BMT হল একটি পদ্ধতি যেখানে EJB Bean নিজে ট্রানজেকশন ম্যানেজমেন্ট পরিচালনা করে। এখানে ডেভেলপারকে UserTransaction API ব্যবহার করে ট্রানজেকশন শুরু, কমিট এবং রোলব্যাক করতে হয়।
BMT উদাহরণ:
import javax.ejb.Stateless;
import javax.ejb.UserTransaction;
import javax.inject.Inject;
@Stateless
public class AccountService {
@Inject
private UserTransaction userTransaction;
public void transferFunds(Account source, Account target, double amount) throws Exception {
try {
userTransaction.begin(); // Start the transaction
source.debit(amount);
target.credit(amount);
userTransaction.commit(); // Commit the transaction
} catch (Exception e) {
userTransaction.rollback(); // Rollback the transaction in case of an error
throw new Exception("Transaction failed", e);
}
}
}
এখানে:
- UserTransaction: এটি ট্রানজেকশন শুরু, কমিট এবং রোলব্যাক করার জন্য ব্যবহৃত হয়।
userTransaction.begin(),userTransaction.commit(), এবংuserTransaction.rollback()মেথডগুলি ট্রানজেকশন ম্যানেজমেন্টের জন্য ব্যবহৃত হয়।
5. Transaction Management এবং EJB এর মধ্যে সম্পর্ক
- CMT (Container Managed Transactions) এবং BMT (Bean Managed Transactions) উভয়ের মধ্যে পার্থক্য হলো, CMT-তে EJB কন্টেইনার স্বয়ংক্রিয়ভাবে ট্রানজেকশন ম্যানেজ করে, যেখানে BMT-তে ডেভেলপারকে ট্রানজেকশন ম্যানেজমেন্ট কোড লিখতে হয়।
- CMT সাধারণত ডেভেলপারদের জন্য সহজ এবং ব্যবহারে স্বয়ংক্রিয়, কারণ ট্রানজেকশন কন্টেইনার দ্বারা ম্যানেজ করা হয়। তবে, BMT ডেভেলপারদের অধিক নিয়ন্ত্রণ প্রদান করে এবং বিশেষভাবে যখন ট্রানজেকশনের আচরণ কাস্টমাইজ করতে হয় তখন ব্যবহৃত হয়।
- EJB-এ ট্রানজেকশন ব্যবস্থাপনা কার্যকরভাবে ডেটাবেসে কাজ করার জন্য ACID প্রিন্সিপাল নিশ্চিত করে এবং rollback এর মাধ্যমে ডেটার সঠিকতা বজায় রাখে।
6. EJB এবং Transaction Management এর সুবিধা
- Automated Transaction Management: CMT ব্যবহার করলে EJB কন্টেইনার স্বয়ংক্রিয়ভাবে ট্রানজেকশন শুরু এবং শেষ করে, যা কোড লেখার সময় সহজ করে।
- Consistency and Reliability: ট্রানজেকশন ম্যানেজমেন্ট নিশ্চিত করে যে, শুধুমাত্র যদি সমস্ত অপারেশন সফলভাবে সম্পন্ন হয়, তবে ডেটা পরিবর্তন হবে। অন্যথায়, এটি রোলব্যাক হয়ে যাবে।
- Support for ACID Principles: EJB-এর মাধ্যমে ট্রানজেকশন প্রক্রিয়া ACID বৈশিষ্ট্য (Atomicity, Consistency, Isolation, Durability) অনুসরণ করে।
EJB Transaction Management একটি অত্যন্ত গুরুত্বপূর্ণ অংশ যা ব্যবসায়িক কার্যক্রম এবং ডেটা প্রোসেসিংকে নির্ভরযোগ্য এবং দক্ষভাবে পরিচালনা করতে সহায়ক। CMT (Container Managed Transactions) এবং BMT (Bean Managed Transactions) উভয় পদ্ধতির সুবিধা অনুযায়ী ব্যবহার করা যেতে পারে। CMT সাধারণত সহজ এবং ব্যবহারে স্বয়ংক্রিয়, যেখানে BMT ডেভেলপারদের জন্য অধিক কাস্টমাইজেশন এবং নিয়ন্ত্রণ প্রদান করে। EJB-এর মাধ্যমে ট্রানজেকশন ম্যানেজমেন্ট নিশ্চিত করে যে, ডেটাবেসের কাজগুলি সঠিকভাবে এবং নির্ভরযোগ্যভাবে সম্পন্ন হবে, এবং ACID প্রিন্সিপালগুলি বজায় থাকবে।
Read more