Skill

EJB এর সাথে JPA (Java Persistence API) Integration

ইজেবি (EJB) - Java Technologies

331

EJB (Enterprise JavaBeans) এবং JPA (Java Persistence API) দুইটি গুরুত্বপূর্ণ Java EE প্রযুক্তি যা ডিস্ট্রিবিউটেড অ্যাপ্লিকেশন এবং ডাটাবেস সংক্রান্ত কাজের জন্য ব্যবহৃত হয়। EJB সাধারণত ব্যবসায়িক লজিক (business logic) বাস্তবায়ন করে, আর JPA ডেটাবেসের সাথে যোগাযোগ এবং ডেটা সংরক্ষণের কাজ করে। EJB এবং JPA একসাথে কাজ করার মাধ্যমে আপনি ডিস্ট্রিবিউটেড অ্যাপ্লিকেশনের জন্য শক্তিশালী এবং স্কেলেবল সমাধান তৈরি করতে পারেন।

এখানে EJB এবং JPA এর একত্রে ব্যবহার এবং তাদের ইন্টিগ্রেশন নিয়ে বিস্তারিত আলোচনা করা হলো। এই পদক্ষেপগুলো অনুসরণ করলে আপনি Eclipse IDE-তে সহজেই EJB এবং JPA ব্যবহার করে অ্যাপ্লিকেশন তৈরি করতে পারবেন।


1. EJB এবং JPA কী?

  • EJB (Enterprise JavaBeans): এটি একটি সার্ভার সাইড কম্পোনেন্ট মডেল যা business logic বাস্তবায়ন করতে ব্যবহৃত হয়। EJB সাধারণত ডিস্ট্রিবিউটেড এবং ট্রানজেকশনাল অ্যাপ্লিকেশন তৈরি করতে ব্যবহৃত হয়। EJB-র বিভিন্ন প্রকার যেমন Stateless, Stateful, Singleton এবং Message-Driven Beans
  • JPA (Java Persistence API): এটি একটি Java API যা object-relational mapping (ORM) প্যাটার্ন ব্যবহার করে ডেটাবেসে অবজেক্ট সংরক্ষণ এবং পরিচালনা করতে সাহায্য করে। JPA দিয়ে আপনি entities তৈরি করতে পারেন যা ডেটাবেস টেবিলের সাথে সম্পর্কিত থাকে এবং জাভা অবজেক্ট হিসেবে ডেটা পরিচালনা করতে পারে।

2. EJB এবং JPA Integration: Steps

Eclipse IDE-তে EJB এবং JPA ইন্টিগ্রেটেড অ্যাপ্লিকেশন তৈরি করার জন্য আপনাকে কিছু গুরুত্বপূর্ণ ধাপ অনুসরণ করতে হবে:

ধাপ ১: প্রোজেক্ট তৈরি করা

  1. File > New > Dynamic Web Project নির্বাচন করুন।
  2. প্রোজেক্টের নাম দিন (যেমন: EJBJPAExample) এবং Finish ক্লিক করুন।
  3. Java EE 7 বা Java EE 8 এর সাপোর্ট সক্ষম করুন, যদি আপনার Eclipse তে সেগুলি না থাকে তবে আপনাকে GlassFish বা WildFly সার্ভার সিস্টেম ইনস্টল করতে হতে পারে।

ধাপ ২: JPA লাইব্রেরি যোগ করা

  1. pom.xml (যদি Maven প্রোজেক্ট হয়) অথবা WEB-INF/lib-এ JPA লাইব্রেরি যোগ করুন।
  2. সাধারণত Hibernate বা EclipseLink JPA ইমপ্লিমেন্টেশন হিসাবে ব্যবহৃত হয়।

Maven Dependency উদাহরণ (Hibernate):

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>5.5.6.Final</version>
</dependency>

ধাপ ৩: EJB এবং JPA Entity ক্লাস তৈরি করা

JPA Entity ক্লাস তৈরি করার জন্য, আপনাকে একটি @Entity ক্লাস তৈরি করতে হবে যা ডেটাবেস টেবিলের প্রতিনিধিত্ব করবে। EJB তে, আমরা সাধারণত Stateless Session Bean ব্যবহার করি, যা business logic পরিচালনা করবে।

JPA Entity ক্লাস উদাহরণ:
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;

@Entity
public class Customer {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String name;
    private String email;

    // Getters and Setters
}

এখানে, Customer একটি JPA entity ক্লাস, যা ডেটাবেসে customer টেবিলের জন্য মডেল হিসেবে কাজ করবে।

Stateless EJB Session Bean উদাহরণ:
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

@Stateless
public class CustomerServiceBean {
    
    @PersistenceContext
    private EntityManager entityManager;
    
    public void createCustomer(Customer customer) {
        entityManager.persist(customer);  // Save customer to DB
    }
    
    public Customer findCustomer(Long id) {
        return entityManager.find(Customer.class, id);  // Retrieve customer by ID
    }
}

এখানে, CustomerServiceBean একটি Stateless Session Bean, যা JPA EntityManager ব্যবহার করে Customer entities ডেটাবেসে সংরক্ষণ এবং পুনরুদ্ধার করে।


3. persistence.xml কনফিগারেশন

JPA এর সাথে কাজ করার জন্য আপনাকে persistence.xml কনফিগারেশন ফাইল তৈরি করতে হবে, যা আপনার entity manager এবং JPA প্রোভাইডার এর সেটিংস সংরক্ষণ করে।

persistence.xml উদাহরণ (src/META-INF/persistence.xml):

<?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="examplePU">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <class>com.example.Customer</class> <!-- JPA Entity Class -->
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
            <property name="hibernate.hbm2ddl.auto" value="update"/>
            <property name="hibernate.show_sql" value="true"/>
            <property name="hibernate.format_sql" value="true"/>
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/mydb"/>
            <property name="javax.persistence.jdbc.user" value="root"/>
            <property name="javax.persistence.jdbc.password" value="password"/>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
        </properties>
    </persistence-unit>
</persistence>

এখানে:

  • persistence-unit: এটি JPA কনফিগারেশন ব্লক যা EntityManager এর কনফিগারেশন এবং প্রোভাইডার ব্যবহার করে।
  • provider: JPA প্রোভাইডার (যেমন Hibernate) উল্লেখ করা হয়।
  • hibernate.dialect: ডেটাবেস ডায়ালেক্ট (যেমন MySQL) নির্ধারণ করা হয়।
  • javax.persistence.jdbc.*: JDBC কনফিগারেশন ডাটাবেসের সাথে সংযোগ স্থাপনের জন্য।

4. Eclipse-এ অ্যাপ্লিকেশন রান করা

  1. আপনার EJB এবং JPA ইন্টিগ্রেটেড প্রোজেক্ট তৈরি হওয়ার পর, আপনি এটি Eclipse IDE তে রান করতে পারেন।
  2. Run > Run on Server নির্বাচন করুন এবং উপযুক্ত সার্ভার (যেমন GlassFish বা WildFly) নির্বাচন করুন।
  3. সঠিকভাবে কনফিগার করার পরে, আপনার Stateless Session Bean এর মাধ্যমে JPA Entity সংরক্ষণ এবং পুনরুদ্ধার করা হবে।

5. EJB এবং JPA Integration-এর সুবিধা

  • Seamless Integration: EJB এবং JPA একে অপরের সাথে ভালোভাবে একীভূত হয়, যেখানে EJB business logic পরিচালনা করে এবং JPA ডেটাবেস অপারেশন পরিচালনা করে।
  • Transaction Management: EJB-এর মধ্যে container-managed transaction ব্যবহার করা যেতে পারে যা JPA-এর সাথে সম্পূর্ণরূপে সংহত থাকে।
  • Entity Persistence: JPA EntityBeans ডেটাবেস টেবিলের সাথে সংযুক্ত থাকে এবং EJB এর মধ্যে সহজেই ম্যানিপুলেট করা যায়।

সারাংশ

Eclipse IDE-তে EJB এবং JPA এর ইন্টিগ্রেশন আপনাকে ডিস্ট্রিবিউটেড অ্যাপ্লিকেশন তৈরি করতে সহায়তা করে। JPA (Java Persistence API) ডেটাবেসের সাথে যোগাযোগ এবং ডেটা সঞ্চয়ের কাজ করে, এবং EJB (Enterprise JavaBeans) ব্যবসায়িক লজিক বাস্তবায়ন করে। আপনি Stateless Session Bean ব্যবহার করে JPA Entity এর মাধ্যমে ডেটাবেস অপারেশন করতে পারেন। এই ইন্টিগ্রেশনটি transaction management, entity persistence, এবং business logic সংহত করার জন্য খুবই উপকারী।

Content added By

EJB (Enterprise JavaBeans) এবং JPA (Java Persistence API) হল Java EE (Enterprise Edition) এর দুটি শক্তিশালী প্রযুক্তি যা এন্টারপ্রাইজ অ্যাপ্লিকেশন ডেভেলপমেন্টের জন্য ব্যবহৃত হয়। EJB সাধারণত ব্যবসা লজিক (business logic) বাস্তবায়ন এবং সিস্টেমের অন্যান্য কার্যক্রম পরিচালনা করতে ব্যবহৃত হয়, এবং JPA ডেটাবেসে ডেটা সংরক্ষণ ও পরিচালনার জন্য ব্যবহৃত হয়।

এই দুটি প্রযুক্তি একে অপরের সাথে গভীরভাবে সম্পর্কিত, কারণ অনেক ক্ষেত্রে, EJB এর Session Beans এবং Message-Driven Beans (MDB) JPA ব্যবহার করে ডেটাবেসের সাথে যোগাযোগ করে। এর ফলে, EJB এবং JPA একত্রে ব্যবহার করে শক্তিশালী এন্টারপ্রাইজ সিস্টেম তৈরি করা হয়, যেখানে EJB ব্যবসা লজিক পরিচালনা করে এবং JPA ডেটা ম্যানেজমেন্ট সরবরাহ করে।


1. EJB (Enterprise JavaBeans):

EJB (Enterprise JavaBeans) হল Java EE এর একটি কম্পোনেন্ট মডেল যা এন্টারপ্রাইজ অ্যাপ্লিকেশন ডেভেলপমেন্টের জন্য ব্যবহৃত হয়। EJB এ তিন ধরনের কম্পোনেন্ট পাওয়া যায়:

  • Session Beans (Stateless, Stateful)
  • Message-Driven Beans (MDB)
  • Entity Beans (এটি পুরনো এবং বর্তমানে JPA এর মাধ্যমে প্রতিস্থাপিত)

EJB এর উদ্দেশ্য:

  • Business Logic: EJB মূলত ব্যবসা লজিক (business logic) এবং অন্যান্য সার্ভার-সাইড কার্যক্রম (যেমন, ট্রানজেকশন ম্যানেজমেন্ট, সিকিউরিটি) পরিচালনা করতে ব্যবহৃত হয়।
  • Scalability: EJB সার্ভার-সাইড কম্পোনেন্ট যা ডিস্ট্রিবিউটেড সিস্টেমে কাজ করতে পারে এবং এটি scalability প্রদান করে।
  • Transaction Management: EJB স্বয়ংক্রিয়ভাবে ট্রানজেকশন ম্যানেজমেন্ট এবং সিকিউরিটি নিশ্চিত করে।

EJB এর ধরণ:

  1. Stateless Session Beans: এই ধরনের Beans ক্লায়েন্টের অবস্থা (state) সংরক্ষণ করে না।
  2. Stateful Session Beans: এই Beans ক্লায়েন্টের অবস্থা সংরক্ষণ করে।
  3. Message-Driven Beans (MDB): এই Beans asynchronous মেসেজ প্রক্রিয়া করার জন্য ব্যবহৃত হয়।

2. JPA (Java Persistence API):

JPA (Java Persistence API) হল একটি Java API যা ডেটাবেসে ডেটা সংরক্ষণ, রিড, আপডেট এবং ডিলিট করার জন্য ব্যবহৃত হয়। এটি ORM (Object-Relational Mapping) এর মাধ্যমে Java অবজেক্টগুলোকে ডেটাবেস টেবিলের সাথে ম্যাপ করে।

JPA এর উদ্দেশ্য:

  • Persistence Layer: JPA ডেটাবেসের সাথে Java অ্যাপ্লিকেশনের persistence layer সংযোগ স্থাপন করে।
  • Entity Management: JPA ডেটাবেসের entities (যেমন টেবিলের সারি) কে Java অবজেক্টে রূপান্তর করে এবং সেই অবজেক্ট গুলি ডেটাবেসে সংরক্ষণ, আপডেট, বা মুছে ফেলা হয়।
  • Query Language: JPA JPQL (Java Persistence Query Language) ব্যবহার করে ডেটাবেস থেকে তথ্য বের করার জন্য কুয়েরি তৈরি করা যায়।

JPA এর মূল উপাদান:

  • Entity: এটি একটি POJO (Plain Old Java Object) যা ডেটাবেস টেবিলের সাথে সম্পর্কিত থাকে।
  • EntityManager: এটি ডেটাবেসের সাথে ইন্টারঅ্যাক্ট করার জন্য ব্যবহৃত হয়, যেমন নতুন অবজেক্ট তৈরি, ডেটা আপডেট বা ডিলিট করা।
  • PersistenceContext: এটি JPA এর একটি নির্দিষ্ট সেশন, যেখানে EntityManager অবজেক্ট তৈরি হয় এবং ডেটা পরিচালনা করা হয়।

3. EJB এবং JPA এর সম্পর্ক:

EJB এবং JPA একে অপরের সাথে গভীরভাবে সম্পর্কিত, বিশেষ করে Session Beans এবং Message-Driven Beans ব্যবহার করে ডেটাবেস ম্যানেজমেন্ট এবং ট্রানজেকশন পরিচালনা করতে। EJB এর ব্যবসা লজিক (business logic) প্রয়োগ করার সময় JPA ডেটাবেসে অবজেক্ট সংরক্ষণ ও পরিচালনা করতে সহায়তা করে।

3.1 EJB এবং JPA এর সেবা সম্পর্ক:

  • EJB (Session Beans) সাধারণত business logic পরিচালনা করতে ব্যবহৃত হয়। Stateful বা Stateless Session Beans ডেটাবেস থেকে ডেটা নিয়ে আসতে এবং ডেটা আপডেট করতে JPA ব্যবহার করতে পারে।
  • JPA ব্যবহৃত হয় ডেটাবেসের অবজেক্ট entities (যেমন টেবিলের সারি) এবং Java অবজেক্টের মধ্যে ম্যাপিং করার জন্য।
  • Transaction Management: EJB container JPA এর মাধ্যমে ডেটাবেস ট্রানজেকশন পরিচালনা করতে পারে, যা EJB এর transaction management এর সাথে একত্রিত হয়ে কাজ করে।

3.2 EJB এবং JPA এর সাথে একত্রে কাজ করা:

একটি typical scenario হিসেবে ধরুন যে আপনি একটি Banking Application তৈরি করছেন, যেখানে Account এবং Transaction মডেল থাকতে পারে। এখানে, Stateful Session Bean বা Stateless Session Bean ব্যবসা লজিক পরিচালনা করবে এবং JPA ডেটাবেসে Account এবং Transaction সেভ বা আপডেট করবে।

Stateless Session Bean Example:

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

@Stateless
public class BankingService {

    @PersistenceContext
    private EntityManager entityManager;

    public void createAccount(String accountName) {
        Account account = new Account();
        account.setAccountName(accountName);
        entityManager.persist(account);  // Persisting account using JPA
    }

    public Account getAccount(Long accountId) {
        return entityManager.find(Account.class, accountId);  // Retrieving account from database using JPA
    }
}

Account Entity Example:

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class Account {

    @Id
    private Long accountId;
    private String accountName;

    // Getters and Setters
    public Long getAccountId() {
        return accountId;
    }

    public void setAccountId(Long accountId) {
        this.accountId = accountId;
    }

    public String getAccountName() {
        return accountName;
    }

    public void setAccountName(String accountName) {
        this.accountName = accountName;
    }
}

এখানে, BankingService একটি Stateless Session Bean, যা Account নামের একটি Entity এর সাথে কাজ করছে। createAccount() মেথড JPA এর মাধ্যমে ডেটাবেসে Account পPersist করে এবং getAccount() মেথড ডেটাবেস থেকে Account রিটার্ন করে।

3.3 EJB এবং JPA এর পার্থক্য:

  • EJB: প্রধানত business logic পরিচালনার জন্য ব্যবহৃত হয়। এটি ডিস্ট্রিবিউটেড সিস্টেমে কাজ করতে সক্ষম এবং ট্রানজেকশন, সিকিউরিটি এবং কনকারেন্সি কন্ট্রোল পরিচালনা করে।
  • JPA: এটি ডেটাবেসের সাথে persistence সম্পর্কিত কার্যক্রমের জন্য ব্যবহৃত হয়, যেমন entity mapping, data retrieval, এবং database transactions

সারাংশ:

  • EJB (Enterprise JavaBeans) একটি Java EE প্রযুক্তি যা ব্যবসা লজিক (business logic) এবং ডিস্ট্রিবিউটেড সিস্টেমে কার্যক্রম পরিচালনা করতে ব্যবহৃত হয়।
  • JPA (Java Persistence API) হল একটি Java API যা ডেটাবেসে অবজেক্ট সংরক্ষণ এবং পরিচালনা করার জন্য ব্যবহৃত হয়।
  • EJB এবং JPA একে অপরের সাথে একত্রে ব্যবহৃত হয়, যেখানে EJB ব্যবসা লজিক পরিচালনা করে এবং JPA ডেটাবেসের সাথে ইন্টারঅ্যাক্ট করে ডেটা সংরক্ষণ, রিট্রিভাল এবং ট্রানজেকশন ম্যানেজমেন্টের জন্য।
  • EJB container transaction management, security, এবং scalability এর জন্য দায়িত্ব পালন করে, আর JPA ডেটাবেস অপারেশনগুলিকে কার্যকর করে।

EJB এবং JPA এর মধ্যে এই সম্পর্ক সিস্টেমে শক্তিশালী ব্যবসা লজিক এবং ডেটাবেস ম্যানেজমেন্ট তৈরি করতে সাহায্য করে।

Content added By

Entity Beans Java EE এর একটি গুরুত্বপূর্ণ অংশ যা ডেটাবেসে পেরসিস্টেন্ট ডেটা সংরক্ষণ এবং পরিচালনা করতে ব্যবহৃত হয়। তবে, EJB 3.x থেকে Entity Beans বেশিরভাগ সময় JPA (Java Persistence API) দ্বারা প্রতিস্থাপিত হয়েছে, কারণ JPA সহজ এবং আরও আধুনিক একটি পেরসিস্টেন্স ফ্রেমওয়ার্ক।

এখানে, Entity Beans এর ধারণা এবং JPA ব্যবহার করার উপায় নিয়ে বিস্তারিত আলোচনা করা হবে।


১. Entity Bean এর ধারণা

Entity Beans হল EJB এর একটি বিশেষ ধরনের কম্পোনেন্ট যা ডেটাবেসের সাথে যোগাযোগ করতে ব্যবহৃত হয়। Entity Beans ডেটাবেস টেবিলের প্রতিনিধিত্ব করে এবং ডেটাবেসে পেরসিস্টেন্ট ডেটা সংরক্ষণ এবং রিটার্ন করার জন্য ব্যবহৃত হয়। Entity Beans এর মধ্যে দুইটি ধরনের থাকে:

  • Container-Managed Persistence (CMP): যেখানে EJB Container পেরসিস্টেন্স পরিচালনা করে।
  • Bean-Managed Persistence (BMP): যেখানে ডেভেলপার নিজে পেরসিস্টেন্স ব্যবস্থাপনা করেন।

তবে, JPA আসার পর Entity Beans এর CMP ব্যবহারের পরিবর্তে JPA ব্যবহৃত হতে শুরু করেছে, কারণ JPA আরও সহজ এবং আধুনিক।


২. JPA (Java Persistence API)

JPA হল একটি Java API যা পেরসিস্টেন্ট ডেটাবেস অবজেক্টগুলোকে Java ক্লাসের সাথে ম্যাপ করতে সহায়তা করে। JPA এর মাধ্যমে আপনি ডেটাবেস অপারেশন যেমন create, read, update, delete (CRUD) সহজে করতে পারেন, এবং এটি Object-Relational Mapping (ORM) ব্যবহার করে।

২.১ JPA এর মূল বৈশিষ্ট্যসমূহ:

  1. Entity Class: JPA Entity একটি সাধারণ Java ক্লাস যেটি ডেটাবেস টেবিলের সাথে সম্পর্কিত থাকে।
  2. Persistence Context: EntityManager ব্যবহার করে Entity গুলির উপর অপারেশন করা হয়।
  3. JPQL (Java Persistence Query Language): JPA এর জন্য একটি বিশেষ কাস্টম ভাষা যা SQL এর মতো তবে এটি Java Objects উপর কাজ করে।
  4. Annotations: JPA Entity গুলি সাধারণত annotations ব্যবহার করে কনফিগার করা হয়, যেমন @Entity, @Table, @Id, @Column ইত্যাদি।

২.২ JPA এ Entity Bean তৈরি করা

JPA ব্যবহার করে Entity Bean তৈরি করতে হলে, প্রথমে একটি Entity Class তৈরি করতে হবে যা ডেটাবেস টেবিলের সাথে সম্পর্কিত হবে।

২.২.১ Entity Bean Example

Employee.java (Entity Class):

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Column;
import javax.persistence.Table;

@Entity
@Table(name = "employee")
public class Employee {

    @Id
    private int id;

    @Column(name = "name")
    private String name;

    @Column(name = "salary")
    private double salary;

    // Constructors, Getters and Setters
    public Employee() {}

    public Employee(int id, String name, double salary) {
        this.id = id;
        this.name = name;
        this.salary = salary;
    }

    // Getters and Setters
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }
}

এখানে:

  • @Entity: এই অ্যানোটেশনটি Java ক্লাসকে একটি Entity হিসেবে চিহ্নিত করে।
  • @Table: এটি Entity এর সাথে সম্পর্কিত ডেটাবেস টেবিলের নাম নির্ধারণ করে।
  • @Id: এটি Entity এর প্রাইমারি কি বা ইউনিক আইডেন্টিফায়ার নির্ধারণ করে।
  • @Column: এটি ডেটাবেস টেবিলের কলামের নাম এবং প্রোপার্টির সাথে সম্পর্কিত।

২.৩ EntityManager ব্যবহার করে JPA অপারেশন

JPA Entity গুলির উপর CRUD (Create, Read, Update, Delete) অপারেশন করতে EntityManager ব্যবহৃত হয়।

২.৩.১ EntityManager Example

EmployeeDAO.java (Data Access Object Class):

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

public class EmployeeDAO {

    private EntityManagerFactory entityManagerFactory;
    private EntityManager entityManager;

    public EmployeeDAO() {
        entityManagerFactory = Persistence.createEntityManagerFactory("EmployeePU");
        entityManager = entityManagerFactory.createEntityManager();
    }

    // Create or Update
    public void saveEmployee(Employee employee) {
        entityManager.getTransaction().begin();
        entityManager.persist(employee);
        entityManager.getTransaction().commit();
    }

    // Read
    public Employee getEmployee(int id) {
        return entityManager.find(Employee.class, id);
    }

    // Delete
    public void deleteEmployee(int id) {
        Employee employee = getEmployee(id);
        if (employee != null) {
            entityManager.getTransaction().begin();
            entityManager.remove(employee);
            entityManager.getTransaction().commit();
        }
    }
}

এখানে:

  • Persistence.createEntityManagerFactory("EmployeePU"): এটি EntityManagerFactory তৈরি করে, যা JPA কনফিগারেশন ফাইল (persistence.xml) থেকে লোড করা হয়।
  • entityManager.persist(employee): এটি Entity গুলিকে ডেটাবেসে সংরক্ষণ করে (Create বা Update)।
  • entityManager.find(Employee.class, id): এটি Entity গুলিকে ডেটাবেস থেকে খুঁজে বের করে (Read)।
  • entityManager.remove(employee): এটি Entity কে ডেটাবেস থেকে মুছে ফেলে (Delete)।

২.৪ persistence.xml (JPA Configuration File)

JPA কনফিগারেশন ফাইল persistence.xml হয় যেখানে ডেটাবেস কনফিগারেশন করা হয়। এই ফাইলটি META-INF ফোল্ডারে থাকতে হয়।

persistence.xml Example:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
    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">
    
    <persistence-unit name="EmployeePU">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <class>com.example.Employee</class>
        <properties>
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/employee_db"/>
            <property name="javax.persistence.jdbc.user" value="root"/>
            <property name="javax.persistence.jdbc.password" value="password"/>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL8Dialect"/>
            <property name="hibernate.hbm2ddl.auto" value="update"/>
            <property name="hibernate.show_sql" value="true"/>
        </properties>
    </persistence-unit>
</persistence>

এখানে:

  • persistence-unit name="EmployeePU": এটি Persistence Unit এর নাম, যা EntityManager এর সাথে সম্পর্কিত।
  • javax.persistence.jdbc.url, user, password: এখানে ডেটাবেসের URL, ইউজারনেম এবং পাসওয়ার্ড কনফিগার করা হয়।

৩. JPA এর সুবিধা

  1. Object-Relational Mapping (ORM): JPA Java Objects কে ডেটাবেস টেবিলের সাথে ম্যাপ করে, যার ফলে ডেটাবেসের সাথে যোগাযোগ করা অনেক সহজ হয়।
  2. Query Language (JPQL): JPQL ব্যবহার করে Entity গুলির উপর SQL-এর মতো কোয়েরি চালানো সম্ভব।
  3. Portable: JPA সমর্থনকারী যেকোনো ডেটাবেস সিস্টেমের সাথে কাজ করতে পারে, ফলে এটি খুবই পোর্টেবল।
  4. Integration with Other Frameworks: JPA অন্যান্য Java EE ফ্রেমওয়ার্ক (যেমন CDI, EJB) এর সাথে খুব সহজে ইন্টিগ্রেট হতে পারে।

সারাংশ

Entity Beans এর মাধ্যমে Java EE তে ডেটাবেসের সাথে যোগাযোগ করা যেত, তবে JPA (Java Persistence API) এখন Entity Beans এর আধিকারিক রিপ্লেসমেন্ট হিসেবে ব্যবহৃত হয়। JPA সহজ এবং আধুনিক ORM সলিউশন প্রদান করে, যার মাধ্যমে Java Objects কে ডেটাবেস টেবিলের সাথে ম্যাপ করা সহজ হয়। JPA ব্যবহার করে ডেটাবেস অপারেশন যেমন CRUD (Create, Read, Update, Delete) করা যেতে পারে এবং এটি Java EE অ্যাপ্লিকেশনের জন্য একটি স্ট্যান্ডার্ড পদ্ধতি। Eclipse এ JPA কনফিগারেশন ও Entity Beans তৈরি করা সহজ এবং কার্যকর।

Content added By

@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

EJB (Enterprise JavaBeans) এবং JPA (Java Persistence API) দুটি গুরুত্বপূর্ণ প্রযুক্তি, যা Java EE (Enterprise Edition) প্ল্যাটফর্মে ব্যবহৃত হয়। এগুলি ডাটা প্রসেসিং এবং ট্রানজেকশন ম্যানেজমেন্টের জন্য ব্যবহার হয়। তবে, EJB এবং JPA-এর মধ্যে ট্রানজেকশন ম্যানেজমেন্টের কিছু পার্থক্য রয়েছে, যা এই দুটি প্রযুক্তির প্রয়োগে এবং ব্যবহারে বড় ভূমিকা রাখে।

EJB এবং JPA এর মধ্যে Transaction Management

1. EJB Transaction Management

EJB (Enterprise JavaBeans) তে ট্রানজেকশন ম্যানেজমেন্ট বা কার্যক্রমের একাধিক ধাপ একত্রিত করার ব্যবস্থা একটি গুরুত্বপূর্ণ ফিচার। EJB-এ ট্রানজেকশন ম্যানেজমেন্টের দুটি পদ্ধতি রয়েছে:

  • Container-Managed Transactions (CMT)
  • Bean-Managed Transactions (BMT)
Container-Managed Transactions (CMT)

EJB কন্টেইনার স্বয়ংক্রিয়ভাবে ট্রানজেকশন ম্যানেজমেন্ট পরিচালনা করে। এই ক্ষেত্রে, ডেভেলপারকে কোনো ট্রানজেকশন ম্যানেজমেন্ট কোড লিখতে হয় না। EJB কন্টেইনার ট্রানজেকশন শুরু, কমিট বা রোলব্যাক পরিচালনা করে।

  • @TransactionAttribute ব্যবহার করে ট্রানজেকশন টাইপ নির্ধারণ করা হয় (যেমন, REQUIRED, REQUIRES_NEW, SUPPORTS ইত্যাদি)।
  • CMT সাধারণত Stateless Beans এবং Stateful Beans-এ ব্যবহৃত হয়।
Bean-Managed Transactions (BMT)

BMT-এ, ডেভেলপার ট্রানজেকশন ম্যানেজমেন্ট নিজে নিয়ন্ত্রণ করেন। এর জন্য javax.transaction.UserTransaction API ব্যবহার করতে হয়।

  • ফ্লেক্সিবল ট্রানজেকশন ম্যানেজমেন্ট: ডেভেলপার ম্যানুয়ালি ট্রানজেকশন শুরু, কমিট, বা রোলব্যাক করতে পারেন।
  • BMT সাধারণত Stateful Beans বা এমন পরিস্থিতিতে ব্যবহৃত হয় যেখানে সম্পূর্ণ ট্রানজেকশন কন্ট্রোল ডেভেলপার চায়।

2. JPA Transaction Management

JPA (Java Persistence API) একটি API যা ডাটা সংরক্ষণ ও পুনরুদ্ধারের জন্য ব্যবহৃত হয়, যেমন ডাটাবেজের সঙ্গে ইন্টারঅ্যাকশন করতে। JPA-এ ট্রানজেকশন ম্যানেজমেন্টের জন্য দুটি প্রধান পদ্ধতি রয়েছে:

  • Container-Managed Transactions (CMT)
  • Bean-Managed Transactions (BMT)
Container-Managed Transactions (CMT) in JPA

যখন JPA কে EJB কন্টেইনারের সঙ্গে ব্যবহার করা হয় (যেমন, EJB সেশন Beans-এ), তখন CMT ব্যবহার করে ট্রানজেকশন পরিচালনা করা হয়। এর মধ্যে, কন্টেইনার ট্রানজেকশন পরিচালনা করে।

  • JPA EntityManager ট্রানজেকশন পরিচালনার জন্য ব্যবহার করা হয়।
  • @PersistenceContext দ্বারা EntityManager ইনজেক্ট করা হয়, যা ট্রানজেকশন পরিচালনায় সহায়তা করে।
  • @TransactionAttribute দিয়ে ট্রানজেকশন কনফিগার করা হয়, যেমন REQUIRED, REQUIRES_NEW, ইত্যাদি।
Bean-Managed Transactions (BMT) in JPA

যখন JPA কে BMT-এ ব্যবহার করা হয়, তখন ডেভেলপার নিজে ট্রানজেকশন পরিচালনা করেনEntityManager ব্যবহার করে ম্যানুয়ালি ট্রানজেকশন শুরু, কমিট, বা রোলব্যাক করা হয়।

  • UserTransaction API ব্যবহার করে BMT-এ ট্রানজেকশন পরিচালনা করা হয়।
  • এই ক্ষেত্রে, ডেভেলপার EntityManager কে ম্যানুয়ালি কন্ট্রোল করে এবং প্রয়োজনে ট্রানজেকশন শুরু বা শেষ করেন।

EJB এবং JPA এর মধ্যে Transaction Management এর পার্থক্য

বিষয়EJB Transaction ManagementJPA Transaction Management
ট্রানজেকশন ম্যানেজমেন্টCMT এবং BMT পদ্ধতির মাধ্যমে। CMT কন্টেইনার দ্বারা পরিচালিত হয়, BMT ডেভেলপার দ্বারা।CMT এবং BMT পদ্ধতির মাধ্যমে। CMT কন্টেইনার দ্বারা পরিচালিত হয়, BMT ডেভেলপার দ্বারা।
ট্রানজেকশন পরিচালনাCMT-তে কন্টেইনার ট্রানজেকশন পরিচালনা করে, BMT-তে ডেভেলপার নিজে ট্রানজেকশন পরিচালনা করেন।CMT-তে কন্টেইনার ট্রানজেকশন পরিচালনা করে, BMT-তে ডেভেলপার নিজে ট্রানজেকশন পরিচালনা করেন।
ট্রানজেকশন কন্ট্রোল@TransactionAttribute দ্বারা ট্রানজেকশন কন্ট্রোল করা হয়।@TransactionAttribute এবং EntityManager এর মাধ্যমে।
উদাহরণStateless এবং Stateful EJB Beans।EntityManager এবং @PersistenceContext ব্যবহার।
ব্যবহারের ক্ষেত্রেসাধারণত সেশন Beans বা সার্ভিস লেয়ার।প্যারসিস্টেন্স অবজেক্ট এবং ডাটাবেজ ম্যানেজমেন্ট।
ফ্লেক্সিবিলিটিCMT সহজ এবং দ্রুত, কিন্তু BMT অধিক কাস্টমাইজেশন প্রদান করে।CMT সহজ এবং দ্রুত, কিন্তু BMT অধিক কাস্টমাইজেশন প্রদান করে।
API ব্যবহৃতjavax.transaction.UserTransaction (BMT)।EntityManager এবং UserTransaction (BMT)।

EJB এবং JPA-তে Transaction Management এর তুলনা

  • EJB Transaction Management: EJB সিস্টেমে ট্রানজেকশন ম্যানেজমেন্ট CMT বা BMT-এর মাধ্যমে করা হয়। CMT কন্টেইনার পরিচালিত হলেও BMT-এ ডেভেলপার ম্যানুয়ালি ট্রানজেকশন পরিচালনা করেন।
  • JPA Transaction Management: JPA-তে ডেটা পারসিস্টেন্সের জন্য CMT বা BMT ব্যবহৃত হয়। CMT-তে কন্টেইনার EntityManager এর মাধ্যমে ট্রানজেকশন পরিচালনা করে, কিন্তু BMT-এ ডেভেলপার ম্যানুয়ালি EntityManager এবং UserTransaction ব্যবহার করে ট্রানজেকশন ম্যানেজ করে।

সংক্ষেপে:

  • EJB এবং JPA উভয়েই CMT এবং BMT পদ্ধতি সমর্থন করে।
  • CMT স্বয়ংক্রিয় ট্রানজেকশন ম্যানেজমেন্ট প্রদান করে, যেখানে কন্টেইনার ট্রানজেকশন পরিচালনা করে।
  • BMT তে ডেভেলপার ট্রানজেকশন শুরু, কমিট বা রোলব্যাক ম্যানুয়ালি পরিচালনা করেন, যা আরও বেশি কাস্টমাইজেশন এবং নিয়ন্ত্রণ প্রদান করে।

EJB এবং JPA-তে ব্যবহৃত ট্রানজেকশন ম্যানেজমেন্ট সিস্টেম উভয় ক্ষেত্রেই নির্ভর করে ট্রানজেকশনকে কিভাবে পরিচালনা করা হবে এবং ব্যবহৃত প্রযুক্তির ধরন অনুযায়ী নির্বাচন করা যায়।

Content added By
Promotion

Are you sure to start over?

Loading...