Skill

EJB এর মধ্যে CDI (Contexts and Dependency Injection) ব্যবহার

Dependency Injection এবং EJB - ইজেবি (EJB) - Java Technologies

334

CDI (Contexts and Dependency Injection) হল একটি আধুনিক এবং শক্তিশালী dependency injection প্রযুক্তি যা Java EE (এখন Jakarta EE) অ্যাপ্লিকেশন ডেভেলপমেন্টে ব্যবহৃত হয়। CDI এর মাধ্যমে ডেভেলপাররা ক্লাসের মধ্যে নির্ভরশীলতা (dependencies) সঠিকভাবে ইনজেক্ট করতে পারে, যা কোডের মডুলারিটি, রিডেবিলিটি, এবং টেস্টিং সহজ করে তোলে।

EJB (Enterprise JavaBeans) হল Java EE এর অংশ যা একাধিক ক্লায়েন্টের জন্য স্কেলেবল এবং ডিস্ট্রিবিউটেড অ্যাপ্লিকেশন তৈরি করতে ব্যবহৃত হয়। CDI এবং EJB একসাথে ব্যবহার করা যায়, যেখানে CDI নির্ভরশীলতা ইনজেকশন (dependency injection) এবং EJB ব্যবসায়িক লজিক (business logic) সরবরাহ করে।

এখানে আমরা আলোচনা করব কিভাবে EJB এর মধ্যে CDI (Contexts and Dependency Injection) ব্যবহার করা যায়।


CDI এবং EJB এর মধ্যে পার্থক্য এবং সম্পর্ক

  1. EJB (Enterprise JavaBeans): EJB হল একটি Java EE কম্পোনেন্ট আর্কিটেকচার, যা আপনার অ্যাপ্লিকেশনকে টেকসই, স্কেলেবল এবং ট্রানজেকশনাল অবস্থা প্রদান করে। EJB তে ট্রানজেকশন ম্যানেজমেন্ট, সিকিউরিটি, এবং কনকারেন্সি ম্যানেজমেন্ট থাকে, যা কোডের জন্য স্বয়ংক্রিয়ভাবে পরিচালিত হয়।
  2. CDI (Contexts and Dependency Injection): CDI হল Java EE এর একটি প্রযুক্তি যা ডিপেনডেন্সি ইনজেকশন এবং ক্লাসগুলির মধ্যে নির্ভরশীলতা সম্পর্কিত সমস্যাগুলি সমাধান করে। এটি আপনার কোডের মডুলারিটি, রিডেবিলিটি এবং টেস্টেবিলিটি উন্নত করে।

CDI এবং EJB একত্রে ব্যবহার করলে আপনার অ্যাপ্লিকেশন আরও ফ্লেক্সিবল এবং সেন্ট্রালাইজড হতে পারে। CDI দিয়ে আপনি EJB কম্পোনেন্টে নির্ভরশীলতা ইনজেক্ট করতে পারবেন, যা কোডের সম্পাদনা এবং রক্ষণাবেক্ষণ সহজ করে।


CDI ব্যবহার করে EJB কম্পোনেন্টে ইনজেকশন

CDI মাধ্যমে আপনি EJB এর মধ্যে dependency injection করতে পারেন। এটি ক্লাসগুলির মধ্যে নির্ভরশীলতা ম্যানেজ করতে সহায়ক। সাধারণত, CDI তে @Inject অ্যানোটেশন ব্যবহার করা হয়, যার মাধ্যমে কোন EJB বা অন্যান্য কম্পোনেন্টে ডিপেনডেন্সি ইনজেক্ট করা হয়।

EJB কম্পোনেন্টে CDI ইনজেকশন এর উদাহরণ:

Step 1: EJB (Stateful Session Bean) তৈরি করা

package com.example.ejb;

import javax.ejb.Stateful;
import javax.enterprise.context.RequestScoped;

@Stateful
@RequestScoped
public class ShoppingCartBean {

    private int itemCount = 0;

    public void addItem() {
        itemCount++;
    }

    public int getItemCount() {
        return itemCount;
    }
}

এখানে, ShoppingCartBean একটি Stateful Session Bean, যা একটি সাধারণ শপিং কার্টের ফিচার সমর্থন করে।

Step 2: CDI Managed Bean (Service Class)

package com.example.service;

import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;

@ApplicationScoped
public class ShoppingCartService {

    // Injecting the EJB using CDI
    @Inject
    private ShoppingCartBean shoppingCartBean;

    public void addItemToCart() {
        shoppingCartBean.addItem();
    }

    public int getItemCount() {
        return shoppingCartBean.getItemCount();
    }
}

এখানে, ShoppingCartService একটি CDI-managed bean এবং ShoppingCartBean এর সাথে @Inject অ্যানোটেশন ব্যবহার করে নির্ভরশীলতা ইনজেক্ট করা হয়েছে। ShoppingCartBean তে থাকা লজিক ShoppingCartService এর মাধ্যমে ব্যবহৃত হবে।

Step 3: Client (EJB and CDI Access)

package com.example.client;

import javax.naming.Context;
import javax.naming.InitialContext;
import com.example.service.ShoppingCartService;

public class Client {

    public static void main(String[] args) {
        try {
            // JNDI Lookup to access the CDI bean
            Context context = new InitialContext();
            ShoppingCartService shoppingCartService = (ShoppingCartService) context.lookup("java:global/myapp/ShoppingCartService");

            // Using the service to interact with EJB
            shoppingCartService.addItemToCart();
            System.out.println("Item count in cart: " + shoppingCartService.getItemCount());

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

এখানে, Client ক্লাসটি ShoppingCartService ক্লাসের ইনস্ট্যান্স পাওয়ার জন্য JNDI lookup ব্যবহার করেছে, এবং এরপর ShoppingCartService এর মাধ্যমে ShoppingCartBean এর মেথড addItemToCart কল করা হয়েছে।


CDI ইনজেকশন এবং EJB এর বৈশিষ্ট্য:

  1. Decoupling and Flexibility (ডিকাউপ্লিং এবং নমনীয়তা):
    • CDI মাধ্যমে EJB কম্পোনেন্টে ডিপেনডেন্সি ইনজেকশন করলে আপনি ম্যানুয়ালি অবজেক্ট তৈরি না করে সহজেই নির্ভরশীলতা ইনজেক্ট করতে পারবেন, যা কোডকে আরো পরিষ্কার এবং নমনীয় করে তোলে।
  2. Lifecycle Management (লাইফসাইকেল ম্যানেজমেন্ট):
    • CDI এর মাধ্যমে ইনজেক্ট করা কম্পোনেন্টের লাইফসাইকেল (যেমন RequestScoped, SessionScoped, ApplicationScoped) কন্ট্রোল করা সহজ হয়। এভাবে, আপনি EJB কন্টেইনারের ম্যানেজড লাইফসাইকেল এবং CDI এর সুবিধা একসাথে ব্যবহার করতে পারেন।
  3. Cross-cutting Concerns (ক্রস-কাটিং কনসার্নস):
    • CDI এর মাধ্যমে interceptors, decorators, এবং aspects যোগ করা যায়, যা EJB কম্পোনেন্টগুলির ক্রস-কাটিং কনসার্নস যেমন লগিং, ট্রানজেকশন ম্যানেজমেন্ট এবং সিকিউরিটি নিয়ে কাজ করতে পারে।
  4. Loose Coupling (লুজ কাপলিং):
    • CDI এর মাধ্যমে ডিপেনডেন্সি ইনজেকশন করলে আপনি আপনার EJB এবং অন্যান্য ক্লাসের মধ্যে শক্তিশালী নির্ভরশীলতার পরিবর্তে loose coupling তৈরি করতে পারেন, যা অ্যাপ্লিকেশনটিকে সহজে পরবর্তী সময়ে পরিবর্তন বা এক্সটেনশন করার সুযোগ দেয়।

EJB এর মধ্যে CDI ব্যবহার করার সুবিধা:

  1. শক্তিশালী Dependency Management: CDI এবং EJB একসাথে ব্যবহৃত হলে ডিপেনডেন্সি ইনজেকশন এবং টেস্টিং আরও সহজ হয়।
  2. অবজেক্ট ম্যানেজমেন্ট: CDI কন্টেইনারের মাধ্যমে আপনি অবজেক্টের লাইফসাইকেল খুব সহজে ম্যানেজ করতে পারেন।
  3. টেস্টিং: CDI এবং EJB একত্রে ব্যবহার করলে আপনি কমপ্লেক্স ক্লাসগুলির টেস্টিং সহজভাবে করতে পারবেন, কারণ EJB এর সাথে আপনার ব্যবসায়িক লজিকের ইনজেকশন সহজ হবে।
  4. প্রদর্শন ক্ষমতা: EJB এর সাথে CDI ব্যবহার করার মাধ্যমে আপনার অ্যাপ্লিকেশন আরও স্কেলেবল এবং নমনীয় হতে পারে।

সারাংশ:

CDI (Contexts and Dependency Injection) হল Java EE বা Jakarta EE এর একটি শক্তিশালী ফিচার, যা EJB (Enterprise JavaBeans) এর সাথে একত্রে ব্যবহৃত হলে কোডের মডুলারিটি এবং রিডেবিলিটি বৃদ্ধি পায়। CDI দিয়ে আপনি EJB কম্পোনেন্টে dependency injection করতে পারেন, যা কোডের অবস্থা এবং কার্যকারিতা আরও সহজ করে তোলে। এটি EJB এবং অন্যান্য Java EE প্রযুক্তির সাথে একত্রে ব্যবহারের মাধ্যমে একটি শক্তিশালী, স্কেলেবল এবং সুগঠিত অ্যাপ্লিকেশন ডেভেলপ করতে সহায়তা করে।

Content added By
Promotion

Are you sure to start over?

Loading...