Transaction Scope এবং Propagation

Transactions এবং iBATIS - আইবাটিস (iBATIS) - Java Technologies

327

iBATIS (MyBatis)-এ Transaction Scope এবং Propagation ব্যবস্থাপনা খুবই গুরুত্বপূর্ণ, কারণ এটি ডেটাবেসের ট্রানজেকশন কার্যক্রমের সঠিকতা এবং পারফরম্যান্স নিশ্চিত করতে সাহায্য করে। Transaction Scope এবং Propagation ব্যবহারের মাধ্যমে, আপনি নিশ্চিত করতে পারেন যে ডেটাবেসের সাথে একাধিক অপারেশন সঠিকভাবে পরিচালিত হচ্ছে এবং প্রয়োজনে ট্রানজেকশন রোলব্যাক বা কমিট করা হচ্ছে।

এখানে, iBATIS (MyBatis)-এ Transaction Scope এবং Propagation ব্যবস্থাপনা কীভাবে করা হয় তা বিস্তারিতভাবে আলোচনা করা হবে।


1. iBATIS (MyBatis) Transaction Management

iBATIS (MyBatis) ট্রানজেকশন ব্যবস্থাপনার জন্য দুটি প্রধান পদ্ধতি ব্যবহার করে:

  1. JDBC Transaction Management (প্রত্যক্ষ JDBC ট্রানজেকশন ব্যবস্থাপনা)
  2. Managed Transaction (যেমন Spring-এর মাধ্যমে)

a) JDBC Transaction Management

JDBC Transaction Management সাধারণত SqlSession ব্যবহার করে পরিচালিত হয়। আপনি SqlSession এর মাধ্যমে ট্রানজেকশন শুরু করতে পারেন, কমিট করতে পারেন, অথবা রোলব্যাক করতে পারেন। এটি manual ট্রানজেকশন ম্যানেজমেন্ট সিস্টেম যেখানে ডেটাবেস ট্রানজেকশন শুরু করা হয় এবং শেষ হয় অ্যাপ্লিকেশন লেভেলে।

Example of JDBC Transaction Management in iBATIS (MyBatis):
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

public class TransactionExample {
    private SqlSessionFactory sqlSessionFactory;

    public TransactionExample(SqlSessionFactory sqlSessionFactory) {
        this.sqlSessionFactory = sqlSessionFactory;
    }

    public void executeTransaction() {
        // Start a new session
        try (SqlSession session = sqlSessionFactory.openSession()) {
            // Start a transaction
            session.getTransaction().begin();
            
            try {
                // Perform some database operations
                StudentMapper studentMapper = session.getMapper(StudentMapper.class);
                studentMapper.insertStudent(new Student("John", "Java"));
                
                // Commit the transaction if everything goes well
                session.commit();
            } catch (Exception e) {
                // Rollback if any error occurs
                session.rollback();
                e.printStackTrace();
            }
        }
    }
}

Explanation:

  • session.getTransaction().begin(): এটি ট্রানজেকশন শুরু করার জন্য ব্যবহার করা হয়।
  • session.commit(): যদি সবকিছু সঠিকভাবে সম্পন্ন হয়, তবে ট্রানজেকশন কমিট করা হয়।
  • session.rollback(): যদি কোনো সমস্যা ঘটে, তবে ট্রানজেকশন রোলব্যাক করা হয়।

b) Managed Transactions with Spring

Spring-এ iBATIS/MyBatis ব্যবহার করলে, Spring নিজে transaction management সরবরাহ করে। Spring ব্যবহার করলে, Spring's @Transactional অ্যানোটেশন দিয়ে ট্রানজেকশন পরিচালনা করা হয়।

Spring Configuration for MyBatis Transaction Management:
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
    <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/my_database"/>
    <property name="username" value="user"/>
    <property name="password" value="password"/>
</bean>

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
</bean>

<bean id="transactionManager" class="org.springframework.orm.ibatis.SqlMapClientTransactionManager">
    <property name="dataSource" ref="dataSource"/>
</bean>
Spring Service with @Transactional:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class StudentService {

    @Autowired
    private StudentMapper studentMapper;

    @Transactional
    public void saveStudent() {
        Student student = new Student("Alice", "Spring");
        studentMapper.insertStudent(student);
    }
}

Explanation:

  • @Transactional: Spring-এর @Transactional অ্যানোটেশন ট্রানজেকশন ম্যানেজমেন্ট সরবরাহ করে, এবং এটি স্বয়ংক্রিয়ভাবে commit বা rollback পরিচালনা করে।

2. iBATIS (MyBatis) Transaction Propagation

Transaction Propagation হল ট্রানজেকশনের আচরণ নির্ধারণের একটি কৌশল। এটি ইঙ্গিত দেয় যে, একটি ট্রানজেকশন সম্পূর্ণ হওয়ার পর অন্য ট্রানজেকশন কীভাবে আচরণ করবে। iBATIS (MyBatis)-এ, যদি আপনি Spring এর মতো কোনো ট্রানজেকশন ম্যানেজার ব্যবহার করেন, তবে আপনাকে transaction propagation সম্পর্কে ধারণা থাকতে হবে।

Common Propagation Types in Spring:

  1. REQUIRED: যদি কোনো ট্রানজেকশন ইতোমধ্যে চলে আসছে, তবে এটি সেই ট্রানজেকশনটিতে যোগ দেবে, অন্যথায় একটি নতুন ট্রানজেকশন তৈরি করবে।
  2. REQUIRES_NEW: একটি নতুন ট্রানজেকশন তৈরি করবে এবং বর্তমান ট্রানজেকশনটি সাসপেন্ড (temporarily paused) করবে।
  3. SUPPORTS: যদি ট্রানজেকশন চলমান থাকে, তবে সেই ট্রানজেকশন ব্যবহার করবে, অন্যথায় চলবে না।
  4. MANDATORY: এই প্রোপাগেশন ব্যবহার করলে, যদি ট্রানজেকশন চলমান না থাকে তবে একটি Exception থ্রো হবে।
  5. NOT_SUPPORTED: কোনো ট্রানজেকশন শুরু করবে না এবং চলমান ট্রানজেকশন সাসপেন্ড করবে।
  6. NEVER: ট্রানজেকশন শুরু করবে না, এবং যদি চলমান ট্রানজেকশন থাকে তবে একটি Exception থ্রো হবে।
  7. NESTED: একটি নতুন ট্রানজেকশন তৈরি করবে, কিন্তু বর্তমান ট্রানজেকশনটির একটি নেস্টেড (sub-transaction) ট্রানজেকশন থাকবে।

Example of Propagation Using @Transactional in Spring:

import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

@Service
public class StudentService {

    @Autowired
    private StudentMapper studentMapper;

    @Transactional(propagation = Propagation.REQUIRED)
    public void saveStudent(Student student) {
        studentMapper.insertStudent(student);
        // Some other operations
    }

    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void updateStudent(Student student) {
        studentMapper.updateStudent(student);
        // Some other operations
    }
}

Explanation:

  • @Transactional(propagation = Propagation.REQUIRED): যদি কোনো ট্রানজেকশন চলমান থাকে, তবে সেই ট্রানজেকশনটিতে যোগ হবে।
  • @Transactional(propagation = Propagation.REQUIRES_NEW): একটি নতুন ট্রানজেকশন শুরু করবে, যেটি বর্তমান ট্রানজেকশন থেকে আলাদা থাকবে।

3. Benefits of Using Transaction Scope and Propagation

  1. Consistency: Transaction Scope নিশ্চিত করে যে আপনার ডেটাবেস অপারেশনগুলি একটি অ্যাটমিক একক হিসেবে কার্যকর হবে, অর্থাৎ commit বা rollback এর মাধ্যমে পুরো ট্রানজেকশন সম্পূর্ণ হবে।
  2. Complex Operations: Propagation আপনাকে একটি ট্রানজেকশনের মধ্যে একাধিক কাজ পরিচালনা করতে সহায়তা করে এবং যখন একাধিক ট্রানজেকশন সম্পন্ন হতে পারে, তখন তাদের আচরণ নিয়ন্ত্রণ করতে সাহায্য করে।
  3. Error Handling: Rollback এবং Exception Handling ব্যবস্থার মাধ্যমে আপনি নিশ্চিত করতে পারেন যে যদি কোনো ত্রুটি ঘটে তবে সমস্ত পরিবর্তন পূর্বাবস্থায় ফিরে যাবে, এবং ডেটাবেসের সার্বিক সঠিকতা বজায় থাকবে।

iBATIS (MyBatis)-এ Transaction Scope এবং Propagation ব্যবস্থাপনা কার্যকরভাবে ডেটাবেস অপারেশনের সামগ্রিক পারফরম্যান্স এবং নির্ভরযোগ্যতা নিশ্চিত করতে সাহায্য করে। Transaction Scope এর মাধ্যমে আপনি ট্রানজেকশন শুরু করতে এবং শেষ করতে পারেন, এবং Propagation এর মাধ্যমে বিভিন্ন ট্রানজেকশনের মধ্যে আচরণ নির্ধারণ করতে পারেন। Spring ব্যবহারে আপনি @Transactional অ্যানোটেশন এবং transaction propagation types ব্যবহার করে আরো সুসংগঠিত ট্রানজেকশন ম্যানেজমেন্ট করতে পারেন।

Content added By
Promotion

Are you sure to start over?

Loading...