2010-07-16 8 views
7

हम एक जेएसपी वेब एप्लिकेशन बना रहे हैं, जो अपाचे फेलिक्स ओएसजीआई कंटेनर के अंदर चलता है (वेब ​​ऐप स्वयं ओएसजीआई बंडल है)। अब, हमें निम्नलिखित समस्या का सामना करना पड़ रहा है:जेएसपी: टीएलडी को बंडलों से कैसे लोड करें?

जेएसपी 2.0 स्पेक के अनुसार, टीएलडी (टैगलिब डिस्क्रिप्टर) को अब वेब ऐप्स वेब-इनफ़ फ़ोल्डर के अंदर रहने की आवश्यकता नहीं है, लेकिन सीधे टैगलिब के जार मेटा- आईएनएफ फ़ोल्डर यह टैगलिब जार आमतौर पर वेब ऐप्स WEB-INF/lib फ़ोल्डर के अंदर रहते हैं, लेकिन क्योंकि वे ओएसजीआई बंडल हैं, वे फ़ेलिक्स द्वारा लोड किए जाते हैं।

टैगलिब की ओएसजीआई जानकारी में, हम सभी आवश्यक पैकेज आयात करते हैं। वहाँ कोई भी जानता है कि कैसे लोडलेट ओएसजीआई बंडलों के अंदर टीएलडी की तलाश करने के लिए सर्वलेट को कैसे बताना है?

आपकी मदद के लिए धन्यवाद!

+0

क्या जेएसपी कंटेनर ओएसजीआई पर्यावरण के बाहर लॉन्च किया गया है या यह एक बंडल है? –

+0

यह एक बंडल है। हम ओपीएस 4 जे पैक्स वेब (http://wiki.ops4j.org/display/paxweb/Pax+Web) – Basil

उत्तर

3

Pax won't find your TLDs, वे एक बंडल अपने webapp से अलग कर रहे हैं, तो:

टैग Libs

के लिए अपने टीएलडी फ़ाइलों काम कर रहा होगा में पहुंच योग्य होना करने के लिए अपने कस्टम टैग libs प्राप्त करने के लिए अपने "विशेष" स्थानों में बंडल: अपने बंडल-क्लासपाथ प्रकट प्रवेश द्वारा संदर्भित किसी भी जार में

  • सभी TLD फ़ाइलों
  • +०१२३५१६४१० अपने बंडल जार में वेब INF निर्देशिका या वेब-INF के उप निर्देशिका में
  • सभी TLD फ़ाइलों

कृपया ध्यान दें कि आपके आयातित संकुल को नहीं खोजा जाएगा (यह हो सकता है कि इस समर्थन पर बाद में जोड़ दिया जाएगा)

मुझे स्ट्रैट्स-आधारित सिस्टम में यह समस्या आ रही है जहां मैं एकाधिक वेबैप बंडलों के बीच एक ओएसजीआई-फीड स्ट्रूट्स बंडल साझा करता हूं। वेबपैस में जेएसपी हैं जिन्हें स्ट्रेट्स टैगलिब की आवश्यकता होती है।

एक थोड़ा hackish वैकल्पिक हल अपने वेब ऐप्लिकेशन की META-INF निर्देशिका में टीएलडी डालने और webapp बंडल आयात आवश्यक Struts पैकेज (या, यदि आप Struts का उपयोग नहीं करते, जो कुछ भी कक्षाएं बनाने है (यह प्रतियां हर जगह टीएलडी क्योंकि) टैग को संसाधित करें)। इसे मैवेन के साथ स्वचालित किया जा सकता है:

<plugin> 
     <!-- 
     Extract the TLD file from the Struts bundle you are using 
     and place it in src/main/resources/META-INF of your webapp's 
     project directory during generate-resources. This will make 
     the file end up in the appropriate place in the resulting WAR 
     --> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-dependency-plugin</artifactId> 
     <executions> 
     <execution> 
      <id>extract-tld</id> 
      <phase>generate-resources</phase> 
      <goals> 
      <goal>unpack</goal> 
      </goals> 
      <configuration> 
      <artifactItems> 
       <artifactItem> 
       <groupId>org.apache.struts</groupId> 
       <artifactId>struts2-core</artifactId> 
       <version>${struts.version}</version> 
       <outputDirectory>src/main/resources</outputDirectory> 
       <includes>META-INF/struts-tags.tld</includes> 
       </artifactItem> 
      </artifactItems> 
      </configuration> 
     </execution> 
     </executions> 
    </plugin> 
    <plugin> 
     <!-- 
     Add the required Manifest headers using the maven-bundle-plugin 
     --> 
     <groupId>org.apache.felix</groupId> 
     <artifactId>maven-bundle-plugin</artifactId> 
     <configuration> 
     <!-- ... --> 
     <instructions> 
      <!-- ... --> 
      <Import-Package>[...],org.apache.struts2.views.jsp</Import-Package> 
     <!-- ... --> 
     </instructions> 
     </configuration> 
    </plugin> 
+0

हनो का उपयोग कर रहे हैं, आपके अच्छे समझाए जाने और उपयोगी उत्तर के लिए धन्यवाद। मैं अपने पर्यावरण में अपने 'हैक' का प्रयास करूंगा। वैसे भी, मुझे अभी भी आशा है कि "यह समर्थन बाद में जोड़ा जाएगा" जैसा कि ओपीएस 4 जे दस्तावेज़ में बताया गया है। – Basil

+1

संस्करण 1.1.0 के रूप में पैक्स वेब आयातित बंडलों में भी टीएलडी की खोज कर रहा है - यही वह है जो मैं सपना देख रहा था :-) – Basil

0

सामान्यतः, ओएसजीआई और जावा ईई पुस्तकालयों को एकीकृत करना मुश्किल है। नक्सो सीएमएस के लोग सीम फ्रेमवर्क और ओएसजीआई को एकीकृत करने में कामयाब रहे, इसलिए मुझे लगता है कि उनके विचारों का उपयोग करके, आप जेएसपी टीएलडी और ओएसजीआई को और भी आसानी से एकीकृत कर सकते हैं। बस Nuxeo डाउनलोड करें और इसके स्रोत कोड का विश्लेषण करें: http://www.nuxeo.org/xwiki/bin/view/Main/

हालांकि ओएसजीआई और जावा ईई को एकीकृत करना सामान्य रूप से कठिन है। क्या आपको वास्तव में ओएसजीआई रनटाइम एकीकरण की आवश्यकता है। शायद मेवेन संकलन-समय एकीकरण आपके लिए पर्याप्त होगा? बहुत से लोग मैवेन और इसी तरह के टूल्स को संकलन-समय ओएसजीआई के रूप में देखते हैं।

संबंधित मुद्दे