Container-Managed Transactions (CMT) এবং Bean-Managed Transactions (BMT) হল EJB (Enterprise JavaBeans)-এর দুটি প্রধান পদ্ধতি যেগুলি ট্রানজেকশন ম্যানেজমেন্টের জন্য ব্যবহৃত হয়। এগুলি ব্যবহৃত হয় ব্যবসায়িক লজিকের জন্য একাধিক কার্যক্রমকে একত্রিত করার এবং সফলভাবে অথবা ব্যর্থভাবে সম্পন্ন করার জন্য।
১. Container-Managed Transactions (CMT)
Container-Managed Transactions (CMT) হল সেই পদ্ধতি যেখানে ট্রানজেকশন ম্যানেজমেন্টের দায়িত্ব EJB কন্টেইনার (যেমন GlassFish, JBoss, WebLogic ইত্যাদি) নেয়। এতে ব্যবসায়িক কোডে (business logic) ট্রানজেকশন ম্যানেজমেন্টের জন্য কোনো কোড লেখার প্রয়োজন হয় না; কন্টেইনার স্বয়ংক্রিয়ভাবে ট্রানজেকশন পরিচালনা করে। CMT সাধারণত সহজ এবং কার্যকরী হয় কারণ এটি অধিকাংশ ট্রানজেকশন ম্যানেজমেন্ট কাজ কন্টেইনারের উপর ছেড়ে দেয়।
CMT এর মূল বৈশিষ্ট্য:
- স্বয়ংক্রিয় ট্রানজেকশন ম্যানেজমেন্ট: EJB কন্টেইনার ট্রানজেকশনগুলি স্বয়ংক্রিয়ভাবে পরিচালনা করে। আপনি শুধুমাত্র টার্গেট মেথডে একটি এনোটেশন যোগ করবেন এবং কন্টেইনার ট্রানজেকশনটি পরিচালনা করবে।
- ট্রানজেকশন এলিভেল: CMT এ ট্রানজেকশন সাধারণত
REQUIRED,REQUIRES_NEW,MANDATORY,NOT_SUPPORTED,NEVERইত্যাদি টাইপে নির্ধারণ করা হয়। - ট্রানজেকশন প্রপার্টি: আপনি
@TransactionAttributeএনোটেশন দিয়ে ট্রানজেকশন কনফিগার করতে পারেন, যেমনREQUIRED,REQUIRES_NEWবাSUPPORTSইত্যাদি।
উদাহরণ (CMT):
import javax.ejb.Stateless;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
@Stateless
public class AccountService {
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public void transferFunds(Account fromAccount, Account toAccount, double amount) {
fromAccount.withdraw(amount);
toAccount.deposit(amount);
}
}
এখানে @TransactionAttribute(TransactionAttributeType.REQUIRED) দিয়ে transferFunds মেথডের জন্য একটি ট্রানজেকশন সেট করা হয়েছে। CMT কন্টেইনার স্বয়ংক্রিয়ভাবে ট্রানজেকশনটি পরিচালনা করবে।
২. Bean-Managed Transactions (BMT)
Bean-Managed Transactions (BMT) হল সেই পদ্ধতি যেখানে ট্রানজেকশন ম্যানেজমেন্টের দায়িত্ব EJB Bean এর উপর থাকে। এতে, Bean-এ কোড লিখে ট্রানজেকশন ম্যানেজমেন্ট পরিচালনা করতে হয়। এই পদ্ধতিটি বেশি ফ্লেক্সিবল, কিন্তু এতে আরও বেশি কোডিং এবং কমপ্লেক্সিটি থাকতে পারে।
BMT এর মূল বৈশিষ্ট্য:
- ম্যানুয়াল ট্রানজেকশন ম্যানেজমেন্ট: BMT তে, ট্রানজেকশন ম্যানেজমেন্ট সম্পূর্ণভাবে Bean এর উপর নির্ভরশীল এবং কোডের মধ্যে
UserTransactionAPI ব্যবহার করে ম্যানেজ করতে হয়। - ফ্লেক্সিবিলিটি: আপনি ট্রানজেকশন শুরু, কমিট, এবং রোলব্যাক সম্পূর্ণভাবে নিয়ন্ত্রণ করতে পারেন, যা CMT তে সম্ভব নয়।
- ট্রানজেকশন কন্ট্রোল: আপনি
javax.transaction.UserTransactionAPI ব্যবহার করে ট্রানজেকশন স্টার্ট, কমিট বা রোলব্যাক করতে পারেন।
উদাহরণ (BMT):
import javax.ejb.Stateless;
import javax.transaction.UserTransaction;
import javax.naming.InitialContext;
@Stateless
public class AccountService {
public void transferFunds(Account fromAccount, Account toAccount, double amount) {
UserTransaction utx = null;
try {
InitialContext ctx = new InitialContext();
utx = (UserTransaction) ctx.lookup("java:comp/UserTransaction");
utx.begin(); // Begin the transaction
fromAccount.withdraw(amount);
toAccount.deposit(amount);
utx.commit(); // Commit the transaction
} catch (Exception e) {
if (utx != null) {
try {
utx.rollback(); // Rollback the transaction on error
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
}
}
এখানে UserTransaction ব্যবহার করে ট্রানজেকশন ম্যানেজমেন্ট সম্পাদন করা হয়েছে। আপনি এখানে ট্রানজেকশন শুরু (begin), কমিট (commit), এবং রোলব্যাক (rollback) করতে পারবেন।
CMT এবং BMT এর মধ্যে পার্থক্য
| বিষয় | Container-Managed Transactions (CMT) | Bean-Managed Transactions (BMT) |
|---|---|---|
| ট্রানজেকশন ম্যানেজমেন্ট | কন্টেইনার স্বয়ংক্রিয়ভাবে পরিচালনা করে। | Bean নিজেই ম্যানেজ করে। |
| ফ্লেক্সিবিলিটি | কম ফ্লেক্সিবিলিটি, কন্টেইনার দ্বারা নিয়ন্ত্রিত। | অধিক ফ্লেক্সিবিলিটি, Bean নিজেই পরিচালনা করে। |
| কোড কমপ্লেক্সিটি | কম কোডিং, কন্টেইনার ট্রানজেকশন পরিচালনা করে। | অধিক কোডিং, কোডের মধ্যে ট্রানজেকশন পরিচালনা করতে হয়। |
| ট্রানজেকশন টাইপ | REQUIRED, REQUIRES_NEW ইত্যাদি নির্বাচন করা হয়। | ম্যানুয়ালি ট্রানজেকশন শুরু, কমিট বা রোলব্যাক করা হয়। |
| টেস্টিং | সহজ, কারণ CMT কন্টেইনার দ্বারা পরিচালিত হয়। | কঠিন, কারণ BMT তে ট্রানজেকশন ম্যানেজমেন্ট ম্যানুয়াল। |
কোনটি কখন ব্যবহার করবেন?
- CMT: যদি আপনি একটি সাধারণ, সোজা প্রোজেক্টে কাজ করছেন এবং ট্রানজেকশন ম্যানেজমেন্ট কমপ্লেক্স না করতে চান, তাহলে CMT ব্যবহার করা উচিত। এটি কোডকে সহজ এবং রক্ষণাবেক্ষণে সহজ রাখে।
- BMT: যদি আপনার ট্রানজেকশন ম্যানেজমেন্টের জন্য বেশি নিয়ন্ত্রণ দরকার হয়, যেমন কাস্টম রোলব্যাক লজিক বা ডাইনামিক ট্রানজেকশন আচরণ, তাহলে BMT ব্যবহার করা উচিত।
সংক্ষেপে:
- CMT হল যেখানে ট্রানজেকশন ম্যানেজমেন্ট কন্টেইনার দ্বারা করা হয় এবং সহজ।
- BMT হল যেখানে ট্রানজেকশন ম্যানেজমেন্ট Bean দ্বারা করা হয় এবং এতে বেশি নিয়ন্ত্রণ এবং ফ্লেক্সিবিলিটি থাকে।
Read more