Declarative এবং Programmatic Transaction Management

Java Technologies - স্প্রিং বুট জেপিএ (Spring Boot JPA) - Transaction Management
338

Transaction Management কি?

Transaction Management ডেটাবেস অপারেশন বা কোনো নির্দিষ্ট ক্রিয়ার একটি পূর্ণ প্রক্রিয়া নিশ্চিত করে যা সফলভাবে সম্পন্ন হয় বা পুরোপুরি বাতিল হয়ে যায়। এটি নিশ্চিত করে যে একটি অ্যাপ্লিকেশন বা সিস্টেমের যেকোনো পরিবর্তন সঠিকভাবে সম্পন্ন হচ্ছে এবং কোনো অর্ধেক পরিবর্তন (অর্থাৎ, যেগুলি পুরোপুরি সম্পন্ন হয়নি) ডেটাবেসে অন্তর্ভুক্ত না হয়। Transactional Management ডেটাবেস সিস্টেমের ACID (Atomicity, Consistency, Isolation, Durability) গুণাবলী নিশ্চিত করার জন্য ব্যবহৃত হয়।

স্প্রিং ফ্রেমওয়ার্কে ট্রানজেকশন ব্যবস্থাপনা প্রধানত দুটি পদ্ধতিতে পরিচালিত হয়:

  1. Declarative Transaction Management
  2. Programmatic Transaction Management

১. Declarative Transaction Management

Declarative Transaction Management হল স্প্রিং এর সবচেয়ে জনপ্রিয় ট্রানজেকশন ব্যবস্থাপনা পদ্ধতি। এই পদ্ধতিতে, @Transactional অ্যানোটেশন ব্যবহার করে ট্রানজেকশন পরিচালনা করা হয়। স্প্রিং কন্টেইনার এই অ্যানোটেশনটি স্বয়ংক্রিয়ভাবে প্রক্রিয়া করে, এবং যখন একটি মেথডে @Transactional অ্যাপ্লাই করা হয়, তখন স্প্রিং সেই মেথডের মধ্যে সব ডেটাবেস অপারেশনকে একটি ট্রানজেকশনে সংযুক্ত করে।

উদাহরণ:

TransactionService.java:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class TransactionService {

    @Autowired
    private AccountRepository accountRepository;

    @Transactional
    public void transferMoney(Long fromAccountId, Long toAccountId, double amount) {
        Account fromAccount = accountRepository.findById(fromAccountId).get();
        Account toAccount = accountRepository.findById(toAccountId).get();

        fromAccount.setBalance(fromAccount.getBalance() - amount);
        toAccount.setBalance(toAccount.getBalance() + amount);

        accountRepository.save(fromAccount);
        accountRepository.save(toAccount);
    }
}

ব্যাখ্যা:

  • @Transactional: এই অ্যানোটেশনটি মেথড বা ক্লাস স্তরে ট্রানজেকশন ব্যবস্থাপনা কার্যকরী করে।
  • যখন transferMoney() মেথড কল করা হয়, স্প্রিং এটি একটি একক ট্রানজেকশনে আটকে রাখবে। যদি কোনো কারণে মেথডটি ব্যর্থ হয়, সমস্ত পরিবর্তন রোলব্যাক হবে এবং ডেটাবেসের অবস্থা আগের মতো থাকবে।

application.properties কনফিগারেশন:

spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=root
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect

২. Programmatic Transaction Management

Programmatic Transaction Management পদ্ধতিতে, ট্রানজেকশন পরিচালনা কোডের মাধ্যমে করা হয়, অর্থাৎ ম্যানুয়ালি ট্রানজেকশন শুরু, কমিট, বা রোলব্যাক করা হয়। এটি স্প্রিং এর PlatformTransactionManager এবং TransactionDefinition ক্লাসগুলির মাধ্যমে সম্পন্ন হয়।

উদাহরণ:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.DefaultTransactionDefinition;

@Service
public class ProgrammaticTransactionService {

    @Autowired
    private AccountRepository accountRepository;

    @Autowired
    private PlatformTransactionManager transactionManager;

    public void transferMoney(Long fromAccountId, Long toAccountId, double amount) {
        // Transaction definition
        DefaultTransactionDefinition def = new DefaultTransactionDefinition();
        def.setIsolationLevel(TransactionDefinition.ISOLATION_SERIALIZABLE);
        def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);

        // Start transaction
        TransactionStatus status = transactionManager.getTransaction(def);

        try {
            Account fromAccount = accountRepository.findById(fromAccountId).get();
            Account toAccount = accountRepository.findById(toAccountId).get();

            fromAccount.setBalance(fromAccount.getBalance() - amount);
            toAccount.setBalance(toAccount.getBalance() + amount);

            accountRepository.save(fromAccount);
            accountRepository.save(toAccount);

            // Commit transaction
            transactionManager.commit(status);
        } catch (Exception e) {
            // Rollback transaction in case of error
            transactionManager.rollback(status);
            throw e;
        }
    }
}

ব্যাখ্যা:

  • PlatformTransactionManager: এটি স্প্রিং এর ইন্টারফেস যা ট্রানজেকশন পরিচালনা করতে ব্যবহৃত হয়।
  • TransactionDefinition: এটি ট্রানজেকশনের আচরণ নির্ধারণ করে, যেমন ISOLATION এবং PROPAGATION
  • DefaultTransactionDefinition: এটি TransactionDefinition এর একটি সাধারণ বাস্তবায়ন, যা ট্রানজেকশন সেটিংস কনফিগার করতে সহায়ক।
  • getTransaction(), commit(), এবং rollback() মেথডগুলি ট্রানজেকশন ম্যানেজমেন্ট পরিচালনা করে।

এই পদ্ধতিতে, আপনি ট্রানজেকশন শুরু, কমিট এবং রোলব্যাক কোডের মাধ্যমে ম্যানুয়ালি করতে পারেন।


Declarative vs Programmatic Transaction Management

বিশেষত্বDeclarative Transaction ManagementProgrammatic Transaction Management
উপস্থিতি@Transactional অ্যানোটেশন ব্যবহার করেPlatformTransactionManager এবং TransactionDefinition ব্যবহার করে
সহজ ব্যবহারসহজ, কম কোড লেখা লাগেবেশি কোড লেখার প্রয়োজন
ফ্লেক্সিবিলিটিকম, অ্যানোটেশন ব্যবহার করে প্রোগ্রামিং কমপ্লেক্সিটি কমানো হয়বেশি, কোডে সম্পূর্ণ নিয়ন্ত্রণ পাওয়া যায়
ব্যবহারসাধারণ CRUD অপারেশন এবং ট্রানজেকশনের জন্য উপযুক্তযেখানে উচ্চ স্তরের কাস্টমাইজেশন প্রয়োজন

সারাংশ

Spring Transaction Management অ্যাপ্লিকেশনের ডেটাবেস অপারেশনগুলিকে কার্যকরীভাবে পরিচালনা করে এবং ACID গুণাবলী বজায় রাখে। স্প্রিং Declarative Transaction Management (যেমন @Transactional অ্যানোটেশন) এবং Programmatic Transaction Management (যেমন PlatformTransactionManager) উভয় পদ্ধতিতে ট্রানজেকশন পরিচালনা করার সুবিধা প্রদান করে।

Declarative Transaction Management বেশি ব্যবহারযোগ্য, কারণ এটি কোডের মধ্যে এক্সপ্রেসিভলি কমপ্লেক্সিটি কমায় এবং স্প্রিং কন্টেইনার দ্বারা স্বয়ংক্রিয়ভাবে পরিচালিত হয়, যেখানে Programmatic Transaction Management বেশি কাস্টমাইজেশন এবং নিয়ন্ত্রণ প্রদান করে, কিন্তু বেশি কোড লেখা প্রয়োজন।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...