Guice-এ Request Scope এমন একটি scope যা HTTP রিকোয়েস্টের লাইফসাইকেল ধরে থাকে। অর্থাৎ, যখন একটি HTTP রিকোয়েস্ট আসে, তখন একটি নির্দিষ্ট ডিপেনডেন্সি একটি নতুন ইনস্ট্যান্স হিসেবে তৈরি হবে এবং সেই রিকোয়েস্টের শেষ পর্যন্ত সেই ইনস্ট্যান্স থাকবে। এই ধরনের স্কোপ সাধারণত web applications-এ ব্যবহৃত হয় যেখানে আপনাকে রিকোয়েস্ট স্পেসিফিক ডেটা বা অবজেক্টগুলো ম্যানেজ করতে হয়।
Guice নেটিভলি Request Scope সাপোর্ট করে না, তবে Guice এর Servlet Integration ব্যবহার করে আপনি সহজেই রিকোয়েস্ট স্কোপ সেট আপ করতে পারেন। এটি Servlet Filter বা Guice এর RequestScope ক্লাসের মাধ্যমে করা যায়।
এখানে Web Applications-এ Request Scope ব্যবহার করার জন্য একটি উদাহরণ দেওয়া হলো।
Request Scope ব্যবহারের ধাপসমূহ
- Guice Servlet Module যোগ করা
- Request Scope ক্লাস তৈরি করা
- Guice-এ Request Scope কনফিগার করা
- Request Scope ডিপেনডেন্সি ব্যবহার করা
1. Guice Servlet Module যোগ করা
প্রথমে, আপনাকে Guice Servlet Module ইন্টিগ্রেট করতে হবে। এর মাধ্যমে Guice-এর Request Scope কার্যকরী হবে।
Maven Dependency:
Guice Servlet Integration এর জন্য, Maven পম ফাইলে নিচের ডিপেনডেন্সি যোগ করুন:
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice-servlet</artifactId>
<version>5.1.0</version>
</dependency>
Web.xml কনফিগারেশন:
এছাড়াও, web.xml ফাইলে Guice Servlet এর জন্য কনফিগারেশন করতে হবে।
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<servlet>
<servlet-name>guiceServlet</servlet-name>
<servlet-class>com.google.inject.servlet.GuiceServletContextListener</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>guiceServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
2. Request Scope ক্লাস তৈরি করা
Guice-এ Request Scope সেটআপ করতে, প্রথমে একটি ক্লাস তৈরি করতে হবে যা রিকোয়েস্ট স্পেসিফিক ডেটা ধারন করবে।
RequestScopedService.java:
import com.google.inject.Inject;
import com.google.inject.Provider;
public class RequestScopedService {
private final String requestId;
@Inject
public RequestScopedService() {
// Set some unique identifier for the request
this.requestId = "Request ID: " + System.nanoTime();
}
public String getRequestId() {
return requestId;
}
}
এখানে RequestScopedService ক্লাসটি রিকোয়েস্টের সময় একটি ইউনিক আইডেন্টিফায়ার তৈরি করবে।
3. Guice-এ Request Scope কনফিগার করা
এখন, RequestScope কনফিগার করতে হবে Guice মডিউলে। আমরা Guice Servlet API-র মাধ্যমে RequestScope অ্যাকটিভেট করব।
AppModule.java:
import com.google.inject.AbstractModule;
import com.google.inject.servlet.RequestScoped;
public class AppModule extends AbstractModule {
@Override
protected void configure() {
// Request Scoped Service bind
bind(RequestScopedService.class).in(RequestScoped.class);
}
}
এখানে RequestScopedService-কে RequestScoped হিসেবে ব্যন্ড করা হয়েছে।
4. Request Scope ডিপেনডেন্সি ব্যবহার করা
এখন, আপনি Guice Servlet ব্যবহার করে একটি HTTP রিকোয়েস্টে RequestScopedService ইনজেক্ট করতে পারেন।
Example Servlet:
import com.google.inject.Inject;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class MyServlet extends HttpServlet {
private final RequestScopedService requestScopedService;
@Inject
public MyServlet(RequestScopedService requestScopedService) {
this.requestScopedService = requestScopedService;
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
// Retrieve and display the request scoped service data
resp.getWriter().write("Request Scoped ID: " + requestScopedService.getRequestId());
}
}
web.xml (Servlet Mapping):
<servlet>
<servlet-name>myServlet</servlet-name>
<servlet-class>com.example.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>myServlet</servlet-name>
<url-pattern>/requestScopeExample</url-pattern>
</servlet-mapping>
এখন আপনি /requestScopeExample URL এ HTTP GET রিকোয়েস্ট করলে, রিকোয়েস্ট স্কোপের মধ্যে RequestScopedService ইনস্ট্যান্স তৈরি হবে এবং এর requestId রিটার্ন হবে।
5. Request Scope এর কাজের দৃষ্টান্ত
যখন আপনি বিভিন্ন রিকোয়েস্টে /requestScopeExample URL এ রিকোয়েস্ট পাঠাবেন, প্রতিটি রিকোয়েস্টের জন্য একটি আলাদা requestId তৈরি হবে। প্রতিটি রিকোয়েস্টের জন্য আলাদা ইনস্ট্যান্স তৈরি হওয়ায়, রিকোয়েস্টের মধ্যে ডেটা সংরক্ষিত থাকে এবং অন্যান্য রিকোয়েস্টের সাথে মিলিত হয় না।
Output:
Request Scoped ID: Request ID: 1234567890123
এটি নিশ্চিত করে যে, প্রতিটি রিকোয়েস্টে RequestScopedService এর একটি নতুন ইনস্ট্যান্স তৈরি হবে এবং তার নিজস্ব requestId থাকবে।
Guice-এ Request Scope ব্যবহারের মাধ্যমে আপনি সহজেই HTTP রিকোয়েস্টের লাইফসাইকেল নির্ধারণ করে রিকোয়েস্ট স্পেসিফিক ডিপেনডেন্সি ম্যানেজ করতে পারেন। Guice Servlet Integration-এর মাধ্যমে আপনি RequestScoped অ্যানোটেশন ব্যবহার করে HTTP রিকোয়েস্টের জন্য আলাদা ইনস্ট্যান্স তৈরি করতে পারেন, যা আপনার ওয়েব অ্যাপ্লিকেশনের ডেটা এবং অবজেক্ট ম্যানেজমেন্টে অনেক সাহায্য করে।
Read more