केवल और केवल यदि आपके POJO HttpServletRequest
रूप ही धागा में चल रहा है में चल रहा है, तो आप ThreadLocal<T>
की मदद से इस लक्ष्य को हासिल करने में सक्षम होंगे।
निम्नलिखित वर्ग बनाएँ:
public final class YourContext implements AutoCloseable {
private static ThreadLocal<YourContext> instance = new ThreadLocal<>();
private HttpServletRequest request;
private HttpServletResponse response;
private YourContext(HttpServletRequest request, HttpServletResponse response) {
this.request = request;
this.response = response;
}
public static YourContext create(HttpServletRequest request, HttpServletResponse response) {
YourContext context = new YourContext(request, response);
instance.set(context);
return context;
}
public static YourContext getCurrentInstance() {
return instance.get();
}
@Override
public void close() {
instance.remove();
}
public HttpServletRequest getRequest() {
return request;
}
public HttpSession getSession() {
return request.getSession();
}
public ServletContext getServletContext() {
return request.getServletContext();
}
// ... (add if necessary more methods here which return/delegate the request/response).
}
लागू javax.servlet.Filter
जो doFilter()
विधि में निम्नलिखित करता है और ब्याज है, उदा के url-pattern
पर मैप किया गया है /*
या आपके फ्रंट कंट्रोलर सर्वलेट के servlet-name
पर।
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws ServletException, IOException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
try (YourContext context = YourContext.create(request, response)) {
chain.doFilter(request, response);
}
}
प्रयास-संसाधन-संसाधन विवरण के महत्व पर ध्यान दें। यह गारंटी देता है कि फ़िल्टर ने अपना काम पूरा करने के बाद YourContext#close()
कहा जाएगा और ThreadLocal
संसाधन साफ़ कर दिया जाएगा। अन्यथा किसी अन्य HTTP अनुरोध के लिए पुनर्नवीनीकरण करते समय थ्रेड अभी भी इसमें शामिल होगा।
और यहाँ कैसे आप POJO में इसका इस्तेमाल कर सकते हैं:
YourContext context = YourContext.getCurrentInstance();
HttpSession session = context.getSession();
यह सब मूल रूप से भी कैसे औसत MVC ढांचे के Context
वस्तुओं काम करता है, JSF के FacesContext
और विकेट में से एक की तरह है।
ने कहा कि, क्या आपने CDI पर देखा है? शायद सीडीआई-प्रबंधित कलाकृतियों को बनाना आसान है ताकि आप उन्हें एक-दूसरे में @Inject
कर सकें।
क्या आप अपनी समस्या पर थोड़ा सा विस्तार कर सकते हैं? – Sid
अपनी समस्या का बेहतर वर्णन करें। स्पष्ट रूप से आपके पास एक वेब एप्लिकेशन है जो डेटा में हेरफेर कर रहा है। ऐसा प्रतीत होता है कि आपको इसे स्टोर करने की आवश्यकता है और फिर उसे वेब एप्लिकेशन के बाहरी संदर्भित करना होगा। – DwB
ठीक ऊपर संपादन देखें, धन्यवाद। – TheWolf