JavaServer Faces (JSF) অ্যাপ্লিকেশনে Managed Beans হল এমন JavaBeans, যেগুলো JSF কনটেইনার দ্বারা পরিচালিত হয় এবং বিভিন্ন স্কোপে (Request, Session, Application) ব্যবহার করা হয়। Managed Bean একটি গুরুত্বপূর্ণ উপাদান, কারণ এটি UI (User Interface) এবং মডেল (Model) এর মধ্যে ডেটা এবং ব্যবসায়িক লজিকের সেতু হিসেবে কাজ করে।
Managed Bean এর Lifecycle
Managed Bean এর lifecycle হল সেই প্রক্রিয়া, যার মাধ্যমে JSF কনটেইনার Managed Bean তৈরি, ব্যবস্থাপনা এবং ধ্বংস করে। এই লাইফসাইকেলটি সাধারণত তিনটি মূল পর্যায়ে বিভক্ত:
- Bean Instantiation (ইনস্ট্যান্সিয়েশন):
- যখন প্রথমবার একটি Managed Bean প্রয়োজন হয়, তখন JSF কনটেইনার সেটি তৈরি করে।
- এটি
@ManagedBeanঅ্যানোটেশন বা@Namedঅ্যানোটেশন দ্বারা চিহ্নিত হয়।
- Dependency Injection (ডিপেনডেন্সি ইনজেকশন):
- JSF কনটেইনার Managed Bean তে ইনজেকশন করে প্রয়োজনে অন্যান্য কম্পোনেন্ট (যেমন, অন্যান্য Managed Beans বা সার্ভিস ক্লাস) যুক্ত করে।
- Method Invocation (মেথড কল):
- Managed Bean-এর মধ্যে ডিফাইন করা মেথডগুলি (যেমন, একশন মেথড) কল করা হয়, বিশেষ করে UI কম্পোনেন্টের মাধ্যমে ইনপুট গ্রহণ করার পর।
- Destroy (ধ্বংস):
- Managed Bean এর লাইফসাইকেল শেষ হলে, কনটেইনার এটি ধ্বংস করে, বিশেষ করে যখন সংশ্লিষ্ট স্কোপ শেষ হয় (যেমন, request scope বা session scope)।
Managed Bean এর Scope
Managed Beans বিভিন্ন scope তে কাজ করে, যা তাদের জীবনের সময়কাল এবং অ্যাপ্লিকেশনের মধ্যে অবস্থান নির্ধারণ করে। JSF তে Managed Bean এর প্রধান স্কোপগুলো হল: Request, Session, এবং Application স্কোপ।
১. Request Scope (অনুরোধ স্কোপ)
Request Scope এ থাকা Managed Bean শুধুমাত্র একটি HTTP অনুরোধের জন্য জীবিত থাকে। এই স্কোপে থাকা Bean ব্যবহারকারীর ইনপুট গ্রহণ করে এবং শুধুমাত্র একটি HTTP রিকোয়েস্ট প্রসেস করার পর ধ্বংস হয়ে যায়। এটি ব্যবহারকারী প্রতিটি নতুন পেজ রিকোয়েস্টের জন্য নতুন একটি Bean তৈরি করবে।
ব্যবহার:
- সাধারণত ফর্ম ভ্যালিডেশন বা ইনপুট গ্রহণের জন্য ব্যবহৃত হয়।
- এক পৃষ্ঠার থেকে অন্য পৃষ্ঠায় যাওয়ার সময় ডেটা ধরে রাখা হয় না।
উদাহরণ:
@ManagedBean
@RequestScoped
public class UserBean {
private String name;
// Getter and Setter
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
এখানে, UserBean একটি অনুরোধের জন্য তৈরি হবে এবং রিকোয়েস্ট শেষ হলে এটি ধ্বংস হয়ে যাবে।
২. Session Scope (সেশন স্কোপ)
Session Scope এ থাকা Managed Bean ব্যবহারকারীর HTTP সেশন এর মধ্যে স্থায়ী থাকে। যখন একজন ব্যবহারকারী একটি সেশন শুরু করেন, তখন সেই সেশনের সব পৃষ্ঠার জন্য Bean ব্যবহার করা যাবে, এবং ব্যবহারকারী সেশনটি শেষ না হওয়া পর্যন্ত এই Bean জীবিত থাকবে।
ব্যবহার:
- লগইন তথ্য, ব্যবহারকারীর পছন্দ এবং অন্যান্য সেশন-ভিত্তিক ডেটা সংরক্ষণে ব্যবহৃত হয়।
- যখন ব্যবহারকারী একটি নতুন পেজ বা ফর্মে কাজ করবে, তখন তার প্রাসঙ্গিক তথ্য মুছে ফেলা হবে না।
উদাহরণ:
@ManagedBean
@SessionScoped
public class UserSessionBean {
private String username;
// Getter and Setter
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
এখানে, UserSessionBean ব্যবহারকারী সেশন চলাকালীন সময়ে জীবিত থাকবে এবং সেশন শেষ হলে ধ্বংস হয়ে যাবে।
৩. Application Scope (অ্যাপ্লিকেশন স্কোপ)
Application Scope এ থাকা Managed Bean অ্যাপ্লিকেশন শুরু থেকে শেষ হওয়া পর্যন্ত জীবিত থাকে। এটি সাধারণত গ্লোবাল ডেটা এবং অ্যাপ্লিকেশনের মধ্যে শেয়ার করা ডেটা সংরক্ষণের জন্য ব্যবহৃত হয়।
ব্যবহার:
- অ্যাপ্লিকেশনের জেনেরাল কনফিগারেশন, সার্ভিস বা স্ট্যাটিক ডেটা সংরক্ষণে ব্যবহৃত হয়।
- এটি সব ব্যবহারকারীর জন্য সাধারণ এবং সার্ভারের মধ্যে শেয়ার করা ডেটা ধারণ করে।
উদাহরণ:
@ManagedBean
@ApplicationScoped
public class AppConfigBean {
private String appName = "JSF Demo App";
// Getter and Setter
public String getAppName() {
return appName;
}
public void setAppName(String appName) {
this.appName = appName;
}
}
এখানে, AppConfigBean অ্যাপ্লিকেশন চলাকালীন সময়ে জীবিত থাকবে এবং অ্যাপ্লিকেশন বন্ধ না হওয়া পর্যন্ত এটি ধ্বংস হবে না।
Managed Bean এর Scoped Example
ধরা যাক, একটি Managed Bean UserBean রয়েছে যা বিভিন্ন স্কোপে ব্যবহৃত হচ্ছে। এখানে দেখানো হচ্ছে যে, Request, Session, এবং Application স্কোপে Bean কিভাবে কাজ করে:
@ManagedBean
@RequestScoped
public class UserBean {
private String name;
// Getter and Setter
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
UI (JSF পেজ):
<h:form>
<h:outputLabel for="username" value="Username:" />
<h:inputText id="username" value="#{userBean.name}" />
<h:commandButton value="Submit" action="#{userBean.submit}" />
</h:form>
Managed Bean with Session Scope Example:
@ManagedBean
@SessionScoped
public class UserSessionBean {
private String username;
// Getter and Setter
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
সারাংশ
JSF তে Managed Bean এর লাইফসাইকেল এবং স্কোপ বুঝে ডেভেলপাররা একটি অ্যাপ্লিকেশন তৈরি করতে পারেন যেখানে ডেটা সঠিকভাবে সংরক্ষিত এবং পরিচালিত হয়। Request, Session, এবং Application স্কোপ ব্যবহারের মাধ্যমে ডেভেলপাররা ডেটা এবং অবজেক্টের সঠিক জীবনকাল এবং অ্যাক্সেস নিয়ন্ত্রণ করতে পারেন, যা অ্যাপ্লিকেশনটির কার্যকারিতা এবং ব্যবহারকারীর অভিজ্ঞতাকে উন্নত করে।
Read more