EJB তে Persistence Context (@PersistenceContext Annotation)

EJB এর সাথে JPA (Java Persistence API) Integration - ইজেবি (EJB) - Java Technologies

199

@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 ব্যবহৃত হয়, যা ট্রানজেকশন ম্যানেজমেন্ট, ডেটাবেস অপারেশন এবং কোড সিম্প্লিফিকেশন নিশ্চিত করে।

Content added By
Promotion

Are you sure to start over?

Loading...