@AroundInvoke এবং @PostConstruct এর ব্যবহার

Interceptors এবং Lifecycle Callback Methods - ইজেবি (EJB) - Java Technologies

252

@AroundInvoke এবং @PostConstruct হল Enterprise JavaBeans (EJB) এবং Contexts and Dependency Injection (CDI) এর দুটি গুরুত্বপূর্ণ অ্যানোটেশন যা ব্যবহারকারীদের মেথড-নির্ভর কার্যকারিতা পরিবর্তন এবং প্রি-পোস্ট প্রসেসিং করতে সাহায্য করে। এই দুটি অ্যানোটেশনকে ক্লাস এবং মেথড স্তরের কার্যকারিতা নিয়ন্ত্রণে ব্যবহার করা হয়, যা একে অপরের সাথে সম্পর্কিত হলেও ভিন্ন ভিন্ন কাজ করে।

1. @PostConstruct অ্যানোটেশন

@PostConstruct হল একটি CDI এবং EJB অ্যানোটেশন যা একটি মেথডের উপর প্রয়োগ করা হয় যা একটি bean ইনস্ট্যান্টিয়েট হওয়ার পর স্বয়ংক্রিয়ভাবে কল হয়। এটি ব্যবহার করা হয় যখন আপনার Bean ইনস্ট্যান্স তৈরি হওয়ার পরে কিছু প্রাথমিক কাজ করতে হয়, যেমন কনফিগারেশন সেট করা বা কোনো রিসোর্স ইনিশিয়ালাইজ করা।

@PostConstruct এর ব্যবহার:

  • Bean Initialization: এটি Bean এর ইনস্ট্যান্স তৈরি হওয়ার পরে কোনো কার্যকলাপ পরিচালনা করতে ব্যবহার করা হয়।
  • Pre-processing: এটি Bean ইনস্ট্যানশিয়েশন এবং Dependency Injection শেষ হওয়ার পরে রান করে।

উদাহরণ:

import javax.annotation.PostConstruct;
import javax.ejb.Singleton;

@Singleton
public class MySingletonBean {

    private String message;

    // @PostConstruct annotated method
    @PostConstruct
    public void init() {
        message = "Hello, EJB!";
        System.out.println("PostConstruct method invoked. Message initialized: " + message);
    }

    public void printMessage() {
        System.out.println("Message: " + message);
    }
}

ব্যাখ্যা:

  • এখানে, @PostConstruct অ্যানোটেশন init() মেথডে প্রয়োগ করা হয়েছে। যখন MySingletonBean Bean ইনস্ট্যানশিয়েট হবে, তখন init() মেথড স্বয়ংক্রিয়ভাবে কল হবে এবং একটি message সেট করবে।
  • @PostConstruct কেবল একবারই রান করবে, যখন Bean ইনস্ট্যান্স তৈরি হয় এবং তার নির্ভরশীলতা (dependencies) ইনজেক্ট হয়।

2. @AroundInvoke অ্যানোটেশন

@AroundInvoke হল EJB Interceptors এর একটি অ্যানোটেশন, যা business method অথবা lifecycle method এর চারপাশে interceptor logic প্রয়োগ করতে ব্যবহৃত হয়। এটি একটি বিশেষ ধরনের method interceptor যা একটি method বা business method কলে কার্যকরী হয় এবং সেই মেথডের আগে বা পরে কোড চালাতে পারে। সাধারণত, এটি নিরাপত্তা, লগিং, বা ট্রানজেকশন ম্যানেজমেন্টের জন্য ব্যবহৃত হয়।

@AroundInvoke এর ব্যবহার:

  • Method Interception: এই অ্যানোটেশনটি ব্যবহৃত হয় যখন আপনার ইন্টারসেপ্টর কম্পোনেন্টের মাধ্যমে কোন মেথডের ওপর কাস্টম কার্যকলাপ (pre/post processing) প্রয়োগ করতে চান।
  • Custom Logic Before/After Method Execution: এটি বিশেষভাবে ব্যবহৃত হয় যখন আপনি মেথড কলের আগে অথবা পরে কিছু কাজ করতে চান, যেমন লগিং, নিরাপত্তা চেক, বা ডেটা ভ্যালিডেশন।

উদাহরণ:

import javax.interceptor.AroundInvoke;
import javax.interceptor.Interceptor;
import javax.interceptor.InvocationContext;

@Interceptor
public class LoggingInterceptor {

    @AroundInvoke
    public Object logMethodInvocation(InvocationContext context) throws Exception {
        // Pre-processing before method execution
        System.out.println("Method " + context.getMethod().getName() + " is about to be invoked.");

        // Proceed with the method invocation
        Object result = context.proceed();

        // Post-processing after method execution
        System.out.println("Method " + context.getMethod().getName() + " was invoked.");

        return result;
    }
}

ব্যাখ্যা:

  • এখানে, @AroundInvoke অ্যানোটেশনটি logMethodInvocation() মেথডে প্রয়োগ করা হয়েছে, যা InvocationContext প্যারামিটার ব্যবহার করে মেথডের ইনফরমেশন অ্যাক্সেস করতে দেয়।
  • context.proceed(): এটি আসল মেথড কল করার জন্য ব্যবহৃত হয়, অর্থাৎ, ইন্টারসেপ্টরের মধ্যে প্রকৃত মেথড কল করা হয় এবং সেই মেথডের ফলাফল ফেরত দেয়া হয়।
  • এই ইন্টারসেপ্টর মেথডের আগে এবং পরে কাস্টম লজিক চালানোর মাধ্যমে আপনার মেথড কলের আচরণ পরিবর্তন করা যায়।

EJB Client Example with @AroundInvoke:

import javax.ejb.Stateless;

@Stateless
public class BusinessService {

    public void performBusinessLogic() {
        System.out.println("Business logic performed.");
    }
}

ব্যাখ্যা:

  • যখন performBusinessLogic() মেথড কল করা হবে, তখন ইন্টারসেপ্টর দ্বারা @AroundInvoke প্রয়োগ হয়ে logMethodInvocation() প্রথমে এবং শেষে লগ স্টেটমেন্ট প্রদর্শন করবে।

3. @PostConstruct এবং @AroundInvoke এর মধ্যে পার্থক্য

Feature@PostConstruct@AroundInvoke
PurposeBean ইনস্ট্যানশিয়েশন শেষে, প্রাথমিক কাজ করার জন্য।মেথডের চারপাশে কাস্টম কার্যকলাপ প্রয়োগ করতে।
Where to UseBean ক্লাসের কোনো মেথডে।EJB Interceptor ক্লাসে।
TriggeredBean ইনস্ট্যানশিয়েট হওয়ার পরে একবার কল হয়।যেকোনো EJB মেথড কলের আগে এবং পরে।
Scopeক্লাস ইনিশিয়ালাইজ হওয়ার পরে একবার।ব্যবসায়িক মেথড বা অন্যান্য মেথডের উপর।

4. @PostConstruct এবং @AroundInvoke এর মধ্যে সম্পর্ক

  • @PostConstruct এবং @AroundInvoke উভয়ই Bean-এ কার্যকলাপ প্রভাবিত করতে ব্যবহৃত হয়, তবে তাদের কাজের প্রক্রিয়া এবং প্রয়োগের পদ্ধতি আলাদা।
  • @PostConstruct Bean ইনস্ট্যানশিয়েশন শেষে নির্দিষ্ট কার্যকলাপ সম্পন্ন করে, যেখানে @AroundInvoke মেথড কলের আগে এবং পরে কাস্টম কার্যকলাপ পরিচালনা করতে ব্যবহৃত হয়।

5. প্রয়োগ ক্ষেত্র

  • @PostConstruct সাধারণত Bean-এ initialization এর জন্য ব্যবহৃত হয়, যেখানে আপনাকে dependency initialization বা initial state setup করতে হয়।
  • @AroundInvoke সাধারণত method interception এর জন্য ব্যবহৃত হয়, যেখানে আপনি মেথড কলের আগে বা পরে লগিং, সিকিউরিটি চেক, বা অন্যান্য কাস্টম কাজ করতে পারেন।

@PostConstruct এবং @AroundInvoke উভয়ই EJB এবং CDI-তে কার্যকলাপ পরিবর্তন করার জন্য অত্যন্ত কার্যকরী অ্যানোটেশন। @PostConstruct Bean-এর ইনস্ট্যানশিয়েশন এবং ইনিশিয়ালাইজেশন প্রক্রিয়া পরিচালনা করে, আর @AroundInvoke মেথড কলের আগে এবং পরে কাস্টম লজিক প্রয়োগ করার জন্য ব্যবহৃত হয়। EJB Interceptors এর মাধ্যমে আপনি ট্রানজেকশন ম্যানেজমেন্ট, নিরাপত্তা, লগিং ইত্যাদি বিভিন্ন কার্যকলাপ সুনির্দিষ্টভাবে পরিচালনা করতে পারেন।

Content added By
Promotion

Are you sure to start over?

Loading...