@PersistenceContext হল EJB (Enterprise JavaBeans) এবং JPA (Java Persistence API)-এর একটি গুরুত্বপূর্ণ অ্যানোটেশন যা EntityManager এর injection পরিচালনা করতে ব্যবহৃত হয়। এটি একটি container-managed persistence context তৈরি করে, যা JPA Entity Beans-এর মাধ্যমে ডেটাবেস অপারেশন করতে সহায়ক হয়। সাধারণত, @PersistenceContext ব্যবহার করা হয় EJB সেশন Beans (যেমন Stateless, Stateful, Singleton) বা Managed Beans-এ, যেখানে EntityManager ইনজেক্ট করা হয় এবং ডেটাবেসে ক্রিয়েশন, রিড, আপডেট, ডিলিট (CRUD) অপারেশনগুলি করা হয়।
1. @PersistenceContext এর ধারণা
@PersistenceContext অ্যানোটেশনটি ব্যবহার করে EntityManager কে EJB Bean অথবা CDI Bean-এ ইনজেক্ট করা যায়। EntityManager একটি JPA API এর অংশ, যা ডেটাবেসের সাথে কাজ করার জন্য ব্যবহৃত হয়। এটি persistence context এ একাধিক entity-কে ট্র্যাক করে এবং তাদের ওপর CRUD অপারেশন পরিচালনা করে। Persistence Context একে অপরের থেকে নির্দিষ্ট ইন্ট্রিগ্রেটেড ডেটাবেস স্টেট হ্যান্ডেল করতে সহায়ক, এবং এটি সাধারণত ট্রানজেকশনের সাথে সম্পর্কিত হয়।
2. @PersistenceContext Annotation
@PersistenceContext অ্যানোটেশনটি EntityManager ইঞ্জেক্ট করতে ব্যবহৃত হয়। এই অ্যানোটেশনটি ডিফল্টভাবে container-managed persistence context তৈরি করে, যেখানে EntityManager নিজে থেকেই ডেটাবেসের লিঙ্ক এবং অবস্থা পরিচালনা করে। এটি সাধারণত EntityManager ফিল্ড বা কনস্ট্রাকটরের মাধ্যমে ক্লাসে ইনজেক্ট করা হয়।
Syntax:
@PersistenceContext(unitName = "yourUnitName")
private EntityManager entityManager;
- unitName: এটি JPA persistence.xml ফাইলে ডিফাইন করা persistence unit এর নাম।
- EntityManager: এটি একটি JPA এর API এর ক্লাস যা ডেটাবেসের সাথে CRUD অপারেশন পরিচালনা করে।
3. EJB Bean-এ @PersistenceContext ব্যবহার করা
EJB-এর মধ্যে @PersistenceContext অ্যানোটেশন ব্যবহার করে EntityManager ইনজেক্ট করা হয়, এবং এটি ডেটাবেস সম্পর্কিত কাজ সহজ করে তোলে। এখানে একটি উদাহরণ দেওয়া হয়েছে যা দেখায় কিভাবে @PersistenceContext ব্যবহার করা হয়।
a) Entity Class (JPA Entity)
প্রথমে একটি Entity Bean তৈরি করা হয় যা ডেটাবেসের টেবিলের প্রতিনিধিত্ব করে।
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class Employee {
@Id
private Long id;
private String name;
private String position;
// Getters and Setters
}
b) EJB Bean Class with @PersistenceContext
এখন, EJB সেশন Bean এ @PersistenceContext ব্যবহার করে EntityManager ইনজেক্ট করা হয় এবং ডেটাবেস অপারেশন পরিচালনা করা হয়।
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
@Stateless
public class EmployeeService {
@PersistenceContext(unitName = "myPU") // Injecting EntityManager
private EntityManager entityManager;
// Method to create a new employee
public void createEmployee(Employee employee) {
entityManager.persist(employee); // Persisting the Employee entity
}
// Method to find an employee by ID
public Employee findEmployeeById(Long id) {
return entityManager.find(Employee.class, id); // Fetching the Employee entity
}
// Method to update an employee
public void updateEmployee(Employee employee) {
entityManager.merge(employee); // Updating the Employee entity
}
// Method to delete an employee
public void deleteEmployee(Long id) {
Employee employee = entityManager.find(Employee.class, id);
if (employee != null) {
entityManager.remove(employee); // Removing the Employee entity
}
}
}
ব্যাখ্যা:
- @PersistenceContext(unitName = "myPU"): এখানে
EntityManagerকে myPU নামে একটি persistence unit এর মাধ্যমে ইনজেক্ট করা হয়েছে। এটিpersistence.xmlফাইলে ডিফাইন করা persistence unit এর নামের সাথে মেলাবে। - entityManager.persist(): একটি নতুন Employee অবজেক্ট ডেটাবেসে সংরক্ষণ করার জন্য ব্যবহৃত হয়।
- entityManager.find(): ডেটাবেস থেকে একটি Entity অবজেক্ট খুঁজে বের করার জন্য ব্যবহৃত হয়।
- entityManager.merge(): একটি Entity অবজেক্ট আপডেট বা সংশোধন করার জন্য ব্যবহৃত হয়।
- entityManager.remove(): একটি Entity অবজেক্ট মুছে ফেলতে ব্যবহৃত হয়।
4. persistence.xml ফাইল (Configuration)
এখন @PersistenceContext ব্যবহারের জন্য persistence.xml ফাইলের মধ্যে persistence unit কনফিগারেশন করতে হবে, যা EJB কন্টেইনারকে জানায় কোন ডেটাবেস ব্যবহার করা হবে।
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
<persistence-unit name="myPU" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>jdbc/EmployeeDB</jta-data-source>
<class>com.example.Employee</class>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
</properties>
</persistence-unit>
</persistence>
ব্যাখ্যা:
- name="myPU": এটি persistence unit এর নাম। EJB Bean-এ @PersistenceContext(unitName = "myPU") দিয়ে এটি রেফারেন্স করা হয়।
- jta-data-source: এটি আপনার ডেটাবেসের জেটিএ ডাটা সোর্সের রেফারেন্স।
- : এতে Entity class এর নাম দেওয়া হয় যেটি ডেটাবেসের টেবিলের সাথে সম্পর্কিত।
5. @PersistenceContext এর সুবিধা
- Automatic Context Management: EJB কন্টেইনার নিজেই Persistence Context পরিচালনা করে, অর্থাৎ ডেটাবেস ট্রানজেকশন এবং EntityManager এর জীবনচক্র সঠিকভাবে পরিচালিত হয়।
- Simplified Code: @PersistenceContext অ্যানোটেশন ব্যবহারের মাধ্যমে, ডেভেলপারদের EntityManager তৈরি বা পরিচালনা করতে হয় না, এটি EJB কন্টেইনার স্বয়ংক্রিয়ভাবে ইনজেক্ট করে দেয়।
- Transactional Support: Persistence Context স্বয়ংক্রিয়ভাবে ট্রানজেকশন সমর্থন প্রদান করে, যা ডেটাবেস অপারেশনগুলি ট্রানজেকশনের অধীনে সম্পন্ন হয়।
- Scoped Entity Management: @PersistenceContext EntityManager এর context পরিচালনা করে, যেমন ডেটাবেসে অবজেক্টগুলোর সেশন, খোঁজা, লকিং ইত্যাদি।
6. @PersistenceContext এবং Transaction Management
@PersistenceContext এবং Transaction Management একে অপরের সাথে সম্পর্কিত, কারণ EJB কন্টেইনার container-managed transaction (CMT) ব্যবস্থাপনা করে, যেখানে EJB ক্লাসের মেথডে @TransactionAttribute অ্যানোটেশন ব্যবহার করা হয়। CMT ট্রানজেকশন ব্যবস্থাপনা EJB কন্টেইনার দ্বারা পরিচালিত হয় এবং এটি EntityManager কে ট্রানজেকশনের অধীনে কার্যক্রম পরিচালনা করতে সাহায্য করে।
@PersistenceContext হল EJB এবং JPA-এ একটি অত্যন্ত গুরুত্বপূর্ণ অ্যানোটেশন যা ডেটাবেস অপারেশন পরিচালনা করার জন্য EntityManager ইনজেক্ট করতে ব্যবহৃত হয়। এটি ডেভেলপারদের জন্য ডেটাবেস সংযোগ এবং CRUD অপারেশনগুলির ক্ষেত্রে কার্যকারিতা সহজ করে তোলে। @PersistenceContext এর মাধ্যমে container-managed persistence context ব্যবহৃত হয়, যা ট্রানজেকশন ম্যানেজমেন্ট, ডেটাবেস অপারেশন এবং কোড সিম্প্লিফিকেশন নিশ্চিত করে।
Read more