Java Technologies SessionFactory, Session, এবং Transaction এর ভূমিকা গাইড ও নোট

324

Hibernate একটি শক্তিশালী ORM (Object-Relational Mapping) ফ্রেমওয়ার্ক যা জাভা অ্যাপ্লিকেশনগুলোকে রিলেশনাল ডাটাবেসের সাথে সহজে ইন্টারঅ্যাক্ট করতে সহায়তা করে। Hibernate-এ SessionFactory, Session, এবং Transaction তিনটি গুরুত্বপূর্ণ কম্পোনেন্ট রয়েছে যা ডাটাবেস অপারেশন এবং ট্রানজেকশন ম্যানেজমেন্ট পরিচালনা করে।

1. SessionFactory:

SessionFactory হলো Hibernate এর একটি গুরুত্বপূর্ণ কনফিগারেশন অবজেক্ট যা ডাটাবেস সংযোগ এবং সেশন পরিচালনা করে। এটি ডাটাবেসের সাথে সংযোগ স্থাপন, সেশনের জন্য কনফিগারেশন এবং ক্লাস লোডিং এর জন্য রিসোর্স তৈরি করতে ব্যবহৃত হয়।

রোল এবং ব্যবহারের ক্ষেত্র:

  • SessionFactory একটি thread-safe অবজেক্ট, এবং একাধিক থ্রেডের মধ্যে এটি পুনঃব্যবহার করা যায়।
  • এটি Hibernate কনফিগারেশন ডেটা (যেমন hibernate.cfg.xml) থেকে প্রাপ্ত ডাটাবেস সংযোগের তথ্য ব্যবহার করে।
  • এটি Session অবজেক্ট তৈরি করে, যা ডাটাবেসের সাথে যোগাযোগ করতে ব্যবহৃত হয়।

SessionFactory কনফিগারেশন উদাহরণ:

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtil {
    private static final SessionFactory sessionFactory;

    static {
        try {
            // SessionFactory তৈরি করা
            sessionFactory = new Configuration().configure().addAnnotatedClass(MyEntity.class).buildSessionFactory();
        } catch (Throwable ex) {
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }
}

এখানে, HibernateUtil ক্লাসে Hibernate কনফিগারেশন ফাইলের মাধ্যমে SessionFactory তৈরি করা হয়েছে এবং এটি MyEntity ক্লাসে ম্যাপিং করা হয়েছে।


2. Session:

Session হলো Hibernate এর একটি অবজেক্ট যা ডাটাবেসের সাথে যোগাযোগ করার জন্য ব্যবহৃত হয়। এটি একটি lightweight অবজেক্ট এবং একাধিক থ্রেডের মধ্যে শেয়ার করা হয় না। Session একধরনের CRUD (Create, Read, Update, Delete) অপারেশন পরিচালনা করে এবং ডাটাবেসের সাথে ইন্টারঅ্যাক্ট করতে ব্যবহৃত হয়।

রোল এবং ব্যবহারের ক্ষেত্র:

  • এটি ডেটাবেসের সাথে অবজেক্টের পার্সিস্টেন্স (Persistence) বা স্থায়ীত্ব নিশ্চিত করে।
  • Session এ ব্যবহৃত অপারেশনগুলি Hibernate কনফিগারেশন এবং ডাটাবেসের সাথে সম্পর্কিত কাজগুলো পরিচালনা করে।
  • এক একটি Session সাধারণত একটি Unit of Work বা একটি ট্রানজেকশনের সমতুল্য।
  • Session ক্লাসে save(), update(), delete(), get(), load() মতো মেথড থাকে যা ডাটাবেসের অবজেক্টগুলোকে ম্যানেজ করে।

Session উদাহরণ:

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;

public class MyDAO {

    private SessionFactory sessionFactory;

    public MyDAO(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }

    public void saveEntity(MyEntity entity) {
        // Session তৈরি করা
        Session session = sessionFactory.getCurrentSession();

        // Transaction শুরু করা
        Transaction transaction = session.beginTransaction();
        
        // অবজেক্ট সেভ করা
        session.save(entity);

        // Transaction কমিট করা
        transaction.commit();
    }
}

এখানে, sessionFactory.getCurrentSession() ব্যবহার করে একটি Session অবজেক্ট তৈরি করা হয়েছে এবং একটি ট্রানজেকশন শুরু করা হয়েছে। session.save(entity) ব্যবহার করে ডাটাবেসে একটি অবজেক্ট সেভ করা হয়েছে।


3. Transaction:

Transaction Hibernate-এ একটি গুরুত্বপূর্ণ কম্পোনেন্ট যা ডাটাবেস অপারেশনগুলোর গ্রুপকে একত্রিত করে এবং সেগুলোর পারফরম্যান্স ও অ্যাটমিক আচরণ নিশ্চিত করে। এক বা একাধিক CRUD অপারেশন একটি Transaction এর মধ্যে পরিচালিত হয়, এবং সফলভাবে শেষ হলে সেই পরিবর্তনগুলো ডাটাবেসে commit করা হয়।

রোল এবং ব্যবহারের ক্ষেত্র:

  • Transaction ডাটাবেসের সমস্ত অপারেশনকে একযোগভাবে পরিচালনা করে। যদি কোনো একটি অপারেশন ব্যর্থ হয়, তবে পুরো ট্রানজেকশনটি rollback করা যায়, যা ডাটাবেসের অপরিবর্তিত অবস্থা নিশ্চিত করে।
  • Atomicity: এক বা একাধিক অপারেশন একসাথে সম্পন্ন না হলে, তা বাতিল করা হয় এবং পূর্বাবস্থায় ফিরে আসে।
  • Consistency: একটি সফল ট্রানজেকশনের পর ডাটাবেস সবসময় একটি বৈধ অবস্থা বজায় রাখে।
  • Isolation: একাধিক ট্রানজেকশন যখন সমান্তরালভাবে চলে, তখন একটির ফলাফল অন্যটির ওপর প্রভাব ফেলবে না।

Transaction উদাহরণ:

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;

public class MyDAO {

    private SessionFactory sessionFactory;

    public MyDAO(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }

    public void saveEntity(MyEntity entity) {
        // Session তৈরি করা
        Session session = sessionFactory.getCurrentSession();
        
        // Transaction শুরু করা
        Transaction transaction = session.beginTransaction();

        try {
            // অবজেক্ট সেভ করা
            session.save(entity);

            // Transaction কমিট করা
            transaction.commit();
        } catch (Exception e) {
            // Exception হলে Rollback করা
            if (transaction != null) {
                transaction.rollback();
            }
            e.printStackTrace();
        }
    }
}

এখানে, beginTransaction() মেথড দিয়ে ট্রানজেকশন শুরু করা হয়েছে, এবং সফলভাবে session.save() মেথড দিয়ে অবজেক্ট সেভ করার পরে commit() মেথড ব্যবহার করে ট্রানজেকশন নিশ্চিত করা হয়েছে। যদি কোনো সমস্যা হয়, তবে rollback() মেথড দিয়ে ডাটাবেসের পরিবর্তন পূর্বাবস্থায় ফিরিয়ে আনা হয়।


Summary:

  1. SessionFactory:
    • এটি Hibernate কনফিগারেশন ব্যবহার করে Session তৈরি করতে সহায়ক এবং ডাটাবেস সংযোগ পরিচালনা করে। এটি একটি thread-safe অবজেক্ট যা একাধিক থ্রেডের মধ্যে শেয়ার করা যেতে পারে।
  2. Session:
    • এটি ডাটাবেসে অবজেক্ট সেভ, লোড, আপডেট, ডিলিট এবং অন্যান্য অপারেশন করার জন্য ব্যবহৃত হয়। এটি একটি Unit of Work ধারণা তৈরি করে এবং একে অন্যের সাথে সম্পর্কযুক্ত CRUD অপারেশনগুলির মধ্যে সমন্বয় করে।
  3. Transaction:
    • এটি একাধিক ডাটাবেস অপারেশনকে একত্রিত করে এবং তা একযোগভাবে commit বা rollback করে। এটি atomicity এবং consistency নিশ্চিত করতে ব্যবহৃত হয়।

এভাবে, SessionFactory, Session, এবং Transaction Hibernate-এ গুরুত্বপূর্ণ ভূমিকা পালন করে এবং ডাটাবেসের সাথে কার্যকরীভাবে কাজ করতে সহায়ক।

Content added By
Promotion

Are you sure to start over?

Loading...