2012-11-16 9 views
8

का इंजेक्शन मैं ejb 3 का उपयोग कर रहा हूं और @ इंजेक्ट HttpServletRequest को इंजेक्ट करने का प्रयास कर रहा हूं, लेकिन तैनाती करते समय मुझे अपवाद होता है।HttpServletRequest

कोड:

@Inject private HttpServletRequest httpRequest; 

अपवाद:

org.jboss.weld.exceptions.DeploymentException: WELD-001408 Unsatisfied dependencies for type [HttpServletRequest] with qualifiers [@Default] at injection point [[field] @Inject private com.kmware.ttk.highway.beans.session.UserSessionBean.httpRequest] 

मुझे लगता है कि के साथ क्या कर सकता है?

उत्तर

17

एचटीपीएसर्लेट रिवेस्ट का जीवन चक्र ईजेबी/वेब कंटेनर द्वारा प्रबंधित किया जाता है, न कि सीडीआई कंटेनर। इंजेक्ट करने का प्रयास करने से मुद्दों का कारण बनता है क्योंकि इंटरफ़ेस के आम तौर पर कई कार्यान्वयन होते हैं, और आपके सीडीआई कंटेनर में निर्णय लेने के लिए पर्याप्त जानकारी नहीं होती है जिस पर इंजेक्शन लगाने के लिए कार्यान्वयन किया जाता है। यहां तक ​​कि यदि आपने सफलतापूर्वक इसका उदाहरण इंजेक्शन दिया है, तो यह ईजेबी कंटेनर द्वारा प्रबंधित किए जाने वाले समान उदाहरण के समान होगा।

अनुरोध की एक ठीक से प्रबंधित उदाहरण प्राप्त करने के लिए, के बजाय ऐसा करते हैं:

@Context 
private HttpServletRequest httpRequest; 
+2

आपका मतलब है @ javax.ws.rs.core.Context? –

+1

@ किरीलबाजारोव - हाँ, उपयोग करने के लिए टिप्पणियां हैं। – Perception

+0

@ किरीलबाजारोव - क्या इससे आपकी समस्या हल हो गई? यदि ऐसा है तो इस उत्तर को अपवित्र/स्वीकार करने के लिए स्वतंत्र महसूस करें। धन्यवाद। – Perception

7

यदि आपके आश्रित एक JAX-आरएस (शोकहारा) वर्ग तो ऊपर जवाब ध्यान दें है। दूसरी ओर, यदि आप निर्भरता इंजेक्शन की एक और जटिल व्यवस्था प्राप्त कर चुके हैं तो सवाल निश्चित रूप से मान्य है।

यह क्षमता सीडीआई 1.1 विनिर्देश (जेएसआर -346) में जोड़ा गया है जो बदले में नए जावा ईई 7 विनिर्देश में जोड़ा गया है। दूसरे शब्दों में, जावा एंटरप्राइज़ एप्लिकेशन सर्वर की नवीनतम श्रेणी इसे संभालने में सक्षम होगी।

इस बीच, यदि आपको कुछ अनुरोध स्कोप निर्भरताओं को प्रबंधित करने में सक्षम होना आवश्यक है, तो शब्द को वास्तविक HttpServletRequest जानकारी तक पहुंच की आवश्यकता है, तो आप अपने दृष्टिकोण का उपयोग कर सकते हैं और JBoss Solder टूल का उपयोग कर सकते हैं। (यदि वेब साइट निष्क्रिय दिखती है तो घबराओ मत, इस तथ्य का तथ्य यह है कि काम आधिकारिक सीडीआई 1.1 spec कार्यान्वयन - यानी "वेल्ड 2" में स्थानांतरित हो गया है- इसलिए वे अब सोल्डर पर काम नहीं कर रहे हैं। लेकिन यह अभी भी है पूरी तरह से उपयुक्त CDI 1.0।) के लिए

Maven निर्भरता होगा

<dependency> 
    <groupId>org.jboss.solder</groupId> 
    <artifactId>solder-api</artifactId> 
    <version>3.2.0.Final</version> 
    <type>jar</type> 
    <scope>compile</scope> 
</dependency> 
<dependency> 
    <groupId>org.jboss.solder</groupId> 
    <artifactId>solder-impl</artifactId> 
    <version>3.2.0.Final</version> 
    <type>jar</type> 
    <scope>compile</scope> 
</dependency> 
संबंधित मुद्दे