Session Beans হল Enterprise JavaBeans (EJB) এর একটি প্রধান ধরনের, যা Java EE (Enterprise Edition) বা বর্তমানে Jakarta EE প্ল্যাটফর্মে ব্যবহৃত হয়। Session Beans মূলত business logic বাস্তবায়নের জন্য ব্যবহৃত হয় এবং ক্লায়েন্টদের সঙ্গে যোগাযোগ স্থাপন করে। Session Beans কে সাধারণত EJB container পরিচালনা করে, যা ট্রানজ্যাকশন ম্যানেজমেন্ট, নিরাপত্তা, লোড-ব্যালান্সিং, এবং অন্যান্য সুবিধা প্রদান করে।
Session Beans এর দুটি প্রধান প্রকার:
- Stateless Session Beans
- Stateful Session Beans
এগুলির মধ্যে পার্থক্য এবং ব্যবহার দেখে আমরা Session Beans এর ধারণা বুঝতে পারব।
Session Beans এর বৈশিষ্ট্য:
- Business Logic:
- Session Beans-এর প্রধান কাজ হল business logic পরিচালনা করা, যা ক্লায়েন্টদের ডেটাবেস অ্যাক্সেস বা অন্যান্য সার্ভিস প্রদান করে।
- Life Cycle:
- Session Beans-এ অবজেক্টগুলি একবার তৈরি হলে (stateless বা stateful), তারা EJB container দ্বারা পরিচালিত হয় এবং এগুলির জীবনচক্রের পুরো প্রক্রিয়া নিয়ন্ত্রণ করা হয়।
- Transaction Management:
- Session Beans স্বয়ংক্রিয়ভাবে ট্রানজ্যাকশন পরিচালনা করতে পারে। EJB container ট্রানজ্যাকশন শুরু, commit, বা rollback করতে পারে।
- Remote and Local Interfaces:
- Session Beans-এ ক্লায়েন্টের সঙ্গে যোগাযোগ করার জন্য সাধারণত remote বা local ইন্টারফেস থাকে। যদি ক্লায়েন্ট এবং EJB একে অপরকে ভিন্ন JVM তে থাকে, তবে remote ইন্টারফেস ব্যবহার করা হয়। অন্যথায় local ইন্টারফেস ব্যবহার করা হয়।
Stateless Session Beans:
Stateless Session Beans এমন ধরনের সেশন বিইন, যেখানে সার্ভার-সাইড অবজেক্টটি ক্লায়েন্টের কোনো স্টেট বা অবস্থা সংরক্ষণ করে না। প্রতিটি ক্লায়েন্ট অনুরোধের জন্য stateless session bean নতুনভাবে তৈরি হয় এবং পরবর্তী ক্লায়েন্ট অনুরোধে পুরানো অবজেক্টটি আর ব্যবহৃত হয় না।
বৈশিষ্ট্য:
- No state retention: এই ধরনের সেশন বিইন ক্লায়েন্টের অবস্থা (state) সংরক্ষণ করে না।
- Performance: একাধিক ক্লায়েন্টের জন্য এক ধরনের কম্পোনেন্ট তৈরি করা যায়, যা বেশি কার্যকরী এবং দ্রুত।
- Reusability: অবজেক্টটি একাধিক ক্লায়েন্টের জন্য পুনরায় ব্যবহারযোগ্য।
Stateless Session Bean এর উদাহরণ:
@Stateless
public class CalculatorBean implements Calculator {
@Override
public int add(int a, int b) {
return a + b;
}
}
এখানে @Stateless অ্যানোটেশনটি EJB container কে জানায় যে, এটি একটি Stateless Session Bean এবং এটি ক্লায়েন্টের অবস্থা রাখবে না।
Stateful Session Beans:
Stateful Session Beans এমন ধরনের সেশন বিইন, যেখানে সার্ভার-সাইড অবজেক্টটি একটি ক্লায়েন্টের অবস্থা সংরক্ষণ করে। প্রতিটি ক্লায়েন্ট অনুরোধের জন্য একটি আলাদা অবজেক্ট তৈরি হয় এবং এর মধ্যে ক্লায়েন্টের অবস্থা (state) রাখা হয়। এর ফলে, প্রতিটি ক্লায়েন্টের জন্য একটি নির্দিষ্ট অবজেক্ট তৈরি হয় যা ক্লায়েন্টের কাজের মধ্যে অবস্থা সংরক্ষণ করে।
বৈশিষ্ট্য:
- State retention: এই ধরনের সেশন বিইন ক্লায়েন্টের অবস্থা সংরক্ষণ করে এবং সেই অবস্থার সাথে সম্পর্কিত সমস্ত তথ্য ধরে রাখে।
- Memory consumption: ক্লায়েন্টের অবস্থা সংরক্ষণ করার কারণে অনেক বেশি মেমরি খরচ হতে পারে।
- Individual handling: প্রতিটি ক্লায়েন্টের জন্য আলাদা অবজেক্ট থাকে, যা একে অপরের থেকে পৃথক।
Stateful Session Bean এর উদাহরণ:
@Stateful
public class ShoppingCartBean implements ShoppingCart {
private List<Item> items = new ArrayList<>();
@Override
public void addItem(Item item) {
items.add(item);
}
@Override
public List<Item> getItems() {
return items;
}
@Override
public void removeItem(Item item) {
items.remove(item);
}
}
এখানে @Stateful অ্যানোটেশনটি EJB container কে জানায় যে, এটি একটি Stateful Session Bean এবং এটি ক্লায়েন্টের অবস্থা (অর্থাৎ, items তালিকা) সংরক্ষণ করবে।
Session Beans এর মধ্যে পার্থক্য:
| বৈশিষ্ট্য | Stateless Session Beans | Stateful Session Beans |
|---|---|---|
| অবস্থা (State) | অবস্থা সংরক্ষণ করে না (no state retention) | ক্লায়েন্টের অবস্থা সংরক্ষণ করে (state retention) |
| পারফরম্যান্স | উচ্চ পারফরম্যান্স, কারণ একাধিক ক্লায়েন্টের জন্য একই অবজেক্ট ব্যবহৃত হয়। | কম পারফরম্যান্স, কারণ প্রতিটি ক্লায়েন্টের জন্য পৃথক অবজেক্ট তৈরি হয়। |
| ব্যবহার | যখন ক্লায়েন্টের অবস্থা রাখার প্রয়োজন নেই। | যখন ক্লায়েন্টের অবস্থা রাখার প্রয়োজন হয়। |
| ডিপেন্ডেন্সি | নির্ভরশীলতা কম। | ক্লায়েন্টের অবস্থা বা ডেটার উপর নির্ভরশীল। |
| লাইফ সাইকেল | ব্রিফ লাইফ সাইকেল (অনুরোধ শেষে অবজেক্ট ধ্বংস হয়)। | দীর্ঘ লাইফ সাইকেল (এটি ক্লায়েন্টের অবস্থা সংরক্ষণ করে, তাই দীর্ঘ সময় থাকে)। |
| ট্রানজ্যাকশন ম্যানেজমেন্ট | ট্রানজ্যাকশন সহজে পরিচালনা করা যায়। | স্টেটফুল হওয়ার কারণে ট্রানজ্যাকশন ম্যানেজমেন্টে কিছু বাড়তি কাজ হতে পারে। |
Session Beans ব্যবহার করার উপকারিতা:
- Business Logic Separation: Session Beans ব্যবহারের মাধ্যমে, ব্যবসায়িক লজিক এবং UI বা ক্লায়েন্ট কোড আলাদা রাখা যায়, যা কোডের রিয়ুজাবিলিটি এবং রক্ষণাবেক্ষণ সহজ করে।
- Scalability: Stateless Session Beans ব্যবহারের মাধ্যমে একাধিক ক্লায়েন্টের জন্য একই অবজেক্ট ব্যবহৃত হয়, যা সিস্টেমকে স্কেলেবল করে তোলে।
- Transaction Management: EJB container ট্রানজ্যাকশন ম্যানেজমেন্ট, সিকিউরিটি, এবং অন্যান্য উন্নত ফিচার সরবরাহ করে যা ব্যবসায়িক লজিকের জন্য প্রয়োজনীয়।
- Security: EJB container ক্লায়েন্টের জন্য নিরাপত্তা প্রদান করে, যেমন অ্যাক্সেস কন্ট্রোল এবং অ্যাথেনটিকেশন।
সারাংশ:
Session Beans Java EE বা Jakarta EE প্ল্যাটফর্মে ব্যবসায়িক লজিক (business logic) পরিচালনা করার জন্য ব্যবহৃত হয়। Stateless Session Beans ক্লায়েন্টের অবস্থা সংরক্ষণ করে না এবং একাধিক ক্লায়েন্টের জন্য একই অবজেক্ট ব্যবহার করা হয়, যার ফলে এটি উচ্চ পারফরম্যান্স দেয়। অন্যদিকে, Stateful Session Beans ক্লায়েন্টের অবস্থা সংরক্ষণ করে এবং প্রতিটি ক্লায়েন্টের জন্য একটি আলাদা অবজেক্ট তৈরি হয়। Session Beans-এর মাধ্যমে ডেভেলপাররা ডিস্ট্রিবিউটেড অ্যাপ্লিকেশন তৈরি করতে পারেন যেখানে ট্রানজ্যাকশন ম্যানেজমেন্ট, নিরাপত্তা এবং অন্যান্য সুবিধা সরবরাহ করা হয়।
Session Beans হল Enterprise JavaBeans (EJB) এর একটি ধরনের কম্পোনেন্ট, যা Java EE (Enterprise Edition)-এর অংশ হিসেবে ব্যবহৃত হয়। Session Beans মূলত ব্যবসায়িক লজিক (business logic) বাস্তবায়নের জন্য ব্যবহৃত হয় এবং এটি ক্লায়েন্টের সাথে ইন্টারঅ্যাক্ট করার জন্য একটি গুরুত্বপূর্ণ উপাদান। Session Beans সাধারণত EJB Container দ্বারা ম্যানেজ করা হয় এবং তিনটি প্রকারে বিভক্ত: Stateless, Stateful, এবং Singleton।
এখানে Session Beans এবং এর প্রকারভেদ সম্পর্কে বিস্তারিত ব্যাখ্যা করা হলো।
1. Session Bean কী?
Session Beans হল EJB-এর এমন একটি টাইপ যা business logic বা ব্যবসায়িক লজিক পরিচালনা করে। এগুলি সাধারণত ডাটা প্রসেসিং, ক্যালকুলেশন, বা অন্য কোনও ব্যবসায়িক কার্যাবলি সম্পাদন করে। Session Beans সাধারণত EJB Container দ্বারা ম্যানেজ করা হয় এবং ক্লায়েন্টের সাথে যোগাযোগ স্থাপন করে।
Session Beans তিনটি প্রকারের হতে পারে:
- Stateless Session Beans
- Stateful Session Beans
- Singleton Session Beans
2. Stateless Session Bean
Stateless Session Beans হল এমন EJB কম্পোনেন্ট যা কোনো স্টেট (অবস্থা) সংরক্ষণ করে না। অর্থাৎ, একটি Stateless Session Bean পরবর্তী ক্লায়েন্ট রিকোয়েস্টের জন্য পূর্ববর্তী স্টেট পুনরুদ্ধার করে না। এটি প্রতিটি রিকোয়েস্টের জন্য নতুন অবজেক্ট তৈরি করে এবং প্রতিটি রিকোয়েস্টের জন্য একটি নতুন সেশন তৈরি করে।
বিশেষত্ব:
- Stateless beans সিস্টেমের জন্য দ্রুত এবং হালকা, কারণ এতে কোনো সেশন সম্পর্কিত ডেটা রাখার প্রয়োজন নেই।
- একাধিক ক্লায়েন্ট একই EJB ইনস্ট্যান্স ব্যবহার করতে পারে।
উদাহরণ (Stateless Session Bean):
@Stateless
public class CalculatorBean implements Calculator {
@Override
public int add(int a, int b) {
return a + b;
}
@Override
public int subtract(int a, int b) {
return a - b;
}
}
এখানে, CalculatorBean একটি Stateless Session Bean যা কোনো স্টেট সঞ্চয় করে না এবং প্রতিটি মেথড কলের জন্য একটি নতুন অবজেক্ট তৈরি হয়।
3. Stateful Session Bean
Stateful Session Beans হল এমন EJB কম্পোনেন্ট যা একটি ক্লায়েন্টের সেশন সম্পর্কিত স্টেট (অবস্থা) সংরক্ষণ করে। অর্থাৎ, ক্লায়েন্টের বিভিন্ন রিকোয়েস্টের মধ্যে Stateful bean তার স্টেট রক্ষা করে, এবং একাধিক রিকোয়েস্টে একই ডেটা বা অবস্থা ব্যবহৃত হয়।
বিশেষত্ব:
- Stateful Session Beans সঠিকভাবে কাজ করার জন্য ক্লায়েন্টের অবস্থা সংরক্ষণ করে এবং এটি একটি নির্দিষ্ট ক্লায়েন্টের জন্য জড়িত থাকে।
- প্রতিটি ক্লায়েন্টের জন্য পৃথক Stateful bean তৈরি হয় এবং সেই bean তার স্টেট রক্ষা করে।
উদাহরণ (Stateful Session Bean):
@Stateful
public class ShoppingCartBean implements ShoppingCart {
private List<String> items = new ArrayList<>();
public void addItem(String item) {
items.add(item);
}
public List<String> getItems() {
return items;
}
}
এখানে, ShoppingCartBean একটি Stateful Session Bean যা ক্লায়েন্টের shopping cart items সঞ্চয় করে এবং সেই অবস্থা পরবর্তী রিকোয়েস্টে ব্যবহৃত হয়।
4. Singleton Session Bean
Singleton Session Beans হল এমন EJB কম্পোনেন্ট যা একটি মাত্র একটি ইনস্ট্যান্স ব্যবহার করে। এটি পুরো অ্যাপ্লিকেশন জুড়ে একাধিক ক্লায়েন্টদের জন্য ব্যবহার করা হয় এবং সমস্ত ক্লায়েন্ট একসাথে সেই একমাত্র ইনস্ট্যান্সকে শেয়ার করে। Singleton beans অ্যাপ্লিকেশন স্তরের শেয়ারযোগ্য অবস্থা (state) ধারণ করতে ব্যবহৃত হয়।
বিশেষত্ব:
- Singleton bean শুধুমাত্র একটি ইনস্ট্যান্স থাকে এবং এটি পুরো অ্যাপ্লিকেশন জুড়ে শেয়ার করা হয়।
- Thread-safe নিশ্চিত করতে সাধারণত Singleton beans লক মেকানিজম বা অন্যান্য সমান্তরাল ম্যানেজমেন্ট কৌশল ব্যবহার করে।
উদাহরণ (Singleton Session Bean):
@Singleton
public class LoggerBean {
private static final Logger logger = Logger.getLogger(LoggerBean.class.getName());
public void log(String message) {
logger.info(message);
}
}
এখানে, LoggerBean একটি Singleton Session Bean যা পুরো অ্যাপ্লিকেশন জুড়ে একমাত্র একটি ইনস্ট্যান্স ব্যবহার করে এবং একাধিক ক্লায়েন্টের লগ মেসেজ গ্রহণ করে।
5. EJB-র Session Bean-এর তুলনা:
| Feature | Stateless Session Bean | Stateful Session Bean | Singleton Session Bean |
|---|---|---|---|
| State Management | No state (No client-specific data) | Maintains state for a client | One instance shared across all clients |
| Concurrency | Multiple clients share the same bean instance | One instance per client | One shared instance for the whole application |
| Performance | High performance, no state to store | Performance may be slower due to state management | Performance optimized for shared resource management |
| Use Case | Stateless, independent requests (e.g., calculations) | Client-specific data processing (e.g., shopping cart) | Shared resources (e.g., logging, configuration management) |
| Bean Lifecycle | Short-lived (exists only for a request) | Tied to a client session (long-lived) | Long-lived (exists for the entire application lifecycle) |
6. EJB Session Bean- এর জীবনচক্র (Lifecycle)
EJB Life Cycle ইন্টিগ্রেটেড পরিবেশে ব্যবহৃত session beans-এর পরিচালন ও ম্যানেজমেন্ট সম্পর্কে ধারণা দেয়। এটি পরিচালিত হয় EJB Container-এর মাধ্যমে, যা bean instantiation, initialization, method invocation, এবং destruction এর সমস্ত দায়িত্ব পালন করে।
- Stateless Session Beans:
- Bean Instantiation: EJB container দ্বারা তৈরি করা হয়।
- Method Invocation: ক্লায়েন্টের অনুরোধ অনুযায়ী method-এ access।
- Destruction: ক্লায়েন্টের সাথে সম্পর্ক না থাকলে container bean ইনস্ট্যান্স ধ্বংস করে।
- Stateful Session Beans:
- Bean Instantiation: প্রথম ক্লায়েন্ট অনুরোধে তৈরি হয়।
- Method Invocation: ক্লায়েন্টের সেশন অনুযায়ী অবস্থা পরিচালনা করে।
- Destruction: ক্লায়েন্টের সেশন শেষ হলে bean ধ্বংস করা হয়।
- Singleton Session Beans:
- Bean Instantiation: একটি একক ইনস্ট্যান্স শুরু হয়।
- Method Invocation: অ্যাপ্লিকেশন জুড়ে একাধিক ক্লায়েন্ট ইনস্ট্যান্স শেয়ার করতে পারে।
- Destruction: অ্যাপ্লিকেশন শেষ হলে এটি ধ্বংস হয়।
সারাংশ:
EJB-এর Session Beans হল Java EE এপ্লিকেশনগুলির গুরুত্বপূর্ণ অংশ, যা ব্যবসায়িক লজিক বাস্তবায়ন করে। Stateless, Stateful, এবং Singleton Session Beans বিভিন্ন প্রকারের কম্পোনেন্ট প্রদান করে, যা ক্লায়েন্টের প্রয়োজন অনুসারে তাদের অবস্থা এবং কার্যাবলী পরিচালনা করে। Stateless Beans একাধিক ক্লায়েন্টের জন্য একই ইনস্ট্যান্স ব্যবহার করে, Stateful Beans ক্লায়েন্ট-specific ডেটা সংরক্ষণ করে, এবং Singleton Beans পুরো অ্যাপ্লিকেশন জুড়ে একমাত্র একটি ইনস্ট্যান্স ব্যবহার করে।
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 কার্যকরী এবং অধিক পারফরম্যান্স প্রদান করে, যা বড় সিস্টেমগুলির জন্য উপযুক্ত।
Stateful Session Bean (SFSB) হল EJB (Enterprise JavaBeans) এর একটি ধরনের কম্পোনেন্ট যা client-specific state সংরক্ষণ করে। এটি EJB Container এর মধ্যে সংরক্ষণ করা হয় এবং প্রতিটি ক্লায়েন্টের জন্য একটি পৃথক অবজেক্ট তৈরি হয়, যার মধ্যে ক্লায়েন্টের স্টেট সংরক্ষিত থাকে। Stateful Session Bean সাধারনত client session বা stateful প্যারামিটার/ডাটা সংরক্ষণ করার জন্য ব্যবহৃত হয়।
১. Stateful Session Bean এর কাজ
Stateful Session Bean ক্লায়েন্টের স্টেট সংরক্ষণ করে এবং ক্লায়েন্ট যখন বিভিন্ন মেথড কল করে, তখন সে তার পূর্ববর্তী স্টেটের তথ্য ব্যবহার করে। এর ফলে, প্রতিটি ক্লায়েন্টের জন্য আলাদা অবজেক্ট এবং স্টেট তৈরি হয়।
Stateful Session Bean এর প্রধান বৈশিষ্ট্যগুলো হলো:
- State retention: ক্লায়েন্টের মধ্যে স্টেট রাখে। অর্থাৎ, যদি একাধিক মেথড কল করা হয়, তবে তাদের মধ্যে ক্লায়েন্টের পূর্ববর্তী ডেটা সংরক্ষিত থাকবে।
- Lifecycle: Stateful Session Bean এর জীবনচক্র ক্লায়েন্টের সাথে সম্পর্কিত থাকে। অর্থাৎ, যখন ক্লায়েন্ট তার কাজ শেষ করে, তখন Bean এর অবজেক্টটি ধ্বংস হয়ে যাবে।
- Client-Specific: ক্লায়েন্টের জন্য পৃথক অবজেক্ট তৈরি হয়, এবং এই অবজেক্টটি ক্লায়েন্টের ডেটা এবং স্টেট ধরে রাখে।
২. Stateful Session Bean উদাহরণ
Stateful Session Bean তৈরি এবং ব্যবহার করার জন্য প্রথমে একটি Stateful Session Bean Interface এবং তারপর Stateful Session Bean Class তৈরি করতে হবে।
২.১ Stateful Session Bean Interface (Remote or Local Interface)
Stateful Session Bean এর জন্য প্রথমে একটি ইন্টারফেস তৈরি করতে হয়, যা ক্লায়েন্টকে মেথডগুলির অ্যাক্সেস দেয়।
CounterBeanRemote.java:
import javax.ejb.Remote;
@Remote
public interface CounterBeanRemote {
public int incrementCounter();
public int getCounter();
}
এখানে, আমরা একটি incrementCounter() মেথড এবং একটি getCounter() মেথড তৈরি করেছি যা কাউন্টার মান ইনক্রিমেন্ট এবং রিটার্ন করার কাজ করবে।
২.২ Stateful Session Bean Implementation
এবার আমাদের CounterBean নামক Stateful Session Bean ক্লাস তৈরি করতে হবে যা এই ইন্টারফেসটিকে ইমপ্লিমেন্ট করবে এবং স্টেট ধারণ করবে।
CounterBean.java:
import javax.ejb.Stateful;
@Stateful
public class CounterBean implements CounterBeanRemote {
private int counter = 0;
@Override
public int incrementCounter() {
counter++;
return counter;
}
@Override
public int getCounter() {
return counter;
}
}
এখানে, CounterBean ক্লাসটি একটি Stateful Session Bean হিসেবে ডিফাইন করা হয়েছে এবং @Stateful অ্যানোটেশন ব্যবহার করা হয়েছে। এই ক্লাসের মধ্যে একটি counter ভ্যারিয়েবল রয়েছে যা স্টেট সংরক্ষণ করে।
২.৩ Stateful Session Bean Client
Stateful Session Bean কে কল করার জন্য একটি ক্লায়েন্ট ক্লাস তৈরি করতে হবে। ক্লায়েন্ট মেথড কল করার সময়, এটি সেই Stateful Bean এর মধ্যে স্টেট সংরক্ষণ করবে এবং পরবর্তী কলের সময় সেই স্টেট রিটার্ন করবে।
EJBClient.java:
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 ক্লাসটি Stateful Session Bean কে লুকআপ করে এবং incrementCounter() মেথড কল করে কাউন্টার ভ্যালু ইনক্রিমেন্ট করে।
৩. Stateful Session Bean Life Cycle
Stateful Session Bean এর জীবনচক্র ক্লায়েন্টের সাথে সম্পর্কিত থাকে। এর অর্থ, যখন ক্লায়েন্ট একটি মেথড কল করবে, তখন EJB Container ওই Bean এর জন্য একটি অবজেক্ট তৈরি করবে এবং ক্লায়েন্টের কাজ শেষ হলে EJB Container সেই Bean অবজেক্টটিকে ধ্বংস করবে।
- Create: Bean অবজেক্ট তৈরি করা হয় যখন ক্লায়েন্ট প্রথমবার Bean ব্যবহার করতে চায়।
- PostConstruct: Bean অবজেক্ট তৈরি হওয়ার পর, যদি কোনো কনস্ট্রাক্টর বা সেটআপ কোড থাকে, তাহলে এটি চালানো হয়।
- Business Method Invocation: ক্লায়েন্ট যখন মেথড কল করে, তখন এই মেথডের মাধ্যমে Bean এর স্টেট পরিবর্তন হতে থাকে।
- Remove: যখন ক্লায়েন্ট কাজ শেষ করে, Bean অবজেক্টটি EJB Container থেকে সরিয়ে ফেলা হয়।
৪. Stateful Session Bean এর সুবিধা
- Client-specific State: Stateful Session Bean ক্লায়েন্টের জন্য একটি নির্দিষ্ট অবজেক্ট তৈরি করে যা ক্লায়েন্টের স্টেট ধরে রাখে।
- State Preservation: Bean ক্লায়েন্টের মেথড কলের মধ্যে স্টেট সংরক্ষণ করতে পারে, যা পরবর্তী কলের সময় ব্যবহার করা হয়।
- Simplified Development: Stateful Beans ডেভেলপারদের ক্লায়েন্টের স্টেট পরিচালনার জন্য উপযোগী সেবা প্রদান করে, যাতে অনেক কাঠিন্য কমে যায়।
৫. Stateful Session Bean এর সীমাবদ্ধতা
- Resource Intensive: Stateful Session Beans অনেক বেশি রিসোর্স ব্যবহার করতে পারে কারণ এরা ক্লায়েন্টের স্টেট সংরক্ষণ করে।
- Scalability Issues: যেহেতু স্টেটful Beans ক্লায়েন্টের স্টেট সংরক্ষণ করে, এটি মেমরি ব্যবহার করে এবং একটি নির্দিষ্ট ক্লায়েন্টের জন্য হোস্ট সার্ভারে স্থায়ী হতে পারে, যা স্কেলেবিলিটি সমস্যা তৈরি করতে পারে।
- Garbage Collection: Stateful Session Bean গুলি ক্লায়েন্টের সাথে সম্পর্কিত থাকায়, সেগুলি ক্লায়েন্টের ব্যবহারের পর সঠিকভাবে ধ্বংস হতে হবে (garbage collection), অন্যথায় এটি মেমরি লিক তৈরি করতে পারে।
সারাংশ
Stateful Session Bean একটি EJB কম্পোনেন্ট যা ক্লায়েন্টের জন্য স্টেট সংরক্ষণ করে এবং সেই স্টেটের উপর ভিত্তি করে মেথড কল করতে সাহায্য করে। Stateful Session Beans সাধারণত দীর্ঘ-স্থায়ী সেশন বা ক্লায়েন্ট ভিত্তিক স্টেট পরিচালনা করতে ব্যবহৃত হয়। Eclipse এ EJB Container এর মধ্যে Stateful Session Bean তৈরি এবং ডিপ্লয় করতে পারলে, আপনি ক্লায়েন্টের স্টেট হ্যান্ডলিং সহজ এবং কার্যকরভাবে করতে পারবেন।
Singleton Session Bean হল Enterprise JavaBeans (EJB) এর একটি বিশেষ ধরনের Session Bean, যা Java EE (Enterprise Edition) পরিবেশে ব্যবহৃত হয়। Singleton Session Bean ব্যবহৃত হয় যখন আপনাকে একটি একক (single) ইনস্ট্যান্সের মাধ্যমে প্রোগ্রামের বিভিন্ন ক্লায়েন্টদের সেবা প্রদান করতে হয়। এটি সাধারণত সেই পরিস্থিতিতে ব্যবহৃত হয় যেখানে শেয়ার করা অবস্থা বা রিসোর্সের পরিচালনা প্রয়োজন, যেমন ক্যাশিং, লগিং, কনফিগারেশন, অথবা ডেটা প্রসেসিং।
1. Singleton Session Bean এর ব্যাখ্যা
Singleton Session Bean হল একটি stateless bean যা শুধুমাত্র একটি একক ইনস্ট্যান্সের মাধ্যমে অ্যাপ্লিকেশন সার্ভার বা সার্ভিসের পুরো লাইফ সাইকেলে কাজ করে। অন্য কোনও ক্লায়েন্ট যখন এটি কল করবে, তখন সেই একই ইনস্ট্যান্স ব্যবহৃত হবে। এর মূল লক্ষ্য হল resource sharing এবং global state management।
এটি সাধারণত একটি EJB container দ্বারা ম্যানেজ করা হয় এবং container নিশ্চিত করে যে শুধুমাত্র একটি একক ইনস্ট্যান্স তৈরি হবে।
2. Singleton Session Bean এর বৈশিষ্ট্যসমূহ
- Single Instance: একটি Singleton Session Bean-এর ক্লাসের জন্য কেবল একটিই ইনস্ট্যান্স তৈরি করা হয়, এবং সেই ইনস্ট্যান্সটি পুরো অ্যাপ্লিকেশন সার্ভিসের জন্য ব্যবহৃত হয়।
- Concurrency: আপনি যদি একাধিক থ্রেডের মাধ্যমে এটি ব্যবহার করতে চান, তবে এটি concurrent access নিয়ন্ত্রণ করতে EJB container দ্বারা concurrency management সাপোর্ট করে।
- State Management: Singleton Session Bean সাধারণত একটি shared state ধারণ করে, যা একাধিক ক্লায়েন্টের মধ্যে শেয়ার করা হয়।
- Lifecycle: এটি অ্যাপ্লিকেশন সার্ভার চালু হওয়া থেকে বন্ধ হওয়া পর্যন্ত কার্যকর থাকে।
- Initialization: Singleton Session Bean সাধারণত @PostConstruct অ্যানোটেশন ব্যবহার করে ইনিশিয়ালাইজ হয়।
3. Singleton Session Bean তৈরি করা
Eclipse IDE-এ একটি Singleton Session Bean তৈরি করার জন্য আপনাকে @Singleton অ্যানোটেশন ব্যবহার করতে হবে। এই অ্যানোটেশনটি EJB কন্টেইনারকে বলে যে, এই Bean-এর একটি একক ইনস্ট্যান্স থাকবে।
Singleton Session Bean উদাহরণ:
a) Singleton Session Bean ক্লাস
import javax.ejb.Singleton;
import javax.ejb.Startup;
@Singleton
@Startup // Optional: Makes sure the bean is created when the server starts
public class CacheManager {
private int cacheData;
// Method to get cached data
public int getCacheData() {
return cacheData;
}
// Method to set cached data
public void setCacheData(int data) {
this.cacheData = data;
}
// Method that can be called by other beans or clients
public void refreshCache() {
// Logic to refresh the cache, for example, fetching from a database
this.cacheData = 100; // Example of setting some cache data
}
}
- এখানে, @Singleton অ্যানোটেশন জানাচ্ছে যে এটি একটি Singleton Session Bean।
- @Startup অ্যানোটেশন দিয়ে এটি নিশ্চিত করা হচ্ছে যে, এই Bean অ্যাপ্লিকেশন সার্ভার শুরু হওয়ার সময়ই তৈরি হবে।
b) Singleton Session Bean এর ব্যবহার (Client Example)
import javax.ejb.EJB;
public class CacheClient {
@EJB
private static CacheManager cacheManager;
public static void main(String[] args) {
// Set some cache data
cacheManager.setCacheData(50);
System.out.println("Cache Data: " + cacheManager.getCacheData());
// Refresh the cache
cacheManager.refreshCache();
System.out.println("Cache Data after refresh: " + cacheManager.getCacheData());
}
}
- এখানে, @EJB অ্যানোটেশন ব্যবহার করা হয়েছে, যা EJB কন্টেইনারকে বলে যে, এই ক্লাসে CacheManager Bean-এর ইনস্ট্যান্স ইনজেক্ট করতে হবে।
- CacheClient ক্লাসটি ক্লায়েন্ট হিসেবে কাজ করে, যেটি CacheManager Bean-এর মেথডগুলো কল করে।
4. Concurrency Management in Singleton Beans
যেহেতু Singleton Session Bean একক ইনস্ট্যান্স ব্যবহার করে, তাই একাধিক ক্লায়েন্ট যদি একই সময়ে এই Bean-কে অ্যাক্সেস করতে চায়, তবে concurrency সমস্যা সৃষ্টি হতে পারে। এই সমস্যা সমাধানের জন্য EJB কন্টেইনার Concurrency Management সাপোর্ট প্রদান করে।
Concurrency Control উদাহরণ:
import javax.ejb.Singleton;
import javax.ejb.Lock;
import javax.ejb.LockType;
@Singleton
public class CacheManager {
private int cacheData;
// Locking the method to prevent concurrent access
@Lock(LockType.WRITE)
public void setCacheData(int data) {
this.cacheData = data;
}
@Lock(LockType.READ)
public int getCacheData() {
return cacheData;
}
@Lock(LockType.WRITE)
public void refreshCache() {
this.cacheData = 100; // Example of setting some cache data
}
}
- এখানে @Lock অ্যানোটেশন ব্যবহার করা হয়েছে, যা WRITE এবং READ লক ব্যবহার করে concurrency সঠিকভাবে পরিচালনা করে।
- LockType.WRITE যখন কোনও মেথডে ব্যবহৃত হবে, তখন তা কেবল একটি থ্রেডকে সেই মেথড এক্সিকিউট করার অনুমতি দেবে। অন্যথায়, LockType.READ ব্যবহার করলে একাধিক থ্রেড একে অপরের সাথে বিরোধ না করে সেই মেথডে একসাথে প্রবেশ করতে পারে।
5. Singleton Session Bean এর উপকারিতা
- Performance Optimization: একই ইনস্ট্যান্স ব্যবহারের ফলে রিসোর্সের অপচয় কম হয় এবং এটি অ্যাপ্লিকেশন পারফরম্যান্স উন্নত করতে সাহায্য করে।
- State Sharing: একক ইনস্ট্যান্সে একাধিক ক্লায়েন্টের ডেটা শেয়ার করা সহজ হয়, বিশেষত যখন কোনো শেয়ার করা কনফিগারেশন বা ক্যাশিং প্রয়োজন হয়।
- Efficient Resource Management: সার্ভার শুরু হওয়া থেকে শেষ হওয়া পর্যন্ত কেবল একটি ইনস্ট্যান্স ব্যবহৃত হয়, তাই এটি রিসোর্সের কার্যকর ব্যবস্থাপনা নিশ্চিত করে।
6. Singleton Session Bean এর সীমাবদ্ধতা
- Concurrency Issues: একাধিক থ্রেড যদি একই সময় একই ইনস্ট্যান্সের মেথড অ্যাক্সেস করতে চায়, তবে তা concurrency সমস্যা তৈরি করতে পারে। যদিও Locking মেকানিজম ব্যবহার করে এটি সমাধান করা যায়।
- Single Point of Failure: Singleton Beans একক ইনস্ট্যান্স ব্যবহার করে, তাই সার্ভার বা Bean ব্যর্থ হলে অ্যাপ্লিকেশনটি পুরোপুরি ব্যাহত হতে পারে।
Singleton Session Bean একটি গুরুত্বপূর্ণ EJB কম্পোনেন্ট যা একটি সার্ভিস বা রিসোর্সের জন্য একক ইনস্ট্যান্স সরবরাহ করে। এটি শেয়ার করা অবস্থা পরিচালনা, রিসোর্স অপ্টিমাইজেশন, এবং ক্যাশিংয়ের মতো সেবার জন্য উপযুক্ত। তবে, concurrency management এবং single point of failure সমস্যা মোকাবেলা করতে locking এবং অন্যান্য কার্যকরী টেকনিক ব্যবহৃত হতে পারে। Eclipse-এ EJB সেটআপ এবং Singleton Beans ব্যবহার করা খুবই সহজ, যা সফটওয়্যার ডেভেলপমেন্টে বিভিন্ন সুবিধা প্রদান করে।
Read more