EJB (Enterprise JavaBeans) হল একটি গুরুত্বপূর্ণ Java EE প্রযুক্তি যা Enterprise Application Development এর জন্য ব্যবহৃত হয়। EJB Beans-এর লাইফসাইকেল ব্যবস্থাপনা হল একটি অপরিহার্য দিক, যা EJB Beans-এর instantiation, invocation, transaction management, এবং destruction কে সঠিকভাবে পরিচালনা করে। EJB Bean Lifecycle Management নিশ্চিত করে যে beansগুলি সঠিকভাবে তৈরি, ব্যবহৃত, এবং ধ্বংস হবে, এবং এই সমস্ত প্রক্রিয়া EJB container দ্বারা সম্পাদিত হয়।
Eclipse তে EJB Bean Lifecycle Management কিভাবে কাজ করে তা সম্পর্কে বিস্তারিত ব্যাখ্যা করা হলো, যেখানে আমরা Session Beans, Message-driven Beans, এবং Entity Beans এর লাইফসাইকেল কভার করব।
১. EJB Bean Lifecycle Overview
EJB Bean Lifecycle Management এ তিনটি প্রধান ধাপ রয়েছে:
- Instantiating (EJB Bean তৈরি হওয়া)
- Invoking (EJB Bean এর মেথড কল হওয়া)
- Destroying (EJB Bean ধ্বংস হওয়া)
এই তিনটি ধাপ সাধারণভাবে EJB container দ্বারা পরিচালিত হয়।
EJB Beans-এর প্রকারভেদ:
- Session Beans: এই beans গুলি ক্লায়েন্টের অনুরোধের ভিত্তিতে তৈরি এবং ধ্বংস হয়।
- Message-driven Beans: এই beans গুলি মেসেজ প্রসেসিংয়ের জন্য ব্যবহৃত হয় এবং asynchronous হয়।
- Entity Beans: ডাটাবেসের সাথে কাজ করার জন্য ব্যবহৃত হয়, তবে আধুনিক জাভা অ্যাপ্লিকেশনগুলিতে এগুলি JPA (Java Persistence API) দিয়ে প্রতিস্থাপিত হয়েছে।
২. Session Beans Lifecycle (Stateful এবং Stateless)
Session Beans দুটি প্রকারের হয়:
- Stateless Session Beans
- Stateful Session Beans
Stateful Session Beans Lifecycle
Stateful Session Beans ক্লায়েন্টের অবস্থান সংরক্ষণ করে এবং একাধিক মেথড কলের মধ্যে ডেটা শেয়ার করতে সক্ষম হয়। এর লাইফসাইকেল অনেকটা এমন:
- Create (EJB instantiation):
- ক্লায়েন্ট যখন প্রথমবার একটি Stateful Session Bean কল করে, EJB container সেই bean-এর একটি ইনস্ট্যান্স তৈরি করে।
- Business Method Invocation:
- Bean এর বিভিন্ন ব্যবসায়িক মেথড ক্লায়েন্ট দ্বারা কল করা হয়। অবস্থা সংরক্ষণ করা হয় এবং পরবর্তী কলের জন্য উপলব্ধ থাকে।
- Passivate:
- যদি bean দীর্ঘ সময় ব্যবহৃত না হয় তবে এটি passivate হয়ে যায়, অর্থাৎ এর অবস্থা সেগমেন্টে সেভ হয়ে যায় যাতে এটি আবার ব্যবহার করা যেতে পারে।
- Activate:
- ক্লায়েন্ট যখন এই bean এর অবস্থা পুনরায় ব্যবহৃত করতে চায়, তখন এটি activate হয় এবং আগের অবস্থা পুনরুদ্ধার করা হয়।
- Remove (EJB removal):
- যখন remove() মেথড কল করা হয়, তখন EJB container bean টিকে ধ্বংস করে, এবং bean-এর রিসোর্স মুক্ত করে।
Stateless Session Beans Lifecycle
Stateless Session Beans অবস্থা সংরক্ষণ করে না এবং প্রতিবার ক্লায়েন্ট কলের জন্য নতুন ইনস্ট্যান্স তৈরি হয়। এর লাইফসাইকেল সাধারণত আরও সরল হয়:
- Create (EJB instantiation):
- ক্লায়েন্ট যখন bean কল করে, EJB container একটি নতুন ইনস্ট্যান্স তৈরি করে।
- Business Method Invocation:
- Bean এর ব্যবসায়িক মেথড ক্লায়েন্ট দ্বারা কল করা হয়। একাধিক ক্লায়েন্ট একই স্টেটলেস সেশন বিন ব্যবহার করতে পারে, কারণ এটি অবস্থা সংরক্ষণ করে না।
- Destroy (EJB removal):
- EJB container bean টিকে ধ্বংস করে যখন এটি আর প্রয়োজনীয় না থাকে বা ক্লায়েন্ট remove() মেথড কল করে।
৩. Message-driven Beans Lifecycle
Message-driven Beans (MDBs) সাধারণত JMS মেসেজ সার্ভিস থেকে মেসেজ গ্রহণ করতে ব্যবহৃত হয় এবং asynchronous থাকে। MDBs এর লাইফসাইকেল বেশ কিছু বিশেষ বৈশিষ্ট্য নিয়ে আসে:
- Create (MDB instantiation):
- MDB সঠিক সার্ভার অথবা মেসেজ সার্ভিস থেকে মেসেজ আসার আগে তৈরি হয় না। এটি সিস্টেমে মেসেজ রিসিভ করার জন্য একটি অ্যাক্টিভ মেসেজ সিস্টেমের সাথে সংযুক্ত থাকে।
- OnMessage Invocation:
- onMessage(Message message) মেথড কল করার মাধ্যমে মেসেজ গ্রহণ করা হয় এবং এটি মেসেজের উপর নির্দিষ্ট ব্যবসায়িক কার্যক্রম সম্পাদন করে।
- Destroy (MDB removal):
- MDB ধ্বংস হতে পারে যখন এটি আর কোনো মেসেজের জন্য অ্যাক্টিভ থাকে না বা সার্ভারে বন্ধ হয়ে যায়।
MDBs মেসেজ গ্রহণ করার জন্য অপেক্ষা করে এবং ক্লায়েন্টের সাথে কোনো স্থায়ী সম্পর্ক রাখে না, তাই এদের lifecycle সাধারণত কমপ্লেক্স হয় না।
৪. Entity Beans Lifecycle (EJB 2.x)
Entity Beans আগে EJB 2.x তে ব্যবহৃত হত, কিন্তু বর্তমানে JPA (Java Persistence API) এর মাধ্যমে Entity Beans-এর অনেক কাজ সহজ হয়েছে। তবে, Entity Beans এর lifecycle এর কিছু ধাপ ছিল:
- Create (EJB instantiation):
- ক্লায়েন্ট যখন একটি Entity Bean তৈরি করতে চায়, তখন ejbCreate() মেথড কল করা হয়। এটি ডাটাবেসে সংশ্লিষ্ট সত্তাকে তৈরি করতে সাহায্য করে।
- Load and Store:
- Entity Beans ডাটাবেসের সাথে সম্পর্কিত। ejbLoad() এবং ejbStore() মেথড ব্যবহার করে bean এবং ডাটাবেসের মধ্যে ডেটা এক্সচেঞ্জ হয়।
- Remove (EJB removal):
- Entity Beans ejbRemove() মেথড ব্যবহার করে ডাটাবেস থেকে মুছে ফেলা হয় এবং bean-টি ধ্বংস করা হয়।
বর্তমানে JPA ব্যবহৃত হয় যা Entity Beans-এর কাজ আরও সহজ এবং স্বাভাবিক করে।
৫. EJB Lifecycle Example in Eclipse (Stateful Session Bean)
Stateful Session Bean Example:
import javax.ejb.Stateful;
@Stateful
public class CounterBean implements Counter {
private int count = 0;
public void increment() {
count++;
}
public int getCount() {
return count;
}
public void reset() {
count = 0;
}
}
Lifecycle Flow:
- Create:
CounterBeanক্লায়েন্ট দ্বারা কল করার সময় তৈরি হয়। - Business Method Invocation: ক্লায়েন্ট
increment(),getCount()বাreset()মেথড কল করতে পারে। - Passivate: কিছু সময় ক্লায়েন্টের ব্যবহার না হলে bean-passivate হয়ে যেতে পারে।
- Activate: পরবর্তীতে যদি ক্লায়েন্ট আবার এই Bean ব্যবহার করতে চায়, তবে bean পুনরায় activate হয়।
- Destroy: ক্লায়েন্ট
remove()মেথড কল করলে Bean ধ্বংস হয়ে যাবে।
সারাংশ
EJB Bean Lifecycle Management হল একটি গুরুত্বপূর্ণ দিক যা EJB Beans এর সঠিক পরিচালনা, ট্রানজেকশন, নিরাপত্তা এবং কার্যকারিতা নিশ্চিত করে। EJB Beans তিনটি প্রধান প্রকারে বিভক্ত: Session Beans, Message-driven Beans, এবং Entity Beans। Stateful এবং Stateless Session Beans বিভিন্নভাবে কাজ করে, যেখানে Stateful অবস্থা সংরক্ষণ করে এবং Stateless সেশন অবস্থা রাখে না। Message-driven Beans মেসেজ গ্রহণ করে এবং Entity Beans ডাটাবেসের সাথে সম্পর্কিত থাকে। EJB container এই lifecycle-এর সমস্ত অংশ পরিচালনা করে, যা EJB Beans এর কার্যকরী লাইফসাইকেল নিশ্চিত করে।
EJB (Enterprise JavaBeans) হলো Java EE (Enterprise Edition) বা বর্তমানে Jakarta EE প্ল্যাটফর্মের একটি গুরুত্বপূর্ণ অংশ, যা মূলত সার্ভার-সাইড ব্যবসায়িক লজিক (business logic) বাস্তবায়ন করতে ব্যবহৃত হয়। EJB-এর জীবনচক্র (lifecycle) একটি নির্দিষ্ট প্রক্রিয়া অনুসরণ করে, যা EJB Bean-এর বিভিন্ন স্টেট এবং তার ইন্টারঅ্যাকশন পরিচালনা করে।
EJB-এর lifecycle দুটি প্রধান অংশে ভাগ করা যেতে পারে:
- Stateless Session Beans Lifecycle
- Stateful Session Beans Lifecycle
- Message-Driven Beans Lifecycle (MDB)
তবে এখানে আমরা মূলত Session Beans (Stateless এবং Stateful) এবং তাদের জীবন্তচক্র নিয়ে আলোচনা করব।
EJB Bean Lifecycle:
1. Stateless Session Beans Lifecycle:
Stateless Session Beans হল সেই EJB Beans যা ক্লায়েন্টের অবস্থা (state) সংরক্ষণ করে না। এর lifecycle বেশ সহজ এবং এর মধ্যে কোন স্টেটফুল তথ্য বজায় রাখা হয় না। প্রতিটি ক্লায়েন্টের জন্য stateless session bean নতুনভাবে তৈরি হয় এবং পরবর্তীতে ক্লায়েন্টের অনুরোধ শেষে ধ্বংস হয়ে যায়।
Stateless Session Beans Lifecycle:
- Create: EJB container যখন একটি Stateless Session Bean তৈরি করে, তখন এটি EJB container দ্বারা একটি proxy object রিটার্ন করে।
- Invoke: এরপর ক্লায়েন্ট থেকে যখনই কোনো মেথড কল করা হয়, তখন Stateless Bean-এর মেথডগুলো কল করা হয়। একাধিক ক্লায়েন্ট একই অবজেক্ট ব্যবহার করতে পারে।
- Destroy: যখন Stateless Session Bean এর সাথে আর কোনো ক্লায়েন্ট যোগাযোগ করে না, তখন EJB container সেই অবজেক্টটি ধ্বংস করে।
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। এখানে EJB container এই bean-কে ক্লায়েন্টের অনুরোধে পুনরায় তৈরি করবে, তবে ক্লায়েন্টের অবস্থা সংরক্ষণ করবে না।
2. Stateful Session Beans Lifecycle:
Stateful Session Beans হল EJB Beans যেগুলি ক্লায়েন্টের অবস্থা সংরক্ষণ করে। একটি Stateful Session Bean তার জীবনচক্রের মধ্যে ক্লায়েন্টের অবস্থা সংরক্ষণ করতে পারে এবং পরবর্তীতে সেই অবস্থা পুনরুদ্ধার করতে পারে।
Stateful Session Beans Lifecycle:
- Create: যখন EJB container একটি Stateful Session Bean তৈরি করে, তখন এটি একটি অবজেক্ট তৈরি করে এবং ক্লায়েন্টের অবস্থা (state) ধারণ করতে সক্ষম হয়। ক্লায়েন্টের অবস্থা সংরক্ষিত হয়।
- Invoke: এরপর, যখন ক্লায়েন্ট bean এর মেথড কল করে, Stateful Session Bean ক্লায়েন্টের অবস্থা সংরক্ষণ করতে থাকে এবং সেই অবস্থা অনুযায়ী কাজ করে।
- Passivation: যদি EJB container কিছু সময়ের জন্য Stateful Session Bean-কে ব্যবহার না করে, তবে এটি passivate করতে পারে, অর্থাৎ অবস্থা সংরক্ষণ করে, এবং কমপিউটার রিসোর্স সাশ্রয় করার জন্য মেমরি থেকে Bean কেটে রাখতে পারে।
- Activate: যখন আবার ক্লায়েন্টের কাছে ওই Bean প্রয়োজন হয়, তখন EJB container Stateful Session Bean-কে পুনরায় activate করে এবং সংরক্ষিত অবস্থা পুনরুদ্ধার করে।
- Destroy: যখন ক্লায়েন্টের কাজ শেষ হয়ে যায় এবং EJB container দেখতে পায় যে আর কোনো ক্লায়েন্ট এই Bean-টি ব্যবহার করছে না, তখন Bean-টি ধ্বংস হয়ে যায়।
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 তালিকা)।
3. Message-Driven Beans (MDB) Lifecycle:
Message-Driven Beans (MDB) EJB এর আরেক ধরনের bean, যা asynchronous messaging পরিচালনা করতে ব্যবহৃত হয়। JMS (Java Message Service) বা অন্যান্য মেসেজিং প্রোটোকল ব্যবহৃত হয়ে এই Beans মেসেজ গ্রহণ ও প্রক্রিয়া করে।
MDB Lifecycle:
- Create: MDB একটি message listener হিসেবে কাজ করে এবং এটি EJB container দ্বারা তৈরি হয়। এটি মেসেজ সার্ভিসের সাথে সংযুক্ত থাকে এবং মেসেজ গ্রহণের জন্য প্রস্তুত থাকে।
- Message Reception: ক্লায়েন্ট যখন একটি মেসেজ পাঠায়, MDB সেই মেসেজ গ্রহণ করে এবং নির্ধারিত লজিক প্রক্রিয়া শুরু করে।
- Destroy: MDB এর lifecycle মেসেজ সমাপ্তির পর শেষ হয়ে যায় এবং EJB container এর মাধ্যমে ধ্বংস করা হয়।
MDB এর উদাহরণ:
@MessageDriven
public class OrderMessageBean implements MessageListener {
public void onMessage(Message message) {
// Process the message here
}
}
এখানে @MessageDriven অ্যানোটেশনটি EJB container কে জানায় যে এটি একটি Message-Driven Bean এবং এটি মেসেজ গ্রহণ ও প্রক্রিয়া করবে।
EJB Bean Lifecycle - সারাংশ:
| EJB Type | Lifecycle Stages | State Management |
|---|---|---|
| Stateless Session Beans | 1. Create (EJB container creates a proxy object) 2. Invoke (Client invokes methods) 3. Destroy (Bean is destroyed after the client finishes work) | Does not store state |
| Stateful Session Beans | 1. Create (EJB container creates the bean and stores client state) 2. Invoke (Client invokes methods) 3. Passivate (Bean’s state is stored) 4. Activate (Bean is activated and state restored) 5. Destroy (Bean is destroyed when no longer needed) | Stores client state |
| Message-Driven Beans | 1. Create (Bean is created as a listener) 2. Message Reception (Bean processes the message) 3. Destroy (Bean is destroyed after message processing) | No state (Processes asynchronous messages) |
সারাংশ:
EJB Bean Lifecycle হল EJB Beans-এর মধ্যে create, invoke, passivate, activate, এবং destroy স্টেজের সমন্বয়, যা EJB container দ্বারা পরিচালিত হয়। Stateless Session Beans ক্লায়েন্টের অবস্থা সংরক্ষণ করে না এবং অধিক পারফরম্যান্স দেয়, যেখানে Stateful Session Beans ক্লায়েন্টের অবস্থা সংরক্ষণ করে এবং দীর্ঘকাল ধরে অবস্থান করে। Message-Driven Beans (MDB) মেসেজ প্রক্রিয়াকরণের জন্য ব্যবহৃত হয়। EJB Beans-এর জীবনচক্র তাদের ব্যবহারের ক্ষেত্রে গুরুত্বপূর্ণ, কারণ এটি তাদের ট্রানজ্যাকশন ম্যানেজমেন্ট, নিরাপত্তা এবং পারফরম্যান্স উন্নত করে।
Stateless Session Beans হল EJB (Enterprise JavaBeans) এর একটি ধরনের কম্পোনেন্ট যা কোনও ক্লায়েন্টের স্টেট (অবস্থা) সংরক্ষণ করে না। এগুলি সাধারণত প্রক্রিয়াগুলির জন্য ব্যবহৃত হয় যেখানে ক্লায়েন্টের নির্দিষ্ট অবস্থা প্রয়োজন হয় না। Stateless Session Beans ক্লায়েন্টের রিকোয়েস্ট অনুযায়ী কাজ করে এবং প্রতিটি রিকোয়েস্টে নতুন ইনস্ট্যান্স তৈরি হয়।
Eclipse IDE তে Stateless Session Bean এর lifecycle (জীবনচক্র) সম্পর্কে জানলে আপনি এর প্রক্রিয়া আরও ভালোভাবে বুঝতে পারবেন। Stateless Bean এর lifecycle এর ধাপগুলি সাধারণত EJB Container দ্বারা ম্যানেজ করা হয়, যা Stateless Bean ইনস্ট্যান্স তৈরি, পরিচালনা, এবং ধ্বংস করে।
Stateless Session Bean Lifecycle: ধাপসমূহ
Stateless Session Bean-এর lifecycle সাধারণত ৪টি প্রধান ধাপে ভাগ করা হয়:
- Bean Instantiation (Bean তৈরি)
- Post-construct Initialization (ইনিশিয়ালাইজেশন)
- Business Method Invocation (ব্যবসায়িক মেথডের কল)
- Bean Destruction (Bean ধ্বংস)
এগুলি নিচে বিস্তারিতভাবে ব্যাখ্যা করা হলো।
1. Bean Instantiation (Bean তৈরি)
Stateless Session Bean এর instantiation (বা ইনস্ট্যান্স তৈরি) হয় EJB Container দ্বারা। ক্লায়েন্ট যখন প্রথম Bean-কে কল করে, তখন EJB Container নতুন Stateless Session Bean ইনস্ট্যান্স তৈরি করে। Stateless Beans-এ কোন অবস্থান বা স্টেট সংরক্ষণ করা হয় না, তাই প্রতিটি ক্লায়েন্ট রিকোয়েস্টের জন্য একটি নতুন ইনস্ট্যান্স তৈরি হয়।
Bean Instantiation ধাপে, EJB Container এই ধরণের কাজ করে:
- Stateless Session Bean তৈরি করে।
- 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, যা add() এবং subtract() মেথড সরবরাহ করে।
2. Post-construct Initialization (ইনিশিয়ালাইজেশন)
Bean ইনস্ট্যান্স তৈরি হওয়ার পর, EJB Container Post-Construct অ্যানোটেশন বা মেথড ব্যবহার করে Bean এর ইনিশিয়ালাইজেশন কাজটি করতে পারে। এই ধাপে Bean এর প্রয়োজনীয় সেটআপ বা কনফিগারেশন সম্পন্ন হয়। তবে Stateless Beans এ Post-Construct এর ব্যবহার খুব সাধারণ নয়, কারণ তাদের মধ্যে স্টেট রাখার কোনো প্রয়োজন নেই।
EJB Container @PostConstruct অ্যানোটেশন ব্যবহার করে একটি ইনিশিয়ালাইজেশন মেথড চালাতে পারে, যা Bean এর জীবনচক্রের শুরুতে কার্যকর হয়।
উদাহরণ:
@Stateless
public class CalculatorBean implements Calculator {
@PostConstruct
public void initialize() {
// Initialization logic here (If necessary)
System.out.println("Calculator Bean Initialized");
}
@Override
public int add(int a, int b) {
return a + b;
}
}
এখানে, initialize() মেথড @PostConstruct অ্যানোটেশন দিয়ে রান হয়, যা Bean ইনস্ট্যান্স তৈরির পর কিছু ইনিশিয়াল কাজ করে।
3. Business Method Invocation (ব্যবসায়িক মেথড কল)
Business Method Invocation হল Stateless Session Bean এর সবচেয়ে গুরুত্বপূর্ণ ধাপ, যেখানে ক্লায়েন্ট Bean-কে কল করে তার ব্যবসায়িক লজিক পরিচালনা করে। Stateless Session Bean বিভিন্ন ব্যবসায়িক লজিক বাস্তবায়ন করার জন্য মেথড সরবরাহ করে এবং প্রতিটি ক্লায়েন্ট কলের জন্য নতুন মেথড ইনস্ট্যান্স তৈরি করা হয়।
EJB Container ক্লায়েন্টের অনুরোধের পরিপ্রেক্ষিতে উপযুক্ত business method কল করে, তবে এই কলের জন্য Bean-এ কোন অবস্থা সংরক্ষণ করা হয় না। Stateless Beans শুধুমাত্র একক রিকোয়েস্ট-এ কাজ করে এবং পরবর্তী রিকোয়েস্টের জন্য তাদের কোনো স্টেট থাকে না।
উদাহরণ:
@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;
}
}
এখানে, add() এবং subtract() মেথডগুলি business methods হিসেবে কাজ করে, এবং প্রতিটি রিকোয়েস্টের জন্য একটি নতুন ইনস্ট্যান্স তৈরি হয়।
4. Bean Destruction (Bean ধ্বংস)
Bean Destruction ধাপে, EJB Container Bean এর ইনস্ট্যান্স ধ্বংস করে যখন সেটি আর ব্যবহারযোগ্য থাকে না। Stateless Beans সাধারণত EJB Container দ্বারা ম্যানেজ করা হয় এবং ক্লায়েন্টের সেশন শেষ হলে বা Bean আর প্রয়োজন না থাকলে, এটি ধ্বংস করা হয়।
EJB Container Bean ধ্বংসের আগে @PreDestroy অ্যানোটেশন ব্যবহার করে কোনো পরিষ্কারকরণ (cleanup) প্রক্রিয়া পরিচালনা করতে পারে, তবে Stateless Beans এর জন্য সাধারণত এটি ব্যবহৃত হয় না।
Bean Destruction ধাপের কাজ:
- Stateless Bean শেষ হয়ে গেলে EJB Container সেই Bean এর ইনস্ট্যান্স ধ্বংস করে।
- পরবর্তী কলের জন্য একটি নতুন ইনস্ট্যান্স তৈরি করা হয়।
উদাহরণ:
@Stateless
public class CalculatorBean implements Calculator {
@PreDestroy
public void cleanup() {
// Cleanup logic here
System.out.println("Calculator Bean Destroyed");
}
@Override
public int add(int a, int b) {
return a + b;
}
}
এখানে, @PreDestroy অ্যানোটেশন দিয়ে cleanup() মেথডটি কল করা হবে যখন Bean ধ্বংস হবে।
Stateless Session Bean-এর Lifecycle Summary
| Lifecycle Step | Description |
|---|---|
| Bean Instantiation | EJB Container Bean তৈরি করে। |
| Post-construct Initialization | Optional initialization (using @PostConstruct) for any setup. |
| Business Method Invocation | ক্লায়েন্টের দ্বারা মেথড কলের মাধ্যমে ব্যবসায়িক কার্যাবলী সম্পাদন। |
| Bean Destruction | Bean ধ্বংস হয় যখন আর প্রয়োজন থাকে না (EJB Container দ্বারা)। |
সারাংশ:
Stateless Session Beans হল EJB-এর একটি গুরুত্বপূর্ণ অংশ, যা ক্লায়েন্টের স্টেট সংরক্ষণ না করে, প্রক্রিয়াগুলি সম্পাদন করে। এর জীবনচক্র ৪টি ধাপ নিয়ে গঠিত: Bean Instantiation, Post-construct Initialization, Business Method Invocation, এবং Bean Destruction। Stateless Beans দ্রুত এবং হালকা হয়, কারণ এগুলি প্রতিটি রিকোয়েস্টে নতুন ইনস্ট্যান্স তৈরি করে এবং কোনো স্টেট সঞ্চয় করে না। EJB Container Stateless Beans এর জীবিত সাইকেল ম্যানেজ করে, এবং ব্যবসায়িক লজিক সঞ্চালনে সাহায্য করে।
Stateful Session Bean হল EJB (Enterprise JavaBeans) এর একটি বিশেষ ধরনের কম্পোনেন্ট যা state (অবস্থা) সংরক্ষণ করে। এটি ক্লায়েন্টের সাথে একটি সেশনের মধ্য দিয়ে যোগাযোগ রাখে এবং একটি নির্দিষ্ট ক্লায়েন্টের অবস্থা বজায় রাখে, যতক্ষণ না সে সেশন শেষ না হয়। Stateful Session Bean সাধারণত business logic প্রক্রিয়া করতে ব্যবহৃত হয়, যেখানে ক্লায়েন্টের অবস্থা সংরক্ষণ এবং পরবর্তী অনুরোধে তার পুনরায় ব্যবহার করা হয়।
EJB Stateful Session Bean এর জীবনকাল (lifecycle) অত্যন্ত গুরুত্বপূর্ণ এবং এটি নির্দিষ্ট ধাপ অনুসরণ করে।
Stateful Session Bean Lifecycle:
Stateful Session Bean এর জীবনকাল তিনটি প্রধান ধাপে বিভক্ত: Instantiation, Activation, এবং Passivation। এই ধাপগুলি EJB container দ্বারা পরিচালিত হয় এবং Bean এর জীবনকাল সম্পন্ন হয় যখন Bean এর ব্যবহার আর প্রয়োজন হয় না।
1. Stateful Bean Lifecycle এর ধাপ:
1.1 Instantiation (Bean Instantiation)
এটি Stateful Session Bean এর জীবনকাল শুরু হওয়ার প্রথম ধাপ। এই ধাপে EJB container একটি নতুন Bean ইনস্ট্যান্স তৈরি করে যখন ক্লায়েন্ট প্রথমবার Bean ব্যবহার করতে চায়।
- বর্ণনা: Bean ইনস্ট্যান্স তৈরি করার পর, এটি EJB container তে কার্যকরীভাবে চলে আসে এবং ব্যবহারের জন্য প্রস্তুত হয়।
- উদাহরণ: ক্লায়েন্ট যখন প্রথম Stateful Bean কল করে, তখন EJB container নতুন একটি Bean ইনস্ট্যান্স তৈরি করবে।
কোড উদাহরণ (Stateful Bean Instantiation):
import javax.ejb.Stateful;
@Stateful
public class ShoppingCartBean implements ShoppingCart {
private double totalAmount = 0;
@Override
public void addItem(double price) {
totalAmount += price;
}
@Override
public double getTotalAmount() {
return totalAmount;
}
}
এখানে, ShoppingCartBean একটি Stateful Session Bean যেখানে totalAmount ফিল্ডটি ক্লায়েন্টের অবস্থা ধরে রাখে।
1.2 Activation (Bean Activation)
Activation হল সেই সময় যখন Stateful Bean এর অবস্থা সক্রিয় করা হয়, এবং এটি ক্লায়েন্টের জন্য ব্যবহারযোগ্য হয়। এটি সাধারণত তখন ঘটে যখন ক্লায়েন্ট আবার একই Bean ব্যবহার করতে চায় এবং EJB container Bean এর অবস্থা পুনরুদ্ধার করে।
- বর্ণনা: Stateful Bean ব্যবহার করার সময় EJB container Bean এর ইনস্ট্যান্সের অবস্থা পুনরুদ্ধার করে। এটি Bean কে ক্লায়েন্টের জন্য কার্যকরী করে তোলে।
- কখন ঘটে: Bean যখন আবার ব্যবহার করা হয় এবং EJB container Bean এর অবস্থা পুনরুদ্ধার করতে চায়।
উদাহরণ:
- ধরুন, একটি Shopping Cart Bean একটি ক্লায়েন্টের জন্য ক্রয়ের পরিমাণ রেকর্ড করছে। ক্লায়েন্ট পরবর্তীতে অ্যাপ্লিকেশন পুনরায় খুলে Shopping Cart কে পুনরায় ব্যবহার করার সময় এটি activation ধাপের মধ্যে আসে।
1.3 Passivation (Bean Passivation)
Passivation হল সেই প্রক্রিয়া যখন EJB container Bean এর অবস্থা (state) সংরক্ষণ করে এবং Bean টি কার্যক্রমের বাইরে চলে যায়। এই অবস্থায় Bean তৎক্ষণাৎ ব্যবহৃত হয় না এবং EJB container এটি ডেটাবেস বা অন্য কোন স্থানে সংরক্ষণ করে রাখে। পরে যখন Bean এর আবার প্রয়োজন হয়, তখন এটি পুনরায় activation ধাপে চলে আসে।
- বর্ণনা: Passivation হয় যখন Bean বর্তমানে কার্যক্ষম নয়, তবে পরবর্তীতে আবার ক্লায়েন্টের প্রয়োজন হবে।
- কখন ঘটে: যখন Bean এর সাথে কোনো ক্লায়েন্ট ইন্টারঅ্যাকশন থাকে না, তখন EJB container Bean এর অবস্থা সংরক্ষণ করে এবং পরবর্তী সময়ে পুনরায় এটি সক্রিয় হয়।
উদাহরণ:
- আপনি একটি Shopping Cart ব্যবহার করছেন যেখানে ক্রয়ের পরিমাণ সংরক্ষিত রয়েছে, এবং আপনি যখন কিছু সময়ের জন্য অ্যাপ্লিকেশনটি বন্ধ করে দেন, তখন EJB container এই Bean এর অবস্থা সংরক্ষণ করবে (passivation) এবং পরবর্তীতে যখন অ্যাপ্লিকেশনটি পুনরায় চালু হবে, তখন Bean সক্রিয় হবে (activation)।
1.4 Remove (Bean Removal)
যখন Stateful Session Bean আর ব্যবহৃত না হয় বা নির্দিষ্ট সময় পর এটি remove হয়ে যায়, তখন এর জীবনচক্র শেষ হয়। EJB container Bean এর অবস্থা পরিষ্কার করে এবং এটিকে মুছে ফেলে।
- বর্ণনা: EJB container Bean এর ইনস্ট্যান্স এবং অবস্থা মুছে ফেলে যখন এটি আর কার্যকরী নয়।
- কখন ঘটে: যখন ক্লায়েন্ট Bean এর সেশন শেষ করে বা remove কল করে।
2. EJB Stateful Session Bean Lifecycle Diagram:
+--------------------+
| Instantiation | -> Bean is created for the first time
+--------------------+
|
v
+--------------------+
| Activation | -> Bean becomes active and ready for use
+--------------------+
|
v
+--------------------+
| Passivation | -> Bean state is saved for later use
+--------------------+
|
v
+--------------------+
| Removal | -> Bean is destroyed when no longer needed
+--------------------+
3. EJB Stateful Bean Lifecycle Example:
ধরা যাক, আপনি একটি ShoppingCart Bean তৈরি করছেন যেখানে ক্রেতার পণ্য এবং মোট দাম সংরক্ষিত থাকে। Stateful Session Bean এর জীবনচক্র অনুযায়ী Bean এর অবস্থা সঠিকভাবে পরিচালিত হবে।
ShoppingCartBean Example:
import javax.ejb.Stateful;
@Stateful
public class ShoppingCartBean implements ShoppingCart {
private double totalAmount = 0;
@Override
public void addItem(double price) {
totalAmount += price; // Add item price to total
}
@Override
public double getTotalAmount() {
return totalAmount; // Return total amount of cart
}
@Override
public void removeItem(double price) {
totalAmount -= price; // Remove item price from total
}
}
ShoppingCartClient Example:
import javax.ejb.EJB;
public class ShoppingCartClient {
@EJB
private static ShoppingCart shoppingCart;
public static void main(String[] args) {
shoppingCart.addItem(100.00);
shoppingCart.addItem(50.00);
System.out.println("Total Amount: " + shoppingCart.getTotalAmount());
shoppingCart.removeItem(50.00);
System.out.println("Total Amount after removal: " + shoppingCart.getTotalAmount());
}
}
এখানে, ShoppingCartBean ক্লাসটি একটি Stateful Session Bean, যেখানে ক্লায়েন্টের অবস্থা (totalAmount) সংরক্ষিত থাকে। Bean এর জীবনচক্র অনুযায়ী, addItem এবং removeItem মেথড ক্লায়েন্টের শপিং কার্টের অবস্থার ওপর কাজ করে।
4. Stateful Session Bean এর সুবিধা এবং খারাপ দিক:
সুবিধা:
- Stateful Interaction: এটি ক্লায়েন্টের অবস্থা (state) সংরক্ষণ করতে পারে, যা দীর্ঘ সেশনের জন্য উপযুক্ত।
- Easy Client-Side Management: ক্লায়েন্টের অবস্থা এবং মেটাডেটা ম্যানেজমেন্ট সহজ হয়।
- Business Logic: এই Beans গুলি ব্যবসা লজিক সংরক্ষণে সহায়ক, কারণ এটি চলমান সেশন ধরে রাখে।
খারাপ দিক:
- Resource Intensive: Bean এর অবস্থা সংরক্ষণ করা এবং অনেক ক্লায়েন্টের জন্য এই Bean গুলির ইনস্ট্যান্স তৈরি করা অনেক বেশি রিসোর্স ব্যবহার করতে পারে।
- Less Scalable: Stateful Beans একাধিক ক্লায়েন্টের জন্য পুনরায় ব্যবহারযোগ্য নয়, যার ফলে স্কেলেবিলিটি কিছুটা সীমাবদ্ধ থাকে।
- Passivation/Activation Overhead: Passivation এবং activation এর জন্য কিছু অতিরিক্ত ওভারহেড থাকে যা পারফরম্যান্সে প্রভাব ফেলতে পারে।
সারাংশ:
Stateful Session Bean হল EJB এর একটি শক্তিশালী কম্পোনেন্ট যা ক্লায়েন্টের অবস্থা সংরক্ষণ করে এবং পরবর্তী সময় তা পুনরায় ব্যবহার করতে সক্ষম হয়। এর জীবনকাল ধাপগুলো হলো Instantiation, Activation, Passivation, এবং Removal। Stateful Beans সাধারণত ব্যবসা লজিক ব্যবস্থাপনা এবং ক্লায়েন্ট-ভিত্তিক সেশন পরিচালনা করতে ব্যবহৃত হয়। তবে, এর কিছু সীমাবদ্ধতা রয়েছে যেমন resource intensive এবং scalability issues।
Singleton Beans হল EJB (Enterprise JavaBeans) এর একটি বিশেষ ধরনের কম্পোনেন্ট যা একটি মাত্র অবজেক্ট ইনস্ট্যান্স তৈরি করে এবং পুরো অ্যাপ্লিকেশন জুড়ে এই একমাত্র অবজেক্টটি ব্যবহৃত হয়। Singleton Beans EJB 3.1 এ যোগ করা হয় এবং সাধারণত অ্যাপ্লিকেশনে একক অবস্থা (state) বা সেন্ট্রাল কনফিগারেশন পরিচালনা করার জন্য ব্যবহৃত হয়। এটি একটি thread-safe (থ্রেড সেফ) সিঙ্গেল্টন অবজেক্ট তৈরি করতে সহায়তা করে, যা অনেক ক্লায়েন্টের মধ্যে শেয়ার করা হয়।
এখানে Singleton Bean Lifecycle এবং এর ব্যবস্থাপনা নিয়ে বিস্তারিত আলোচনা করা হবে।
১. Singleton Bean Lifecycle
Singleton Bean এর জীবনচক্র (Lifecycle) অন্যান্য EJB কম্পোনেন্টের তুলনায় কিছুটা আলাদা, কারণ এটি একমাত্র অবজেক্ট হিসেবে কাজ করে এবং পুরো অ্যাপ্লিকেশন জুড়ে শেয়ার করা হয়।
১.১ Singleton Bean জীবনচক্রের ধাপগুলো:
- Bean Instantiation:
- Singleton Bean প্রথমবার যখন ক্লায়েন্টের থেকে অ্যাক্সেস করা হয়, তখন এটি ইনস্ট্যান্সিয়েট করা হয়।
- সাধারণত, একবার ইনস্ট্যান্স তৈরি হলে, এটি পুরো অ্যাপ্লিকেশন জুড়ে পুনরায় ব্যবহৃত হয়।
- PostConstruct:
- Bean ইনস্ট্যান্স তৈরি হওয়ার পর, PostConstruct অ্যানোটেশন দ্বারা চিহ্নিত একটি মেথড স্বয়ংক্রিয়ভাবে কল হয়। এখানে Bean এর প্রাথমিক কনফিগারেশন বা ইনিশিয়ালাইজেশন করা হয়।
- এটি সাধারণত সেই জায়গায় ব্যবহার করা হয় যেখানে Bean তৈরি হওয়ার পর কিছু সেটআপ বা প্রস্তুতি কাজ করতে হয় (যেমন: ডাটাবেস কানেকশন, ক্যাশিং ইত্যাদি)।
- Business Methods Invocation:
- একবার Bean তৈরি হলে, ক্লায়েন্ট যখনই এই Bean এর মেথড কল করবে, তখন Bean এর সেই একমাত্র ইনস্ট্যান্স থেকেই কাজ হবে। সকল মেথড কল একে অপরের মধ্যে শেয়ার করা হবে।
- PreDestroy:
- PreDestroy অ্যানোটেশন দ্বারা চিহ্নিত একটি মেথড যখন Bean অবজেক্ট ধ্বংস হওয়ার আগে কল হয়। এটি সাধারণত Bean ধ্বংসের আগে কোনো পরিষ্কারকরণ বা ফাইনালাইজেশন কাজ করতে ব্যবহৃত হয় (যেমন: রিসোর্স ফ্রি করা)।
- Bean Destruction:
- যখন Bean আর প্রয়োজন হয় না (অথবা অ্যাপ্লিকেশন বন্ধ হয়), তখন এটি ধ্বংস করা হয়। সেক্ষেত্রে, PreDestroy মেথড কল করা হয় এবং Bean এর ইনস্ট্যান্স মুক্তি পায়।
২. Singleton Bean এর বৈশিষ্ট্য
- Thread-safety:
- Singleton Beans সাধারণত thread-safe হতে হবে, কারণ এটি একাধিক ক্লায়েন্টের মধ্যে শেয়ার করা হয়। EJB Container এ সিঙ্গেল্টন Beans স্বয়ংক্রিয়ভাবে থ্রেড সেফ হয়। তবে, থ্রেড সেফনেস নিশ্চিত করতে ডেভেলপারকে কিছু অতিরিক্ত ব্যবস্থা নিতে হতে পারে (যেমন synchronized blocks)।
- Lifecycle Control:
- Singleton Beans এর lifecycle ক্লায়েন্টের অ্যাক্সেসের ওপর ভিত্তি করে পরিচালিত হয়। যখন প্রথম ক্লায়েন্ট একটি Singleton Bean কল করে, তখন সেই Bean ইনস্ট্যান্স তৈরি হয় এবং অ্যাপ্লিকেশন চলাকালীন সময়ে শেয়ার করা হয়।
- Bean তৈরির সময় ডিফল্টভাবে @PostConstruct মেথড কল হয় এবং অ্যাপ্লিকেশন বন্ধ হওয়ার আগে @PreDestroy কল হয়।
- Concurrency Management:
- EJB Singleton Beans @Lock অ্যানোটেশন ব্যবহার করে কনকারেন্ট অ্যাক্সেস নিয়ন্ত্রণ করতে পারে। এটি দুই ধরনের Locking সাপোর্ট করে:
- READ: একাধিক থ্রেড Bean এর রিড অপারেশন করতে পারবে।
- WRITE: একে একে শুধুমাত্র একটি থ্রেড Bean এর রাইট অপারেশন করতে পারবে।
- EJB Singleton Beans @Lock অ্যানোটেশন ব্যবহার করে কনকারেন্ট অ্যাক্সেস নিয়ন্ত্রণ করতে পারে। এটি দুই ধরনের Locking সাপোর্ট করে:
৩. Singleton Bean Example
এখানে একটি উদাহরণ দেওয়া হলো যেখানে Singleton Bean তৈরি করা হচ্ছে এবং এটি সঠিকভাবে ইন্সট্যান্সিয়েট, ইনিশিয়ালাইজ, এবং পরিষ্কার করা হচ্ছে।
৩.১ Singleton Bean Interface
import javax.ejb.Remote;
@Remote
public interface CounterBeanRemote {
public int incrementCounter();
public int getCounter();
}
এখানে একটি CounterBeanRemote ইন্টারফেস তৈরি করা হয়েছে, যা ক্লায়েন্টকে incrementCounter() এবং getCounter() মেথড ব্যবহার করতে দেয়।
৩.২ Singleton Bean Implementation
import javax.ejb.Singleton;
import javax.ejb.Lock;
import javax.ejb.LockType;
@Singleton
public class CounterBean implements CounterBeanRemote {
private int counter = 0;
@Override
@Lock(LockType.WRITE)
public int incrementCounter() {
counter++;
return counter;
}
@Override
public int getCounter() {
return counter;
}
}
এখানে, @Singleton অ্যানোটেশন দ্বারা CounterBean কে একটি Singleton Bean হিসেবে চিহ্নিত করা হয়েছে। @Lock(LockType.WRITE) ব্যবহৃত হয়েছে যাতে একে একে শুধুমাত্র একটি থ্রেড incrementCounter() মেথডে অ্যাক্সেস করতে পারে। এটি thread-safety নিশ্চিত করে।
৩.৩ Stateful Bean Client Example
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 ক্লাসটি CounterBean কে লুকআপ করে এবং তার incrementCounter() মেথড কল করে কাউন্টার ভ্যালু ইনক্রিমেন্ট করে। একবার CounterBean ইনস্ট্যান্স তৈরি হলে, ক্লায়েন্ট বারবার এই অবজেক্টটিকে ব্যবহার করতে পারে, কারণ এটি Singleton এবং অ্যাপ্লিকেশন জুড়ে শেয়ার করা হয়।
৪. Singleton Bean এর ব্যবস্থাপনা
- Singleton Bean Configuration:
- @Singleton অ্যানোটেশন ব্যবহার করে আপনি Bean কে Singleton হিসেবে চিহ্নিত করবেন। এটি নিশ্চিত করে যে EJB Container শুধুমাত্র একবার Bean ইনস্ট্যান্স করবে।
- Concurrency Control:
- @Lock অ্যানোটেশন ব্যবহার করে আপনি READ এবং WRITE লক পরিচালনা করতে পারেন। এটি thread safety এবং concurrent method calls নিয়ন্ত্রণ করতে সহায়তা করে।
- EJB Lifecycle Management:
- Singleton Bean এর lifecycle ডেভেলপারের জন্য সহজ করা হয় কারণ EJB Container স্বয়ংক্রিয়ভাবে তার জীবনচক্র পরিচালনা করে। @PostConstruct এবং @PreDestroy মেথডগুলি সঠিক সময় ব্যবহার করে রিসোর্স ম্যানেজমেন্ট নিশ্চিত করতে সহায়তা করে।
- Singleton Bean Cleanup:
- @PreDestroy অ্যানোটেশন ব্যবহার করে আপনি Bean ধ্বংসের পূর্বে কোন ক্লিনআপ কাজ বা রিসোর্স মুক্তি (যেমন: কানেকশন বন্ধ) করতে পারেন।
সারাংশ
Singleton Beans হল EJB এর একটি শক্তিশালী কম্পোনেন্ট যা একমাত্র অবজেক্ট ইনস্ট্যান্স তৈরি করে এবং পুরো অ্যাপ্লিকেশন জুড়ে শেয়ার করা হয়। এটি স্টেটফুল ম্যানেজমেন্ট, কনকারেন্সি, এবং কার্যকরী life-cycle পরিচালনা করে। @Singleton অ্যানোটেশন দ্বারা Bean তৈরি করা হয় এবং @Lock, @PostConstruct, @PreDestroy ইত্যাদি অ্যানোটেশন ব্যবহার করে এর কার্যকারিতা কাস্টমাইজ করা হয়। Singleton Beans প্রজেক্টে সেন্ট্রাল কনফিগারেশন, রিসোর্স শেয়ারিং এবং স্টেট ম্যানেজমেন্ট সহজ করে তোলে।
Read more