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 এর সুবিধা হলো এটি প্রতিটি ক্লায়েন্টের জন্য আলাদা অবস্থা সংরক্ষণ করে এবং ক্লায়েন্টের দীর্ঘমেয়াদী ইন্টারঅ্যাকশনের জন্য উপযুক্ত।
Read more