Singleton Bean Lifecycle এবং তার ব্যবস্থাপনা

EJB Bean Lifecycle Management - ইজেবি (EJB) - Java Technologies

287

Singleton Beans হল EJB (Enterprise JavaBeans) এর একটি বিশেষ ধরনের কম্পোনেন্ট যা একটি মাত্র অবজেক্ট ইনস্ট্যান্স তৈরি করে এবং পুরো অ্যাপ্লিকেশন জুড়ে এই একমাত্র অবজেক্টটি ব্যবহৃত হয়। Singleton Beans EJB 3.1 এ যোগ করা হয় এবং সাধারণত অ্যাপ্লিকেশনে একক অবস্থা (state) বা সেন্ট্রাল কনফিগারেশন পরিচালনা করার জন্য ব্যবহৃত হয়। এটি একটি thread-safe (থ্রেড সেফ) সিঙ্গেল্টন অবজেক্ট তৈরি করতে সহায়তা করে, যা অনেক ক্লায়েন্টের মধ্যে শেয়ার করা হয়।

এখানে Singleton Bean Lifecycle এবং এর ব্যবস্থাপনা নিয়ে বিস্তারিত আলোচনা করা হবে।


১. Singleton Bean Lifecycle

Singleton Bean এর জীবনচক্র (Lifecycle) অন্যান্য EJB কম্পোনেন্টের তুলনায় কিছুটা আলাদা, কারণ এটি একমাত্র অবজেক্ট হিসেবে কাজ করে এবং পুরো অ্যাপ্লিকেশন জুড়ে শেয়ার করা হয়।

১.১ Singleton Bean জীবনচক্রের ধাপগুলো:

  1. Bean Instantiation:
    • Singleton Bean প্রথমবার যখন ক্লায়েন্টের থেকে অ্যাক্সেস করা হয়, তখন এটি ইনস্ট্যান্সিয়েট করা হয়।
    • সাধারণত, একবার ইনস্ট্যান্স তৈরি হলে, এটি পুরো অ্যাপ্লিকেশন জুড়ে পুনরায় ব্যবহৃত হয়।
  2. PostConstruct:
    • Bean ইনস্ট্যান্স তৈরি হওয়ার পর, PostConstruct অ্যানোটেশন দ্বারা চিহ্নিত একটি মেথড স্বয়ংক্রিয়ভাবে কল হয়। এখানে Bean এর প্রাথমিক কনফিগারেশন বা ইনিশিয়ালাইজেশন করা হয়।
    • এটি সাধারণত সেই জায়গায় ব্যবহার করা হয় যেখানে Bean তৈরি হওয়ার পর কিছু সেটআপ বা প্রস্তুতি কাজ করতে হয় (যেমন: ডাটাবেস কানেকশন, ক্যাশিং ইত্যাদি)।
  3. Business Methods Invocation:
    • একবার Bean তৈরি হলে, ক্লায়েন্ট যখনই এই Bean এর মেথড কল করবে, তখন Bean এর সেই একমাত্র ইনস্ট্যান্স থেকেই কাজ হবে। সকল মেথড কল একে অপরের মধ্যে শেয়ার করা হবে।
  4. PreDestroy:
    • PreDestroy অ্যানোটেশন দ্বারা চিহ্নিত একটি মেথড যখন Bean অবজেক্ট ধ্বংস হওয়ার আগে কল হয়। এটি সাধারণত Bean ধ্বংসের আগে কোনো পরিষ্কারকরণ বা ফাইনালাইজেশন কাজ করতে ব্যবহৃত হয় (যেমন: রিসোর্স ফ্রি করা)।
  5. Bean Destruction:
    • যখন Bean আর প্রয়োজন হয় না (অথবা অ্যাপ্লিকেশন বন্ধ হয়), তখন এটি ধ্বংস করা হয়। সেক্ষেত্রে, PreDestroy মেথড কল করা হয় এবং Bean এর ইনস্ট্যান্স মুক্তি পায়।

২. Singleton Bean এর বৈশিষ্ট্য

  1. Thread-safety:
    • Singleton Beans সাধারণত thread-safe হতে হবে, কারণ এটি একাধিক ক্লায়েন্টের মধ্যে শেয়ার করা হয়। EJB Container এ সিঙ্গেল্টন Beans স্বয়ংক্রিয়ভাবে থ্রেড সেফ হয়। তবে, থ্রেড সেফনেস নিশ্চিত করতে ডেভেলপারকে কিছু অতিরিক্ত ব্যবস্থা নিতে হতে পারে (যেমন synchronized blocks)।
  2. Lifecycle Control:
    • Singleton Beans এর lifecycle ক্লায়েন্টের অ্যাক্সেসের ওপর ভিত্তি করে পরিচালিত হয়। যখন প্রথম ক্লায়েন্ট একটি Singleton Bean কল করে, তখন সেই Bean ইনস্ট্যান্স তৈরি হয় এবং অ্যাপ্লিকেশন চলাকালীন সময়ে শেয়ার করা হয়।
    • Bean তৈরির সময় ডিফল্টভাবে @PostConstruct মেথড কল হয় এবং অ্যাপ্লিকেশন বন্ধ হওয়ার আগে @PreDestroy কল হয়।
  3. Concurrency Management:
    • EJB Singleton Beans @Lock অ্যানোটেশন ব্যবহার করে কনকারেন্ট অ্যাক্সেস নিয়ন্ত্রণ করতে পারে। এটি দুই ধরনের Locking সাপোর্ট করে:
      • READ: একাধিক থ্রেড Bean এর রিড অপারেশন করতে পারবে।
      • WRITE: একে একে শুধুমাত্র একটি থ্রেড Bean এর রাইট অপারেশন করতে পারবে।

৩. Singleton Bean Example

এখানে একটি উদাহরণ দেওয়া হলো যেখানে Singleton Bean তৈরি করা হচ্ছে এবং এটি সঠিকভাবে ইন্সট্যান্সিয়েট, ইনিশিয়ালাইজ, এবং পরিষ্কার করা হচ্ছে।

৩.১ Singleton Bean Interface

import javax.ejb.Remote;

@Remote
public interface CounterBeanRemote {
    public int incrementCounter();
    public int getCounter();
}

এখানে একটি CounterBeanRemote ইন্টারফেস তৈরি করা হয়েছে, যা ক্লায়েন্টকে incrementCounter() এবং getCounter() মেথড ব্যবহার করতে দেয়।

৩.২ Singleton Bean Implementation

import javax.ejb.Singleton;
import javax.ejb.Lock;
import javax.ejb.LockType;

@Singleton
public class CounterBean implements CounterBeanRemote {

    private int counter = 0;

    @Override
    @Lock(LockType.WRITE)
    public int incrementCounter() {
        counter++;
        return counter;
    }

    @Override
    public int getCounter() {
        return counter;
    }
}

এখানে, @Singleton অ্যানোটেশন দ্বারা CounterBean কে একটি Singleton Bean হিসেবে চিহ্নিত করা হয়েছে। @Lock(LockType.WRITE) ব্যবহৃত হয়েছে যাতে একে একে শুধুমাত্র একটি থ্রেড incrementCounter() মেথডে অ্যাক্সেস করতে পারে। এটি thread-safety নিশ্চিত করে।

৩.৩ Stateful Bean Client Example

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

public class EJBClient {
    public static void main(String[] args) throws NamingException {
        Context context = new InitialContext();
        CounterBeanRemote counterBean = (CounterBeanRemote) context.lookup("java:global/ejbapp/CounterBean!com.example.CounterBeanRemote");

        // First increment
        System.out.println("Counter: " + counterBean.incrementCounter());  // Counter: 1

        // Second increment
        System.out.println("Counter: " + counterBean.incrementCounter());  // Counter: 2

        // Get current counter value
        System.out.println("Current Counter: " + counterBean.getCounter());  // Current Counter: 2
    }
}

এখানে EJBClient ক্লাসটি CounterBean কে লুকআপ করে এবং তার incrementCounter() মেথড কল করে কাউন্টার ভ্যালু ইনক্রিমেন্ট করে। একবার CounterBean ইনস্ট্যান্স তৈরি হলে, ক্লায়েন্ট বারবার এই অবজেক্টটিকে ব্যবহার করতে পারে, কারণ এটি Singleton এবং অ্যাপ্লিকেশন জুড়ে শেয়ার করা হয়।


৪. Singleton Bean এর ব্যবস্থাপনা

  1. Singleton Bean Configuration:
    • @Singleton অ্যানোটেশন ব্যবহার করে আপনি Bean কে Singleton হিসেবে চিহ্নিত করবেন। এটি নিশ্চিত করে যে EJB Container শুধুমাত্র একবার Bean ইনস্ট্যান্স করবে।
  2. Concurrency Control:
    • @Lock অ্যানোটেশন ব্যবহার করে আপনি READ এবং WRITE লক পরিচালনা করতে পারেন। এটি thread safety এবং concurrent method calls নিয়ন্ত্রণ করতে সহায়তা করে।
  3. EJB Lifecycle Management:
    • Singleton Bean এর lifecycle ডেভেলপারের জন্য সহজ করা হয় কারণ EJB Container স্বয়ংক্রিয়ভাবে তার জীবনচক্র পরিচালনা করে। @PostConstruct এবং @PreDestroy মেথডগুলি সঠিক সময় ব্যবহার করে রিসোর্স ম্যানেজমেন্ট নিশ্চিত করতে সহায়তা করে।
  4. Singleton Bean Cleanup:
    • @PreDestroy অ্যানোটেশন ব্যবহার করে আপনি Bean ধ্বংসের পূর্বে কোন ক্লিনআপ কাজ বা রিসোর্স মুক্তি (যেমন: কানেকশন বন্ধ) করতে পারেন।

সারাংশ

Singleton Beans হল EJB এর একটি শক্তিশালী কম্পোনেন্ট যা একমাত্র অবজেক্ট ইনস্ট্যান্স তৈরি করে এবং পুরো অ্যাপ্লিকেশন জুড়ে শেয়ার করা হয়। এটি স্টেটফুল ম্যানেজমেন্ট, কনকারেন্সি, এবং কার্যকরী life-cycle পরিচালনা করে। @Singleton অ্যানোটেশন দ্বারা Bean তৈরি করা হয় এবং @Lock, @PostConstruct, @PreDestroy ইত্যাদি অ্যানোটেশন ব্যবহার করে এর কার্যকারিতা কাস্টমাইজ করা হয়। Singleton Beans প্রজেক্টে সেন্ট্রাল কনফিগারেশন, রিসোর্স শেয়ারিং এবং স্টেট ম্যানেজমেন্ট সহজ করে তোলে।

Content added By
Promotion

Are you sure to start over?

Loading...