Stateless Beans এবং Stateful Beans হল EJB (Enterprise JavaBeans) এর দুটি প্রধান প্রকার। এই দুটি প্রকারের মধ্যে প্রধান পার্থক্য হল তাদের স্টেট (state) সংক্রান্ত আচরণ। এটি মূলত নির্ধারণ করে যে, EJB beans এর অবস্থা (state) ক্লায়েন্টের সাথে কিভাবে সম্পর্কিত থাকে এবং ব্যবস্থাপনা হয়।
এখানে Stateless Beans এবং Stateful Beans এর মধ্যে পার্থক্য ব্যাখ্যা করা হলো:
১. Stateless Beans
Stateless Beans এমন EJB beans যেগুলোর কোনো স্টেট (অবস্থা) থাকে না। অর্থাৎ, প্রতিটি ক্লায়েন্টের জন্য Bean-এর অবস্থা আলাদা থাকে না, এবং যখন ক্লায়েন্ট Bean থেকে রিকোয়েস্ট করে, তখন এটি কোনো অবস্থা (state) সংরক্ষণ করে না। একে সাধারণত সার্ভিস বা ইউটিলিটি প্রোভাইডার হিসেবে ব্যবহার করা হয় যেখানে কোনো নির্দিষ্ট অবস্থান বা ডাটা সংরক্ষণের প্রয়োজন নেই।
বৈশিষ্ট্য:
- স্টেট নেই: Stateless Beans কোনো ক্লায়েন্টের জন্য ডেটা বা অবস্থা সংরক্ষণ করে না।
- একই Bean একাধিক ক্লায়েন্টের জন্য ব্যবহার করা যেতে পারে: একবার Bean ইনস্ট্যান্স তৈরি হলে, এটি একাধিক ক্লায়েন্ট দ্বারা শেয়ার করা যেতে পারে। ইক্লিপ্স ইত্যাদি EJB কন্টেইনার স্বয়ংক্রিয়ভাবে Bean-এর ইনস্ট্যান্স ব্যবহার করে।
- দ্রুত এবং কার্যকরী: যেহেতু এই Beans কোনো স্টেট সংরক্ষণ করে না, এরা সাধারণত দ্রুত এবং কার্যকরী হয়।
- পুনঃব্যবহারযোগ্য: Bean-টি যেহেতু কোনো স্টেট সংরক্ষণ করে না, এটি দ্রুত নতুন ক্লায়েন্টের জন্য ব্যবহৃত হতে পারে।
উদাহরণ:
import javax.ejb.Stateless;
@Stateless
public class CalculatorBean implements CalculatorRemote {
public int add(int a, int b) {
return a + b;
}
public int subtract(int a, int b) {
return a - b;
}
}
এখানে CalculatorBean একটি Stateless Bean যা ক্লায়েন্টের জন্য add() এবং subtract() মেথডগুলি প্রদান করে, কিন্তু কোনো স্টেট সংরক্ষণ করে না।
২. Stateful Beans
Stateful Beans হল সেই EJB beans যেগুলোর স্টেট (অবস্থা) থাকে, অর্থাৎ এই Beans ক্লায়েন্টের সাথে তাদের অবস্থা সংরক্ষণ করে। একটি ক্লায়েন্ট যখন Bean-এ কোনো রিকোয়েস্ট পাঠায়, Bean তখন সেই ক্লায়েন্টের জন্য অবস্থা সংরক্ষণ করে এবং পরবর্তী রিকোয়েস্টে সেই অবস্থা পুনরুদ্ধার করা হয়। একে সাধারণত সেইসব পরিস্থিতিতে ব্যবহার করা হয় যেখানে ক্লায়েন্টের অবস্থা সংরক্ষণ করা প্রয়োজন।
বৈশিষ্ট্য:
- স্টেট রয়েছে: Stateful Beans ক্লায়েন্টের স্টেট সংরক্ষণ করে।
- এক ক্লায়েন্টের জন্য একমাত্র Bean: একটি Stateful Bean একটি নির্দিষ্ট ক্লায়েন্টের সাথে সম্পর্কিত থাকে, এবং এর অবস্থা (state) ঐ ক্লায়েন্টের জন্য এককভাবে সংরক্ষিত থাকে।
- কমপ্লেক্স অপারেশন: এই ধরনের Beans সাধারণত দীর্ঘমেয়াদি বা কমপ্লেক্স অপারেশন সম্পাদন করতে ব্যবহৃত হয়, যেখানে ক্লায়েন্টের অবস্থা সংরক্ষণ করা প্রয়োজন।
- ক্লায়েন্টের সাথে একত্রিত থাকে: একটি Stateful Bean কেবল একটি নির্দিষ্ট ক্লায়েন্টের জন্য স্থায়ী হয় যতক্ষণ না ক্লায়েন্টের সেশন শেষ না হয়।
উদাহরণ:
import javax.ejb.Stateful;
@Stateful
public class CounterBean implements CounterRemote {
private int count = 0;
public int increment() {
count++;
return count;
}
public int getCount() {
return count;
}
}
এখানে CounterBean একটি Stateful Bean যা ক্লায়েন্টের ইনক্রিমেন্ট কাউন্ট সংরক্ষণ করে এবং সেই ক্লায়েন্টের পরবর্তী রিকোয়েস্টের জন্য সেই স্টেট প্রদান করে।
Stateless এবং Stateful Beans এর মধ্যে পার্থক্য:
| বিষয় | Stateless Beans | Stateful Beans |
|---|---|---|
| স্টেট | কোনো স্টেট সংরক্ষণ করে না। | ক্লায়েন্টের জন্য স্টেট সংরক্ষণ করে। |
| ক্লায়েন্ট সম্পর্ক | একাধিক ক্লায়েন্ট একই Bean ব্যবহার করতে পারে। | একটি Bean একটি ক্লায়েন্টের সাথে সম্পর্কিত। |
| পারফরম্যান্স | দ্রুত এবং কার্যকরী, কারণ স্টেট সংরক্ষণ হয় না। | ধীর হতে পারে কারণ অবস্থা সংরক্ষণ করতে হয়। |
| ব্যবহার | সাধারণত সার্ভিস বা ইউটিলিটি প্রদান করতে ব্যবহৃত। | দীর্ঘমেয়াদি অবস্থা সংরক্ষণ করতে ব্যবহৃত। |
| উদাহরণ | ইনভয়েস ক্যালকুলেশন, সার্ভিস রিকোয়েস্ট। | কাস্টমার সেশন, ক্রেডিট কার্ড প্রক্রিয়াকরণ। |
| জীবনকাল | যতক্ষণ না EJB কন্টেইনার বন্ধ হয়। | ক্লায়েন্টের সেশন জীবিত থাকা পর্যন্ত। |
সংক্ষেপে:
- Stateless Beans: কোনো ক্লায়েন্টের জন্য স্টেট সংরক্ষণ করে না এবং দ্রুত ব্যবহৃত হয়।
- Stateful Beans: একটি নির্দিষ্ট ক্লায়েন্টের জন্য স্টেট সংরক্ষণ করে এবং দীর্ঘমেয়াদি ব্যবসায়িক লজিক প্রক্রিয়াকরণে ব্যবহৃত হয়।
Stateless Beans সাধারণত স্বল্পমেয়াদী বা একক কাজের জন্য ব্যবহৃত হয়, যেখানে Stateful Beans দীর্ঘমেয়াদী সেশন বা অবস্থা সংরক্ষণ করতে ব্যবহৃত হয়।
Stateless Session Bean একটি গুরুত্বপূর্ণ ধরনের EJB (Enterprise JavaBeans) যা EJB 3.x স্পেসিফিকেশনে ব্যবহৃত হয়। এটি সাধারণত Java EE অ্যাপ্লিকেশন ডেভেলপমেন্টে ব্যবহৃত হয় এবং একটি stateless (অবস্থা-স্বাধীন) বৈশিষ্ট্য ধারণ করে। Stateless Session Bean কোনো নির্দিষ্ট ক্লায়েন্টের অবস্থা সংরক্ষণ করে না, যা এটিকে খুবই স্কেলেবল এবং সহজে ব্যবস্থাপনাযোগ্য করে তোলে।
এখানে Stateless Session Bean এর বৈশিষ্ট্য এবং ব্যবহারের বিস্তারিত ব্যাখ্যা দেওয়া হলো।
1. Stateless Session Bean-এর বৈশিষ্ট্য
1.1. অবস্থাহীন (Stateless)
Stateless Session Bean কোনো ক্লায়েন্টের সাথে তার অবস্থান সংরক্ষণ করে না। যখন একটি ক্লায়েন্ট একটি Stateless Bean কল করে, তখন নতুন ইনস্ট্যান্স তৈরি হয় এবং এটি ক্লায়েন্টের জন্য শুধুমাত্র কার্যকরী লজিক সঞ্চালন করে। এটি আগের কোনো স্টেট সংরক্ষণ করে না।
1.2. একাধিক ক্লায়েন্টকে সার্ভিস প্রদান
Stateless Beans একাধিক ক্লায়েন্টকে সার্ভিস প্রদান করতে সক্ষম। একবার একটি Stateless Bean ব্যবহার করা হয়ে গেলে, সেটি অন্য একটি ক্লায়েন্টের জন্য পুনরায় ব্যবহার করা যেতে পারে। এটি একটি সার্ভার-সাইড ব্যবসায়িক লজিক, যা স্টেট হ্যান্ডলিংয়ের জন্য অতিরিক্ত রিসোর্স খরচ করে না, কারণ প্রতিটি ক্লায়েন্টের জন্য পৃথক অবস্থান সংরক্ষণ করা হয় না।
1.3. ট্রানজেকশন ম্যানেজমেন্ট
Stateless Session Bean-এ ট্রানজেকশনগুলি সাধারণত container-managed। এটি container দ্বারা পরিচালিত হয় এবং ক্লায়েন্ট কোনো ট্রানজেকশন শুরু করলে বা শেষ করলে, তা স্বয়ংক্রিয়ভাবে এক্সিকিউট হবে।
1.4. প্রপার্টি ও কনফিগারেশন
Stateless Session Bean সাধারণত একটি Session Bean Interface (যেমন Local এবং Remote Interface) দ্বারা সংজ্ঞায়িত হয়। এটি ইন্টারফেসের মাধ্যমে ক্লায়েন্টকে সেবা প্রদান করে।
1.5. দ্রুত পারফরমেন্স এবং স্কেলেবিলিটি
এটি খুব দ্রুত এবং স্কেলেবল হয় কারণ এতে অবস্থার (state) কোনো ধারণা নেই, তাই ক্লায়েন্টের সাথে কোনো ধরনের অবস্থা সংরক্ষণের প্রয়োজন পড়ে না।
1.6. ট্রানজেকশন ম্যানেজমেন্ট
Stateless Beans সাধারণত container-managed transactions (CMT) ব্যবহৃত হয়, যার মাধ্যমে ডেটাবেস টানিয়ে, যে কোনো জাভা ট্রানজেকশন অপারেশন সম্পাদন করা যায়।
2. Stateless Session Bean-এর ব্যবহার
Stateless Session Bean সাধারণত যেসব প্রোজেক্টে বিজনেস লজিক বা ডেটা প্রসেসিং করতে হয়, সেখানে ব্যবহৃত হয়। উদাহরণস্বরূপ, আপনি যদি কোনো সিস্টেমে একাধিক ক্লায়েন্টের জন্য একে অপরের উপর নির্ভর না হয়ে কিছু সাধারণ কার্যকলাপ পরিচালনা করতে চান (যেমন, গণনা, তথ্য সংক্ষেপণ বা যেকোনো প্রক্রিয়া), সেখানে Stateless Session Beans একটি আদর্শ পছন্দ হতে পারে।
ব্যবহার উদাহরণ:
একটি ব্যাঙ্ক অ্যাপ্লিকেশন যেখানে প্রতিটি গ্রাহক অর্থ স্থানান্তর করতে সক্ষম, কিন্তু তাদের পূর্ববর্তী লেনদেনের কোনো অবস্থান সংরক্ষণ করতে হবে না, সেখানে একটি Stateless Session Bean ব্যবহৃত হবে।
Stateless Session Bean উদাহরণ:
import javax.ejb.Stateless;
@Stateless
public class CalculatorBean implements CalculatorBeanLocal {
public int add(int a, int b) {
return a + b;
}
public int subtract(int a, int b) {
return a - b;
}
public int multiply(int a, int b) {
return a * b;
}
public int divide(int a, int b) throws ArithmeticException {
if (b == 0) {
throw new ArithmeticException("Cannot divide by zero");
}
return a / b;
}
}
এখানে, CalculatorBean একটি Stateless Session Bean যা গাণিতিক কার্যকলাপ পরিচালনা করে। Stateless হওয়ায় এটি ক্লায়েন্টের অবস্থা সংরক্ষণ করে না এবং একাধিক ক্লায়েন্টের জন্য একে পুনরায় ব্যবহার করা যেতে পারে।
Stateless Session Bean Interface:
import javax.ejb.Local;
@Local
public interface CalculatorBeanLocal {
int add(int a, int b);
int subtract(int a, int b);
int multiply(int a, int b);
int divide(int a, int b) throws ArithmeticException;
}
এটি Local Interface, যেটি ক্লায়েন্টকে Stateless Session Bean এর সঙ্গে ইন্টারঅ্যাক্ট করতে সাহায্য করবে।
3. Stateless Session Bean-এর সুবিধা
- উচ্চ পারফরমেন্স: যেহেতু এটি ক্লায়েন্টের অবস্থা সংরক্ষণ করে না, তাই এটি অধিক স্কেলেবল এবং পারফরম্যান্সের ক্ষেত্রে দ্রুত কাজ করতে সক্ষম।
- কম রিসোর্স ব্যবহার: Stateless Beans-এর স্টেট সংরক্ষণ করার প্রয়োজন নেই, ফলে কম মেমরি ব্যবহার হয় এবং এটি দ্রুত কার্যকর হয়।
- উচ্চ স্তরের স্কেলেবিলিটি: Stateless Session Beans একাধিক ক্লায়েন্টের জন্য সার্ভিস প্রদান করতে সক্ষম, যা উচ্চ স্কেলেবল অ্যাপ্লিকেশনগুলির জন্য উপযুক্ত।
- কমপ্লেক্সিটি কমানো: Stateless Beans সাধারণত সরল ব্যবসায়িক লজিক পরিচালনা করে, যার ফলে কোডের জটিলতা কমে যায় এবং রক্ষণাবেক্ষণ সহজ হয়।
4. Stateless Session Bean-এর সীমাবদ্ধতা
- স্টেট সংরক্ষণ না করা: যদি কোনো সার্ভিস বা অ্যাপ্লিকেশনে ক্লায়েন্টের অবস্থান সংরক্ষণের প্রয়োজন হয়, তবে Stateless Session Bean একটি উপযুক্ত পছন্দ নয়। এই সমস্যা মোকাবেলা করতে Stateful Session Beans ব্যবহার করা যেতে পারে।
- ট্রানজেকশন ম্যানেজমেন্ট: Stateless Beans-এর ক্ষেত্রে কমপ্লেক্স ট্রানজেকশন ম্যানেজমেন্টের প্রয়োজন হতে পারে, যেহেতু এগুলি container-managed ট্রানজেকশন ব্যবস্থাপনা ব্যবহার করে এবং এর মধ্যে অনেক কিছু কনফিগারেশন ও বিশেষ চাহিদা থাকতে পারে।
Stateless Session Bean Java EE (EJB) প্রযুক্তির একটি অত্যন্ত গুরুত্বপূর্ণ অংশ, যা ব্যাবসায়িক লজিক ও ডিস্ট্রিবিউটেড অ্যাপ্লিকেশনের জন্য আদর্শ। এটি উচ্চ পারফরম্যান্স, স্কেলেবিলিটি এবং সহজ রক্ষণাবেক্ষণের সুবিধা প্রদান করে। যখন আপনার অ্যাপ্লিকেশনে ক্লায়েন্টদের অবস্থা সংরক্ষণের প্রয়োজন না হয় এবং আপনি দ্রুত কার্যকারিতা চান, তখন Stateless Session Bean ব্যবহার করতে পারেন। Stateless Session Bean একটি কার্যকরী, সহজ এবং আধুনিক এন্টারপ্রাইজ অ্যাপ্লিকেশন ডিজাইনে সহায়ক।
Stateful Session Beans হল EJB (Enterprise JavaBeans) এর একটি প্রকার যা Stateful বা স্টেটফুল ডেটা ধারণ করে এবং একটি নির্দিষ্ট ক্লায়েন্টের সাথে state বা অবস্থা বজায় রাখে। Stateful Session Beans সাধারণত business logic পরিচালনা করতে ব্যবহৃত হয় এবং ক্লায়েন্টের সাথে দীর্ঘমেয়াদী সম্পর্ক স্থাপন করে, যা তাদের অবস্থা সুরক্ষিত রাখে।
Stateful Session Bean এর বৈশিষ্ট্য:
- State Preservation (স্টেট সংরক্ষণ):
- Stateful Bean একটি ক্লায়েন্টের সাথে তার state বা অবস্থা সংরক্ষণ করে। যখন একটি Stateful Session Bean তৈরি করা হয়, তখন তার অবস্থা ক্লায়েন্টের জন্য সঙ্গতিপূর্ণ থাকে যতক্ষণ না সেটি মুছে ফেলা হয়।
- একটি Stateful Bean প্রতিটি ক্লায়েন্টের জন্য আলাদা থাকে, এবং এর মান ও অবস্থা সংরক্ষণ করে, তাই এটি বিভিন্ন ক্লায়েন্টের জন্য ভিন্ন হতে পারে।
- Lifecycle (লাইফসাইকেল):
- Stateful Session Bean এর লাইফসাইকেল সাধারণত EJB Container দ্বারা পরিচালিত হয়। এটি ক্লায়েন্টের সাথে সম্পর্ক স্থাপন করার পর, ক্লায়েন্টের স্টেট সংরক্ষণ করে এবং ক্লায়েন্ট সেই অবস্থা পরবর্তী সময়ে ব্যবহার করতে পারে।
- এর timeout থাকে, যদি কোনো ক্লায়েন্ট দীর্ঘসময় Bean এর সাথে ইন্টারঅ্যাক্ট না করে, তবে EJB Container সেই Stateful Bean কে মুছে ফেলতে পারে।
- Client-Specific State:
- Stateful Beans শুধুমাত্র নির্দিষ্ট ক্লায়েন্টের জন্য অবস্থা সংরক্ষণ করে। অর্থাৎ, দুটি ভিন্ন ক্লায়েন্ট একই Bean ব্যবহার করলেও তাদের অবস্থা পৃথক থাকবে।
- Removal (অপসারণ):
- Stateful Session Beans remove() মেথড ব্যবহার করে ক্লায়েন্ট দ্বারা মুছে ফেলা যেতে পারে। Bean এর lifecycle এর শেষের দিকে, ক্লায়েন্টের ব্যবহারের পর, Bean মুছে ফেলতে হবে।
- Stateful Beans EJB কন্টেইনার দ্বারা passivated এবং activated হতে পারে, যা তাদের অবস্থা মেমরি থেকে ডিস্কে সেভ এবং পুনরায় লোড করার প্রক্রিয়া।
- Concurrency:
- Stateful Beans সাধারণত single-threaded হয়, অর্থাৎ এক সময় এক ক্লায়েন্টের জন্যই এই Bean কার্যকরী থাকে। তাই একাধিক ক্লায়েন্ট একে অপরকে ব্লক না করে একই সময় একই Bean ব্যবহার করতে পারে না।
- তবে, concurrency management প্রয়োগ করে একাধিক থ্রেডের জন্য Bean এর সমান্তরাল অ্যাক্সেস নির্ধারণ করা যেতে পারে।
Stateful Bean এর ব্যবহার:
Stateful Session Beans সাধারণত ব্যবহৃত হয় যেখানে client-specific information বা state প্রয়োজন হয়, এবং যেখানে বিভিন্ন ক্লায়েন্টের জন্য পৃথকভাবে অবস্থা সংরক্ষণ করতে হবে। এর ব্যবহার বেশ কিছু ক্ষেত্রে হতে পারে:
- User Sessions:
- একটি Stateful Session Bean ব্যবহার করা হয় user session management এর জন্য। উদাহরণস্বরূপ, একটি ওয়েব অ্যাপ্লিকেশন যেখানে ইউজারের লগইন অবস্থা, ইউজারের পছন্দ বা অন্যান্য তথ্য সংরক্ষণ করতে হবে, সেখানে Stateful Beans কার্যকরী হতে পারে।
- Shopping Cart:
- একটি ই-কমার্স অ্যাপ্লিকেশনে একটি Stateful Bean ব্যবহার করা যেতে পারে যাতে ইউজারের শপিং কার্টের তথ্য সংরক্ষণ করা যায়। এটি ইউজারের জন্য প্রয়োজনীয় তথ্য (যেমন, পণ্য এবং পরিমাণ) সংগ্রহ করতে সাহায্য করবে, যা একাধিক রিকোয়েস্টে ব্যবহৃত হতে পারে।
- User Preferences:
- Stateful Beans ব্যবহার করা হয় user preferences বা ব্যক্তিগত পছন্দ সংরক্ষণের জন্য। এটি ইউজারের পছন্দ, সেটিংস, বা ভাষার তথ্য সঞ্চয় করতে সাহায্য করবে যা বার বার সার্ভার রিকোয়েস্টের মধ্যে পাওয়ার দরকার।
- Transactional Business Logic:
- Stateful Beans ব্যবহৃত হতে পারে যখন একটি লম্বা ট্রানজেকশন বা সেশনের জন্য অবস্থা সংরক্ষণ করতে হয়। যেমন, ব্যাংক ট্রানজেকশন বা ক্রেডিট কার্ড পেমেন্ট প্রসেসিং এর ক্ষেত্রে।
Stateful Bean উদাহরণ:
এখানে একটি সাধারণ Stateful Session Bean এর উদাহরণ দেওয়া হলো:
Step 1: Stateful Session Bean Interface
package com.example.ejb;
import javax.ejb.Remote;
@Remote
public interface ShoppingCartRemote {
void addItem(String item);
void removeItem(String item);
String[] getItems();
}
এই ইন্টারফেসে আমরা তিনটি মেথড তৈরি করেছি: একটি আইটেম যোগ করার জন্য, একটি আইটেম মুছে ফেলার জন্য, এবং সমস্ত আইটেম দেখানোর জন্য।
Step 2: Stateful Session Bean Implementation
package com.example.ejb;
import javax.ejb.Stateful;
import java.util.ArrayList;
import java.util.List;
@Stateful
public class ShoppingCartBean implements ShoppingCartRemote {
private List<String> items = new ArrayList<>();
@Override
public void addItem(String item) {
items.add(item);
}
@Override
public void removeItem(String item) {
items.remove(item);
}
@Override
public String[] getItems() {
return items.toArray(new String[0]);
}
}
এখানে আমরা একটি Stateful Session Bean তৈরি করেছি, যেখানে একটি ShoppingCart এর addItem(), removeItem(), এবং getItems() মেথড রয়েছে। প্রতিটি ক্লায়েন্টের জন্য আলাদা items লিস্ট থাকবে যা স্টেটফুল Bean এর মাধ্যমে সংরক্ষিত হবে।
Step 3: Client Code (EJB Client)
package com.example.client;
import javax.naming.Context;
import javax.naming.InitialContext;
import com.example.ejb.ShoppingCartRemote;
public class ShoppingCartClient {
public static void main(String[] args) {
try {
Context context = new InitialContext();
ShoppingCartRemote cart = (ShoppingCartRemote) context.lookup("java:global/myapp/ShoppingCartBean!com.example.ejb.ShoppingCartRemote");
// Add items to shopping cart
cart.addItem("Laptop");
cart.addItem("Smartphone");
// Display items
String[] items = cart.getItems();
for (String item : items) {
System.out.println("Item: " + item);
}
// Remove an item
cart.removeItem("Laptop");
// Display items again
items = cart.getItems();
for (String item : items) {
System.out.println("Item: " + item);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
এখানে ক্লায়েন্ট কোডে ShoppingCartRemote ইন্টারফেসের মাধ্যমে Stateful Bean এর মেথড গুলো ব্যবহার করা হয়েছে। প্রথমে আমরা কিছু আইটেম অ্যাড করেছি, পরে সেগুলো দেখেছি এবং তারপর একটি আইটেম মুছে ফেলেছি।
Stateful Bean এর Lifecycle:
Stateful Session Bean এর লাইফসাইকেল EJB কন্টেইনার দ্বারা পরিচালিত হয় এবং এর বেশ কিছু গুরুত্বপূর্ণ ফেজ রয়েছে:
- Instantiating: যখন Stateful Bean তৈরি হয়, তখন কন্টেইনার Bean কে instantiate করে।
- Post-Construct: Bean ইন্সট্যান্ট হওয়ার পর @PostConstruct অ্যানোটেশন ব্যবহার করে আপনি প্রাথমিক কনফিগারেশন করতে পারেন।
- Business Method Invocation: এরপর ক্লায়েন্ট Bean এর মেথড কল করতে পারে।
- Passivation: যখন EJB কন্টেইনার অবজেক্টের অবস্থান (state) কম ব্যবহৃত হয়, তখন এটি passivate হয় এবং তার অবস্থা ডেটাবেস বা ফাইল সিস্টেমে সংরক্ষণ করা হয়।
- Activation: Bean যখন পুনরায় প্রয়োজন হয়, তখন অবস্থা আবার activate হয়।
- Removal: অবশেষে, ক্লায়েন্ট যখন Bean মুছে ফেলার জন্য কল করে, তখন remove() মেথড ব্যবহার করা হয় এবং Bean কন্টেইনার থেকে মুছে ফেলা হয়।
সারাংশ:
Stateful Session Beans হল EJB কম্পোনেন্ট যা ক্লায়েন্টের অবস্থা সংরক্ষণ করে এবং তাদের সাথে সম্পর্কিত থাকে। এটি দীর্ঘস্থায়ী ক্লায়েন্ট সেশন বা ট্রানজেকশনাল প্রসেস পরিচালনা করতে ব্যবহৃত হয়। Stateful Bean এর সুবিধা হলো এটি প্রতিটি ক্লায়েন্টের জন্য আলাদা অবস্থা সংরক্ষণ করে এবং ক্লায়েন্টের দীর্ঘমেয়াদী ইন্টারঅ্যাকশনের জন্য উপযুক্ত।
EJB (Enterprise JavaBeans) হল একটি Java EE (এখন Jakarta EE) ফিচার যা ডিস্ট্রিবিউটেড অ্যাপ্লিকেশন ডেভেলপমেন্টের জন্য ব্যবহৃত হয়। EJB তে দুটি প্রধান ধরনের সেশন বীন রয়েছে: Stateless Session Beans এবং Stateful Session Beans। এই দুটি বীনের মধ্যে পার্থক্য হল তাদের স্টেট হ্যান্ডলিং কিভাবে করা হয় এবং তাদের ব্যবহারের উদ্দেশ্য কী।
নিচে Stateless এবং Stateful সেশন বীনের মধ্যে পার্থক্য বিস্তারিতভাবে বর্ণনা করা হলো:
1. Stateless Session Bean
Stateless Session Bean হল এমন একটি EJB যা তার ক্লায়েন্টের স্টেট (অবস্থা) সংরক্ষণ করে না। এর মানে হল যে, ক্লায়েন্টের মধ্যে যতবারই অনুরোধ করা হোক না কেন, সেই বীনের অবস্থা পুনরায় তৈরি হয় এবং আগের রিকোয়েস্টের কোন তথ্য সংরক্ষণ করা হয় না।
Stateless Bean এর বৈশিষ্ট্য:
- স্টেট সংরক্ষণ না করা: Stateless Beans এর মধ্যে ক্লায়েন্টের কোনো অবস্থা সংরক্ষিত থাকে না। প্রতিটি রিকোয়েস্টের জন্য Bean এর একটি নতুন ইনস্ট্যান্স তৈরি হয়।
- পারফরম্যান্স উন্নতি: এই ধরনের বীন সাধারণত দ্রুত এবং কার্যকরী কারণ এগুলির কোন অবস্থা সংরক্ষণের প্রয়োজন হয় না।
- একাধিক ক্লায়েন্টের জন্য ব্যবহারযোগ্য: একটি Stateless Bean একাধিক ক্লায়েন্টের জন্য ব্যবহৃত হতে পারে এবং একে সুরক্ষিতভাবে শেয়ার করা যায়। এর মানে হলো, একই Bean একাধিক ক্লায়েন্টের অনুরোধ পরিপূর্ণ করতে পারে।
- ব্যবহার: Stateless Beans সাধারণত কমপ্লেক্স লজিক বা লাইটওয়েট ব্যবসায়িক ফাংশন যেমন গণনা, লগ ইন, প্রক্রিয়া-নির্বাহ ইত্যাদির জন্য ব্যবহৃত হয়।
Stateless Bean উদাহরণ:
import javax.ejb.Stateless;
@Stateless
public class CalculatorBean implements Calculator {
public int add(int a, int b) {
return a + b;
}
}
এখানে, CalculatorBean একটি Stateless Bean যা দুটি সংখ্যার যোগফল প্রদান করে। যেহেতু এটি একটি Stateless Bean, এটি কোনো স্টেট সংরক্ষণ করে না।
2. Stateful Session Bean
Stateful Session Bean হল এমন একটি EJB যা তার ক্লায়েন্টের স্টেট (অবস্থা) সংরক্ষণ করে এবং পরবর্তী রিকোয়েস্টে সেই স্টেট ব্যবহার করে। এর মানে হল যে, যখন একটি ক্লায়েন্ট একটি রিকোয়েস্ট করে, তখন Bean তার অবস্থা সংরক্ষণ করে রাখে এবং পরবর্তী ক্লায়েন্ট রিকোয়েস্টে সেই অবস্থা পুনরায় ব্যবহার করতে পারে।
Stateful Bean এর বৈশিষ্ট্য:
- স্টেট সংরক্ষণ করা: Stateful Beans ক্লায়েন্টের স্টেট সংরক্ষণ করে। এর মানে হলো যে, Bean একটি ক্লায়েন্টের সাথে সম্পৃক্ত থাকবে এবং সেই ক্লায়েন্টের অবস্থা পরবর্তী অনুরোধে ব্যবহার করবে।
- এটি ক্লায়েন্টের সাথে সম্পর্কিত থাকে: Stateful Beans শুধুমাত্র একটি ক্লায়েন্টের জন্য সংরক্ষিত থাকে এবং এক ক্লায়েন্টের জন্য অন্য ক্লায়েন্টের মধ্যে শেয়ার করা যায় না।
- জটিল বা দীর্ঘ-প্রসেসিং ব্যবসায়িক লজিক: Stateful Beans সাধারণত সেইসব ক্ষেত্রে ব্যবহৃত হয় যেখানে একটি লজিকাল অবস্থা সংরক্ষণ করা প্রয়োজন, যেমন একটি শপিং কার্ট, অথবা একটি দীর্ঘ ট্রানজেকশন প্রসেস।
- প্রতিরোধযোগ্য হতে পারে: Stateful Beans ব্যবহৃত হওয়ার পর ক্লায়েন্টের ডেটা সংরক্ষিত থাকার কারণে তাদের মেমরি ব্যবহারের পরিমাণ বেশি হতে পারে। তবে, Bean ব্যবহার না হলে অবস্থা ধ্বংস হয়ে যায়।
Stateful Bean উদাহরণ:
import javax.ejb.Stateful;
@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 Bean যা ব্যবহারকারীর শপিং কার্টে আইটেম যোগ করার জন্য ব্যবহৃত হয়। এটি আইটেমগুলির একটি তালিকা সংরক্ষণ করে এবং পরবর্তী অনুরোধের সাথে সেই তালিকাটি ব্যবহার করতে পারে।
Stateless এবং Stateful Beans এর মধ্যে পার্থক্য:
| বৈশিষ্ট্য | Stateless Bean | Stateful Bean |
|---|---|---|
| স্টেট সংরক্ষণ | স্টেট সংরক্ষণ করে না। | ক্লায়েন্টের স্টেট সংরক্ষণ করে। |
| পারফরম্যান্স | দ্রুত এবং পারফর্ম্যান্সে ভালো। | কিছুটা ধীর হতে পারে, কারণ স্টেট সংরক্ষণ করতে হয়। |
| একাধিক ক্লায়েন্টের জন্য ব্যবহার | একাধিক ক্লায়েন্টের জন্য শেয়ার করা যায়। | একটি ক্লায়েন্টের জন্য বিশেষভাবে ব্যবহৃত হয়। |
| ব্যবহার ক্ষেত্র | লাইটওয়েট এবং দ্রুত কাজ যেমন গাণিতিক অপারেশন। | যেসব ক্ষেত্রের জন্য স্টেট ট্র্যাকিং প্রয়োজন, যেমন শপিং কার্ট। |
| স্টেটের অবস্থা | কোনো অবস্থা রাখে না। | অবস্থা সংরক্ষণ করে এবং ক্লায়েন্টের জন্য এটি ব্যক্তিগত থাকে। |
| এক্সিকিউশন | নতুন অনুরোধের সাথে নতুন অবস্থা তৈরি হয়। | পূর্ববর্তী অনুরোধের সঙ্গে সংশ্লিষ্ট থাকে। |
সারাংশ:
- Stateless Session Beans: এই বীনগুলি স্টেট সংরক্ষণ করে না, এবং একাধিক ক্লায়েন্টের জন্য ব্যবহার করা যায়। এগুলি সাধারণত দ্রুত কাজের জন্য ব্যবহৃত হয় যেখানে ক্লায়েন্টের অবস্থা সংরক্ষণ করা প্রয়োজন নেই।
- Stateful Session Beans: এই বীনগুলি ক্লায়েন্টের স্টেট সংরক্ষণ করে, যা দীর্ঘ-প্রসেসিং ব্যবসায়িক লজিক বা ট্রানজেকশনাল প্রসেসের জন্য উপকারী। এগুলি শুধুমাত্র একটি ক্লায়েন্টের জন্য ব্যবহৃত হয় এবং ক্লায়েন্টের সাথে সম্পর্কিত থাকে।
এভাবে, আপনি ব্যবসায়িক লজিক এবং সিস্টেমের চাহিদা অনুযায়ী Stateless বা Stateful Beans বেছে নিতে পারেন।
EJB (Enterprise JavaBeans) এ দুটি প্রধান ধরনের Session Bean রয়েছে: Stateless Bean এবং Stateful Bean। এগুলোর Life Cycle বা জীবনচক্র কিছুটা ভিন্ন। EJB কম্পোনেন্টগুলির জীবনচক্র কন্টেইনার দ্বারা পরিচালিত হয় এবং এটি বিশেষভাবে বিজনেস লজিকের প্রক্রিয়া ও ম্যানেজমেন্টে সাহায্য করে। এখানে Stateless Bean এবং Stateful Bean এর জীবনচক্রের বিস্তারিত ব্যাখ্যা দেওয়া হলো।
1. Stateless Bean Life Cycle
Stateless Session Beans একটি নির্দিষ্ট ক্লায়েন্টের সাথে অবস্থা বা স্টেট সংরক্ষণ করে না। যখন ক্লায়েন্ট একটি Stateless Bean এর সাথে যোগাযোগ করে, তখন EJB কন্টেইনার এটি নতুনভাবে তৈরি করে এবং ক্লায়েন্টের অনুরোধ অনুযায়ী কাজ সম্পন্ন করে। কাজ শেষ হলে, Stateless Bean টি পুনরায় ব্যবহৃত হওয়ার জন্য আবার কন্টেইনারে রাখা হয়।
Stateless Bean Life Cycle:
- Instantiation:
- ক্লায়েন্টের প্রথম অনুরোধ আসার পর, Stateless Bean কন্টেইনার দ্বারা ইনস্ট্যানশিয়েট করা হয়। এটি ক্লায়েন্টের কোন নির্দিষ্ট স্টেট সংরক্ষণ করে না।
- Stateless Bean এর ক্লাসের একটি নতুন ইনস্ট্যান্স তৈরি হয় এবং এই অবজেক্টটি ক্লায়েন্টের অনুরোধে ব্যবহৃত হয়।
- Method Invocation:
- ক্লায়েন্ট EJB মেথড কল করে এবং কন্টেইনার ওই মেথডটি কার্যকর করে। Bean এর মেথড সাধারণত দ্রুত সম্পন্ন হয় এবং কোনো স্টেট বা অবস্থা সংরক্ষণ করে না।
- Passive State:
- Bean মেথডটি সম্পন্ন হওয়ার পর, EJB কন্টেইনার Bean এর অবজেক্টটি পুনঃব্যবহারযোগ্য হিসেবে রাখে। Stateless Bean এর কোনো ব্যক্তিগত স্টেট থাকে না।
- Removal:
- যখন আর কোনো ক্লায়েন্ট Bean কে ব্যবহার করতে চায় না, তখন কন্টেইনার Bean এর ইনস্ট্যান্সটি মুছে দেয়। এটি অতিরিক্ত মেমরি দখল না করার জন্য কার্যকরী।
- @Remove এ্যানোটেশন ব্যবহার করে Explicit remove করা যায়।
Stateless Bean Example:
import javax.ejb.Stateless;
@Stateless
public class HelloWorldBean implements HelloWorldRemote {
public String sayHello() {
return "Hello, Stateless EJB!";
}
}
Stateless Bean Life Cycle এর Steps:
- Instantiation (Bean তৈরি হয়)
- Method Invocation (Bean মেথড কল হয়)
- Passive State (Bean পুনঃব্যবহারযোগ্য হয়)
- Removal (Bean মুছে ফেলা হয়)
2. Stateful Bean Life Cycle
Stateful Session Beans ক্লায়েন্টের অবস্থান বা স্টেট সংরক্ষণ করে। অর্থাৎ, যখন একটি Stateful Bean একাধিক মেথড কলের মাধ্যমে একটি ক্লায়েন্টের সাথে যোগাযোগ করে, তখন এটি ওই ক্লায়েন্টের সমস্ত স্টেট মেমরি তে সংরক্ষণ করে রাখে। যখন ক্লায়েন্টের সাথে ইন্টারঅ্যাকশন বন্ধ হয়, তখন Bean শেষ হয় এবং এর অবস্থা মুছে ফেলা হয়।
Stateful Bean Life Cycle:
- Instantiation:
- Stateful Bean প্রথমবারের মতো ক্লায়েন্টের অনুরোধের পর কন্টেইনার দ্বারা ইনস্ট্যানশিয়েট হয়। এটি ক্লায়েন্টের সাথে স্টেট সংরক্ষণ করে।
- Stateful Bean তৈরি হওয়ার পর, তার অবস্থান (state) ওই ক্লায়েন্টের জন্য সংরক্ষিত থাকে এবং পরবর্তী কলগুলির জন্য ব্যবহার করা হয়।
- Method Invocation:
- ক্লায়েন্ট Bean এর মেথড কল করলে, Bean এর ইনস্ট্যান্সটি ক্লায়েন্টের অবস্থানকে বজায় রেখে সেই মেথড কার্যকর করে।
- ক্লায়েন্ট এবং Bean এর মধ্যে যোগাযোগের সময় Bean এর স্টেট পরিবর্তন হতে থাকে।
- Passivation:
- যখন Stateful Bean আর সক্রিয় থাকে না বা কোনো নির্দিষ্ট সময় ব্যবধান থাকে, তখন কন্টেইনার Bean এর অবস্থা (state) মেমরিতে সংরক্ষণ করে, যা পরে পুনরুদ্ধার করা যেতে পারে।
- এটা passivation নামে পরিচিত। যখন Bean সক্রিয় হয়, তখন তার অবস্থা আবার পুনরুদ্ধার করা হয়।
- Removal:
- Stateful Bean শেষ হয়ে যায় যখন ক্লায়েন্ট EJB এর সাথে আর যোগাযোগ করতে চায় না বা Bean এর জন্য
@Removeবা অন্য কোনো নির্দেশ দেওয়া হয়। - এই সময় Bean এর সমস্ত স্টেট এবং ইনস্ট্যান্স মুছে ফেলা হয়।
- Stateful Bean শেষ হয়ে যায় যখন ক্লায়েন্ট EJB এর সাথে আর যোগাযোগ করতে চায় না বা Bean এর জন্য
Stateful Bean Example:
import javax.ejb.Stateful;
@Stateful
public class ShoppingCartBean implements ShoppingCartRemote {
private List<Item> items = new ArrayList<>();
public void addItem(Item item) {
items.add(item);
}
public List<Item> getItems() {
return items;
}
public double getTotal() {
double total = 0;
for (Item item : items) {
total += item.getPrice();
}
return total;
}
@Remove
public void checkout() {
// Perform checkout logic
}
}
Stateful Bean Life Cycle এর Steps:
- Instantiation (Bean তৈরি হয়)
- Method Invocation (Bean মেথড কল হয়)
- Passivation (Bean এর স্টেট সংরক্ষণ হয়)
- Removal (Bean মুছে ফেলা হয়)
Stateful এবং Stateless Bean এর মধ্যে প্রধান পার্থক্য:
| Feature | Stateless Bean | Stateful Bean |
|---|---|---|
| State Management | ক্লায়েন্টের স্টেট সংরক্ষণ করে না | ক্লায়েন্টের স্টেট সংরক্ষণ করে |
| Lifecycle | দ্রুত নির্মাণ এবং মুছে ফেলা | দীর্ঘসময় চলতে থাকে ক্লায়েন্টের সাথে |
| Passivation | No | Yes |
| Performance | অধিক স্কেলেবল | কম স্কেলেবল, বেশি মেমরি প্রয়োজন |
| Use Case | ছোট, সহজ সার্ভিস বা স্টেটলেস লজিক | ক্লায়েন্টের অবস্থা সংরক্ষণকারী অ্যাপ্লিকেশন |
EJB Life Cycle Summary
- Stateless Beans: EJB কন্টেইনার ইনস্ট্যানশিয়েট এবং মেথড কল করার পর ইনস্ট্যান্সকে পুনঃব্যবহারযোগ্য অবস্থায় রাখে। কোন স্টেট সংরক্ষণ করে না।
- Stateful Beans: ক্লায়েন্টের সাথে সম্পর্কিত অবস্থা বা স্টেট বজায় রাখে এবং কাজের শেষে মুছে ফেলা হয়। এই Bean এর স্টেট সংরক্ষণ করা হয় এবং passivation প্রক্রিয়া ব্যবহার করে মেমরি অপটিমাইজ করা হয়।
EJB এর জীবনচক্র এবং Bean এর ধরন অনুযায়ী, ডেভেলপাররা তাদের অ্যাপ্লিকেশনের জন্য যথাযথ Bean নির্বাচন করতে পারেন, যা তাদের কর্মক্ষমতা এবং স্থিতি সম্পর্কিত প্রয়োজনের উপর নির্ভর করে।
Read more