Enterprise মধ্যম

ম্যানুয়াল JPA ট্রানজাকশন বনাম ডিক্লারেটিভ @Transactional

একটি সিঙ্গেল @Transactional অ্যানোটেশন ব্যবহার করে ভার্বোস begin/commit/rollback ব্লকগুলো প্রতিস্থাপন করুন।

✕ Java EE
@PersistenceContext
EntityManager em;

public void transferFunds(Long from, Long to,
                          BigDecimal amount) {
    EntityTransaction tx = em.getTransaction();
    tx.begin();
    try {
        Account src = em.find(Account.class, from);
        Account dst = em.find(Account.class, to);
        src.debit(amount);
        dst.credit(amount);
        tx.commit();
    } catch (Exception e) {
        tx.rollback();
        throw e;
    }
}
✓ Jakarta EE 8+
@ApplicationScoped
public class AccountService {
    @PersistenceContext
    EntityManager em;

    @Transactional
    public void transferFunds(Long from, Long to,
                              BigDecimal amount) {
        var src = em.find(Account.class, from);
        var dst = em.find(Account.class, to);
        src.debit(amount);
        dst.credit(amount);
    }
}
এই কোডে সমস্যা দেখছেন? আমাদের জানান।
🗑️

বয়লারপ্লেট নেই

একটি অ্যানোটেশন রিপিটেটিভ begin/commit/rollback ট্রাই-ক্যাচ ব্লকগুলোকে প্রতিস্থাপন করে।

🛡️

নিরাপদ রোলব্যাক (Safer Rollback)

কন্টেইনার আনচেকড এক্সেপশন (unchecked exceptions) ঘটলে রোলব্যাক নিশ্চিত করে – ক্যাচ ব্লক ভুলে যাওয়ার কোনো ঝুঁকি থাকে না।

📐

ডিক্লারেটিভ কন্ট্রোল (Declarative Control)

প্রোপাগেশন (propagation), আইসোলেশন (isolation) এবং রোলব্যাক নিয়মগুলো অ্যানোটেশন অ্যাট্রিবিউট (annotation attributes) হিসাবে প্রকাশ করা হয়।

পুরনো পদ্ধতি
ম্যানুয়াল ট্রানজাকশন
আধুনিক পদ্ধতি
@Transactional
JDK থেকে
11
কঠিনতা
মধ্যম
ম্যানুয়াল JPA ট্রানজাকশন বনাম ডিক্লারেটিভ @Transactional
উপলব্ধ

জাকার্তা EE 8 / Java 11 থেকে ব্যাপকভাবে উপলব্ধ৷

ম্যানুয়াল ট্রানজাকশন ম্যানেজমেন্টের (transaction management) জন্য begin(), commit(), এবং rollback() কলগুলোকে ট্রাই-ক্যাচ ব্লক (try-catch blocks)-এর মধ্যে এক্সপ্লিসিটভাবে (explicitly) ব্যবহার করতে হয় – প্রতিটি সার্ভিস মেথডে এই বয়লারপ্লেট (boilerplate) কোড রিপিট করতে হয়। @Transactional অ্যানোটেশন লাইফসাইকেল ম্যানেজমেন্টকে কন্টেইনারের কাছে ডেলিগেট করে। এটি মেথডের আগে একটি ট্রানজাকশন শুরু করে, সফল হলে কমিট করে এবং RuntimeException ঘটলে স্বয়ংক্রিয়ভাবে রোলব্যাক (roll back) করে।