Stateless Session Bean একটি ধরনের Session Bean যা EJB (Enterprise JavaBeans) এ ব্যবহৃত হয়। এটি business logic এক্সিকিউট করার জন্য তৈরি করা হয় এবং সাধারণত EJB container দ্বারা পরিচালিত হয়। Stateless Session Bean-এর প্রধান বৈশিষ্ট্য হল যে এটি ক্লায়েন্টের অবস্থা (state) সংরক্ষণ করে না এবং প্রতিটি ক্লায়েন্টের জন্য নতুন ইনস্ট্যান্স তৈরি হয়। এতে ক্লায়েন্টের সাথে stateful interaction নয়, বরং শুধুমাত্র method invocation হয়।
Stateless Session Bean সাধারণত কমপ্লেক্স ট্রানজেকশন এবং ক্রমাগত ক্লায়েন্ট সেশন পরিচালনা ছাড়াই দ্রুত কাজ করা যায়।
Stateless Session Bean এর কাজ:
- Statelessness: Stateless Session Bean কোনো state সংরক্ষণ করে না। এটি প্রতিটি মেথড কলের জন্য নতুন ইনস্ট্যান্স তৈরি করে এবং এক ক্লায়েন্টের কাজ অন্য ক্লায়েন্টের কাজ থেকে আলাদা থাকে না।
- Method Invocation: ক্লায়েন্ট একটি business method কল করে এবং Stateless Bean সে অনুযায়ী কাজ করে।
- Scalability: Stateless Beans ক্লায়েন্টের অবস্থা না রাখায় সেগুলি সহজে স্কেল করা যায় এবং EJB container অনেকগুলি Bean pool তৈরি করে যা বিভিন্ন ক্লায়েন্টের অনুরোধের জন্য ব্যবহার করা যায়।
- Performance: যেহেতু Stateful Beans এর তুলনায় Stateful Beans এর জন্য কম সংস্থান লাগে, তাই Stateless Session Beans বেশি পারফরম্যান্স প্রদান করে।
Stateless Session Bean সাধারণত business logic বা service layer হিসেবে ব্যবহৃত হয়, যেমন ব্যাংকিং অ্যাপ্লিকেশনে অ্যাকাউন্ট ডিপোজিট, পেমেন্ট প্রসেসিং, ইনভয়েস জেনারেশন ইত্যাদি।
Stateless Session Bean এর উদাহরণ:
ধরা যাক, আমরা একটি Banking Application তৈরি করছি যেখানে একটি Stateless Session Bean ব্যবহার করে Deposit এবং Withdraw কার্যক্রম সম্পাদন করা হচ্ছে।
1. Stateless Session Bean (BankingBean) উদাহরণ:
import javax.ejb.Stateless;
@Stateless
public class BankingBean implements BankingBeanLocal {
private double balance = 1000.00; // initial balance
@Override
public double deposit(double amount) {
balance += amount;
return balance;
}
@Override
public double withdraw(double amount) {
if (balance >= amount) {
balance -= amount;
return balance;
} else {
throw new IllegalArgumentException("Insufficient balance");
}
}
@Override
public double checkBalance() {
return balance;
}
}
ব্যাখ্যা:
- এখানে,
BankingBeanএকটি Stateless Session Bean যা deposit, withdraw, এবং checkBalance মেথড দিয়ে একটি ব্যাংক অ্যাকাউন্টের কার্যক্রম পরিচালনা করছে। - deposit() মেথড একটি নির্দিষ্ট পরিমাণ টাকা অ্যাকাউন্টে জমা করে এবং আপডেট করা ব্যালেন্স ফেরত দেয়।
- withdraw() মেথড একটি নির্দিষ্ট পরিমাণ টাকা তুলতে সহায়তা করে যদি অ্যাকাউন্টে যথেষ্ট ব্যালেন্স থাকে, নতুবা একটি IllegalArgumentException ত্রুটি ছুড়ে দেয়।
- checkBalance() মেথড অ্যাকাউন্টের বর্তমান ব্যালেন্স দেখায়।
2. EJB Local Interface (BankingBeanLocal):
import javax.ejb.Local;
@Local
public interface BankingBeanLocal {
double deposit(double amount);
double withdraw(double amount);
double checkBalance();
}
ব্যাখ্যা:
- BankingBeanLocal একটি local interface যা
BankingBeanএর business methods ঘোষণা করে। Stateless session beans সাধারণত local interfaces ব্যবহার করে যদি অ্যাপ্লিকেশন শুধুমাত্র সিঙ্গেল জাভা অ্যাপ্লিকেশন সার্ভারে চলে।
3. EJB Client (BankingClient):
import javax.ejb.EJB;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;
@Named
@RequestScoped
public class BankingClient {
@EJB
private BankingBeanLocal bankingBean;
private double amount;
private double currentBalance;
public void deposit() {
currentBalance = bankingBean.deposit(amount);
}
public void withdraw() {
try {
currentBalance = bankingBean.withdraw(amount);
} catch (IllegalArgumentException e) {
System.out.println("Error: " + e.getMessage());
}
}
public void checkBalance() {
currentBalance = bankingBean.checkBalance();
}
// Getters and Setters
public double getAmount() {
return amount;
}
public void setAmount(double amount) {
this.amount = amount;
}
public double getCurrentBalance() {
return currentBalance;
}
public void setCurrentBalance(double currentBalance) {
this.currentBalance = currentBalance;
}
}
ব্যাখ্যা:
- BankingClient হল একটি ক্লায়েন্ট ক্লাস যা BankingBeanLocal কে ইনজেক্ট করে এবং তার মেথডগুলো কল করে। এখানে, ক্লায়েন্ট অ্যাপ্লিকেশন ব্যালেন্স চেক, ডিপোজিট এবং উইথড্রয়াল কার্যক্রম পরিচালনা করতে পারে।
@EJBঅ্যানোটেশন দ্বারা EJB ক্লাসটিকে ইনজেক্ট করা হয়েছে।- ক্লায়েন্ট দ্বারা
deposit(),withdraw()এবংcheckBalance()মেথড কল করা হচ্ছে এবং ফলাফল দেখানো হচ্ছে।
Stateless Session Bean এর জীবনকাল:
- Bean Instance Creation: ক্লায়েন্ট যখন প্রথম মেথড কল করে, তখন EJB container নতুন Bean ইনস্ট্যান্স তৈরি করে।
- No State Retention: Bean এর মধ্যে কোনো অবস্থা (state) সংরক্ষণ করা হয় না, যার ফলে প্রতিটি মেথড কলের জন্য নতুন ইনস্ট্যান্স তৈরি হয়।
- Bean Removal: যখন Bean এর ব্যবহার শেষ হয়ে যায়, তখন EJB container Bean এর ইনস্ট্যান্স মুছে ফেলে।
Stateless Session Bean এর সুবিধা:
- Lightweight: Stateless Session Beans শুধুমাত্র মেথড কল এক্সিকিউট করে এবং ক্লায়েন্টের অবস্থান সংরক্ষণ করে না, যা কম রিসোর্স ব্যবহার করে।
- Scalable: Stateful Beans এর তুলনায় Stateless Beans অধিক স্কেলেবল, কারণ EJB container সহজে Bean ইনস্ট্যান্সগুলির পুল তৈরি করে এবং একাধিক ক্লায়েন্টের জন্য ব্যবহার করে।
- Concurrency: Stateless Beans গুলি Concurrency সাপোর্ট করে এবং এতে কোনো থ্রেড বা ক্লায়েন্ট স্টেট সংরক্ষণ করার প্রয়োজন হয় না।
- Performance: এর কম রিসোর্স প্রয়োজনের কারণে Stateless Beans বেশি পারফর্ম্যান্স দেয়।
সারাংশ:
Stateless Session Bean হল EJB কম্পোনেন্ট যা ব্যবসা লজিক পরিচালনা করে এবং ক্লায়েন্টের অবস্থা সংরক্ষণ করে না। এটি EJB container দ্বারা পরিচালিত হয় এবং বিভিন্ন ক্লায়েন্টের জন্য এক্সিকিউট হয়, এবং দ্রুত ও স্কেলেবল কাজ করতে সক্ষম। সাধারণত সেশন বীনের মধ্যে ডিপোজিট, উইথড্রয়াল বা অন্যান্য ব্যবসা-লজিকের কার্যক্রম পরিচালনা করা হয়। Stateless Beans কার্যকরী এবং অধিক পারফরম্যান্স প্রদান করে, যা বড় সিস্টেমগুলির জন্য উপযুক্ত।
Read more