2011-11-27 13 views
26

जेबॉस-एएस-7.0.एक्स स्टैंडअलोन परिनियोजन में तृतीय पक्ष जेएआर लोड करने का सबसे अच्छा अभ्यास क्या है?जेबॉस एएस 7 स्टैंडअलोन परिनियोजन में तीसरे पक्ष के जार लोड करने के लिए सर्वश्रेष्ठ अभ्यास?

मैं कोशिश की है:

  1. अपने आप module.xml desriptor के साथ एक स्वतंत्र मॉड्यूल के रूप में प्रत्येक जार की तैनाती;
  2. एक वेब की वेब-आईएनएफ/lib निर्देशिका में JAR को तैनात करना;
  3. और कई WARs में साझा किए गए किसी भी JARs के लिए foo.ear/lib निर्देशिका।

ऊपर दृष्टिकोण के लिए स्पष्ट लाभ 1. ऊपर अपर्याप्त 2 पर तैनाती पर कम स्मृति पदचिह्न है और दृष्टिकोण 3. हालांकि यह निर्भर करता है कि प्रत्येक निर्भरता के रूप में एक जार को स्पष्ट रूप से होना जरूरी है मॉड्यूल.एक्सएमएल में परिभाषित किया गया है जो बड़ी संख्या में तृतीय पक्ष पुस्तकालयों के साथ बहुत ही प्रबल नहीं लगता है।

+0

मैं जेबीएसएस 7 में माइग्रेट करने की कोशिश कर रहा हूं और कक्षा पथ प्रविष्टि त्रुटि प्राप्त कर रहा हूं, उदाहरण के लिए। "क्लास-पथ संदर्भ के लिए वैध जार को इंगित नहीं करता है" - ऐसा लगता है जैसे आपने हल किया/इस तरह की त्रुटि का सामना नहीं किया। यह शायद जेबॉस 7 कक्षा लोडिंग के साथ कुछ करने के लिए है, कुछ लोगों को मेरे जैसा ही समस्या है लेकिन कोई समाधान नहीं - क्या आपको कोई विचार है? –

+0

आपकी समस्या की तरह लगता है या तो आपकी मॉड्यूल.एक्सएमएल फ़ाइल में है (यदि आप अपने जेएआर को मॉड्यूल के रूप में लोड कर रहे हैं) या आपकी जेबॉस-डीप्लोमेंट-स्ट्रक्चर.एक्सएमएल फाइल। आपको स्थिर पुस्तकालय JAR का संदर्भ देने का सबसे अच्छा तरीका उन्हें मॉड्यूल निर्देशिका की उप निर्देशिका में रखना है। यदि आप "org.foo.bar.FooBar" का संदर्भ देने का प्रयास कर रहे हैं; आपकी FooBarJar.jar फ़ाइल में कक्षा तब आपकी निर्देशिका संरचना "JBOSS_HOME/मॉड्यूल/संगठन/foo/bar/main/FooBarJar.jar" बनना चाहती है और आपको अपना "JBOSS_HOME/मॉड्यूल/संगठन/foo/bar/main शामिल करना होगा /modle.xml "फ़ाइल को जार में मैपिंग को परिभाषित करने के लिए और किसी भी निर्भरता के लिए फ़ाइल हो सकती है ... – travega

+1

... (contd।) आपका मॉड्यूल।एक्सएमएल फाइल इस तरह दिखेगी: "<मॉड्यूल xmlns =" ​​urn: jboss: मॉड्यूल: 1.0 "name =" org.foo.bar "> <संसाधन-रूट पथ =" FooBarJar.jar "/> <निर्भरता> "। फिर आप अपने मॉड्यूल संदर्भ को अपनी jboss-deploment-struct.xml फ़ाइल में जोड़ सकते हैं जो आपके WAR की वेब-आईएनएफ निर्देशिका में बैठता है। यह कुछ चीज़ों को इस तरह दिखेगा: "<मॉड्यूल नाम =" com.ehive.api.domain "सेवाएं =" निर्यात "/>" ... – travega

उत्तर

16

छोटी निर्भरताओं के लिए जो तैनाती के लिए निजी हैं, WEB-INF/lib में .war में रखें, यही वह है। यदि आप मेवेन का उपयोग कर रहे हैं जो < संकलन/> स्कोप में किसी भी चीज़ के लिए बहुत अधिक स्वचालित और पारदर्शी होना चाहिए।

बड़ा, जटिल निर्भरता या निर्भरता है कि कई एप्लिकेशन के बीच साझा किया जाएगा के लिए, विकल्प (4) का उपयोग करें:

तैनात प्रत्येक तार्किक पुस्तकालय एक मॉड्यूल के रूप ("OpenJPA" या "log4j" की तरह), सहित अपने एपीआई और इम्प्ल जार और किसी भी निर्भरता JARs जो पहले से ही अन्य AS7 मॉड्यूल द्वारा प्रदान नहीं की गई हैं। यदि पहले से ही एक मॉड्यूल आपके मॉड्यूल में एक जेएआर जोड़ने के बजाय उस पर निर्भरता जोड़ता है। यदि कई अलग-अलग पुस्तकालय कुछ सामान्य निर्भरताओं को साझा करते हैं, तो उन्हें मॉड्यूल में विभाजित करें और उन्हें module.xml में मॉड्यूल निर्भरता के रूप में जोड़ें।

का उपयोग अपनी तैनाती .war/.ear/जो भी मॉड्यूल पर निर्भरता घोषित करता है यदि यह स्वत: पता नहीं है और स्वत: लोड नहीं किया गया है।

मुझे यह एक मध्यम से कम परेशानी दृष्टिकोण होने लगता है जो अच्छी तरह से काम करता है। तैनाती के अंदर WEB-INF/lib में सब कुछ डंप करने से अधिक परेशानी है, जो जावा ईई मानक चीज है। यह redeploys गति करता है और यह कक्षा/संस्करण संघर्ष को कम करके बहुत से तैनाती/परीक्षण समय बचाता है।

आप मेवेन और मेवेन-निर्भरता-प्लगइन का उपयोग कर सकते हैं जो पहले से ही संक्रमित निर्भरताओं के साथ मॉड्यूल का उत्पादन करने के लिए कर सकते हैं यदि आप कुछ काम करने के इच्छुक हैं। आप module I wrote for EclipseLink integration in AS 7 में इसका एक उदाहरण देख सकते हैं। जब भी संभव हो मैं एएस 7 मॉड्यूल के निर्माण को स्वचालित करता हूं।

+0

क्लस्टर (डोमेन) वातावरण में, क्या आप अपने मॉड्यूल को .war या अन्य कंटेनर में पैकेज कर सकते हैं और इसे डोमेन-नियंत्रक से सभी दासों पर तैनात कर सकते हैं? या, क्या आप मॉड्यूल को मैन्युअल रूप से प्रत्येक slavedirectory/मॉड्यूल/... में कॉपी करते हैं? – Gregor

+0

@ ग्रेगोर मैंने क्लस्टर मोड का उपयोग नहीं किया है, इसलिए मुझे नहीं पता। मुझे संदेह है कि आपको शायद मैन्युअल रूप से प्रतिलिपि बनाना है, लेकिन यह दो साल हो गया है क्योंकि मैंने जेबॉस एएस और जावा ईई (शुक्रिया) के साथ कुछ भी किया है। क्षमा करें मैं मदद नहीं कर सकता। एक नया प्रश्न पोस्ट करने और संदर्भ के लिए इसे वापस जोड़ने का प्रयास करें। –

+0

@ ग्रेगोर आपको डोमेन मोड के लिए वर्कअराउंड मिला। मेरा डोमेन मॉड्यूल को फिर से शुरू करने पर लोड नहीं करता है – Aadam

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