Spring Framework এর Transaction Management একটি গুরুত্বপূর্ণ বৈশিষ্ট্য যা ডেটাবেস বা অন্যান্য সিস্টেমে বিভিন্ন কার্যক্রম একযোগে পরিচালনা করতে সহায়তা করে। এটি নিশ্চিত করে যে, যদি কোনো এক কার্যক্রম ব্যর্থ হয়, তবে পুরো ট্রানজেকশনটি রোলব্যাক করা হয়, যাতে ডেটার অখণ্ডতা (data consistency) বজায় থাকে। Spring Transaction Management দুটি প্রধান পদ্ধতি ব্যবহার করে: Programmatic Transaction Management এবং Declarative Transaction Management।
এই টিউটোরিয়ালে আমরা Transaction Management এবং এর দুটি পদ্ধতি Declarative এবং Programmatic এর উদাহরণসহ ব্যাখ্যা করব।
Spring Transaction Management
Spring এর Transaction Management দুটি মূল উপাদান নিয়ে কাজ করে:
- Transaction Manager: এটি ডেটাবেসের সাথে ট্রানজেকশন পরিচালনা করে। Spring বিভিন্ন ধরনের ট্রানজেকশন ম্যানেজার সরবরাহ করে, যেমন
DataSourceTransactionManager,JpaTransactionManager,HibernateTransactionManagerইত্যাদি। - Transaction Boundaries: এগুলি সেই স্থান যেখানে ট্রানজেকশন শুরু এবং শেষ হবে, যেমন মেথডে
@Transactionalঅ্যানোটেশন ব্যবহৃত হয়।
Spring Transaction Management মূলত দুটি পদ্ধতি অনুসরণ করে:
- Declarative Transaction Management: এতে ট্রানজেকশন ম্যানেজমেন্টকে কনফিগারেশন বা অ্যানোটেশন ব্যবহার করে সহজে পরিচালনা করা হয়।
- Programmatic Transaction Management: এখানে কোডের মাধ্যমে সরাসরি ট্রানজেকশন ম্যানেজমেন্ট করা হয়।
1. Declarative Transaction Management
Declarative Transaction Management হল ট্রানজেকশন ম্যানেজমেন্টের একটি সহজ পদ্ধতি, যেখানে @Transactional অ্যানোটেশন ব্যবহার করে মেথডগুলিতে ট্রানজেকশন পরিচালনা করা হয়। Spring AOP (Aspect-Oriented Programming) এর মাধ্যমে ট্রানজেকশন শুরু এবং শেষ করা হয়। এটি সবচেয়ে জনপ্রিয় পদ্ধতি এবং সহজভাবে ব্যবহার করা যায়।
উদাহরণ: Declarative Transaction Management
@Service
public class EmployeeService {
@Autowired
private EmployeeRepository employeeRepository;
@Transactional
public void saveEmployee(Employee employee) {
employeeRepository.save(employee);
// আরও কিছু ডেটাবেস কাজ
}
}
এখানে:
- @Transactional অ্যানোটেশনটি মেথডের উপরে রাখা হয়েছে, যার মাধ্যমে Spring নিশ্চিত করবে যে, এই মেথডের মধ্যে যেকোনো ডেটাবেস কাজ একটি একক ট্রানজেকশনে সম্পন্ন হবে।
- যদি কোনো ব্যতিক্রম (exception) ঘটে, তাহলে Spring এই ট্রানজেকশনটি রোলব্যাক করবে।
Spring Configuration (XML/Java Config):
@Configuration
@EnableTransactionManagement
public class AppConfig {
@Bean
public DataSource dataSource() {
return new DriverManagerDataSource("jdbc:mysql://localhost:3306/mydb", "user", "password");
}
@Bean
public PlatformTransactionManager transactionManager(DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
}
এখানে:
- @EnableTransactionManagement অ্যানোটেশনটি Spring-কে ট্রানজেকশন ম্যানেজমেন্ট সক্রিয় করতে বলে।
- PlatformTransactionManager বীনটি ব্যবহৃত হয়েছে যাতে Spring ট্রানজেকশন পরিচালনা করতে পারে।
2. Programmatic Transaction Management
Programmatic Transaction Management হল যখন আপনি সরাসরি কোডের মধ্যে ট্রানজেকশন ম্যানেজমেন্ট করেন। এতে TransactionTemplate অথবা TransactionManager ব্যবহার করা হয়, যা আপনাকে ট্রানজেকশন শুরু, কমিট, বা রোলব্যাক করতে সাহায্য করে। এটি সাধারণত কমপ্লেক্স ট্রানজেকশন লজিক বা কাস্টম ট্রানজেকশন ম্যানেজমেন্টের জন্য ব্যবহৃত হয়।
উদাহরণ: Programmatic Transaction Management
@Service
public class EmployeeService {
@Autowired
private EmployeeRepository employeeRepository;
@Autowired
private PlatformTransactionManager transactionManager;
public void saveEmployee(Employee employee) {
TransactionStatus status = transactionManager.getTransaction(new DefaultTransactionDefinition());
try {
employeeRepository.save(employee);
// আরও কিছু ডেটাবেস কাজ
transactionManager.commit(status); // ট্রানজেকশন কমিট
} catch (Exception e) {
transactionManager.rollback(status); // ব্যতিক্রম ঘটলে রোলব্যাক
throw e;
}
}
}
এখানে:
- PlatformTransactionManager এর মাধ্যমে আমরা একটি নতুন ট্রানজেকশন তৈরি করছি এবং তারপর তা commit বা rollback করছি।
- এই পদ্ধতিতে, ট্রানজেকশন ম্যানেজমেন্ট কোডের মধ্যে সম্পাদিত হয় এবং Spring নিজে এটিকে পরিচালনা করে না।
@Transactional অ্যানোটেশন এবং এর কনফিগারেশন
@Transactional অ্যানোটেশন ব্যবহার করলে Spring ট্রানজেকশন ম্যানেজমেন্ট সরাসরি পরিচালনা করে এবং অ্যানোটেশন ব্যবহৃত মেথডের মধ্যে সমস্ত ডেটাবেস কার্যক্রম একটি একক ট্রানজেকশনে সম্পন্ন হবে। এটি Spring AOP ব্যবহার করে কার্যকরী হয়, যার ফলে কোনো মেথডে @Transactional ব্যবহৃত হলে সেই মেথডটি একটি ট্রানজেকশনে পরিণত হয়।
@Transactional এর কিছু গুরুত্বপূর্ণ বৈশিষ্ট্য:
- rollbackFor: ব্যতিক্রম ঘটলে কিসের জন্য রোলব্যাক হবে তা নির্ধারণ করা যায়।
- noRollbackFor: কোন ব্যতিক্রম ঘটলে রোলব্যাক হবে না তা নির্ধারণ করা যায়।
- readOnly: যদি শুধুমাত্র রিড অপারেশন করা হয়, তবে এটি
trueসেট করা যায়।
উদাহরণ: @Transactional এর কনফিগারেশন
@Transactional(rollbackFor = Exception.class)
public void processOrder(Order order) {
// কিছু ডেটাবেস অপারেশন
if (someErrorCondition) {
throw new RuntimeException("Error occurred");
}
}
এখানে:
- rollbackFor = Exception.class: সমস্ত ধরনের ব্যতিক্রম ঘটলে ট্রানজেকশন রোলব্যাক হবে।
- Spring নিশ্চিত করবে যে, যদি এই মেথডে কোনো ব্যতিক্রম ঘটে, তবে ট্রানজেকশন রোলব্যাক হবে এবং ডেটাবেসে কোনো পরিবর্তন হবে না।
সারাংশ
Spring এ Transaction Management দুটি প্রধান পদ্ধতিতে করা যায়:
- Declarative Transaction Management: এটি @Transactional অ্যানোটেশন ব্যবহার করে মেথড লেভেলে ট্রানজেকশন ম্যানেজমেন্ট সম্পাদন করা হয়। এটি সাধারণত সহজ এবং সুবিধাজনক পদ্ধতি।
- Programmatic Transaction Management: এখানে আপনি সরাসরি কোডের মধ্যে ট্রানজেকশন ম্যানেজমেন্ট পরিচালনা করেন, যেমন TransactionTemplate এবং TransactionManager ব্যবহার করে। এটি সাধারণত কমপ্লেক্স লজিকের জন্য ব্যবহার করা হয়।
Spring Transaction Management আপনার অ্যাপ্লিকেশনের ডেটার অখণ্ডতা এবং পারফরম্যান্স বজায় রাখতে সাহায্য করে, বিশেষ করে একাধিক ডেটাবেস অপারেশন পরিচালনা করার সময়। @Transactional অ্যানোটেশন এবং Spring এর ট্রানজেকশন ম্যানেজারগুলির মাধ্যমে আপনি সহজেই ট্রানজেকশন পরিচালনা করতে পারবেন।
Read more