2010-01-21 15 views
12

मैं जेबॉस के लिए नया हूं, लेकिन मेरे पास वसंत-हाइबरनेट और अन्य ओपन सोर्स लाइब्रेरीज़ और पोर्टलों का उपयोग करके कई वेब एप्लिकेशन हैं, इसलिए मूल रूप से अब प्रत्येक युद्ध फ़ाइल में उन जार फ़ाइलों को शामिल किया जाता है। मैं इन जारों को एक सामान्य स्थान पर कैसे ले जाऊं ताकि मुझे इन्हें प्रत्येक युद्ध फ़ाइल में रखना न पड़े? मुझे लगता है कि स्थान server/default/lib है, लेकिन मुझे यकीन नहीं है।जेबॉस एएस 5 में साझा लाइब्रेरी कहां डालें?

इसके अलावा, WEB-INF/lib बनाम JBOSS/server/default/lib पर उन जारों को अलग करना कितना अलग है? क्या मुझे किसी भी क्लासलोडर मुद्दे का सामना करना पड़ेगा?

इसके अलावा मेरे पास Singleton जैसे स्थिर क्षेत्रों में संग्रहीत स्थिर डेटा है, क्या वे सभी WAR फ़ाइलों में साझा किए जाएंगे?

उत्तर

18

Classloading:

आप सही हैं, JBOSS/server/<configuration>/lib, या JBOSS/lib करने के लिए .jar रों डाल दिया।

जेबॉस एएस बंडल हाइबरनेट लिब के साथ आता है जिसे एएस संस्करण के साथ परीक्षण किया जाता है।

jboss-6.0.0-SNAPSHOT\server\default\conf\jboss-service.xml देखें:

<server> 
    <!-- Load all jars from the JBOSS_HOME/server/<config>/lib directory and 
     the shared JBOSS_HOME/common/lib directory. This can be restricted to 
     specific jars by specifying them in the archives attribute. 
     TODO: Move this configuration elsewhere 
    --> 
    <classpath codebase="${jboss.server.lib.url}" archives="*"/> 
    <classpath codebase="${jboss.common.lib.url}" archives="*"/> 
</server> 

यह भी देखें:

अंतर WEB-INF/lib औरके बीच:

WEB/lib में लिब्स आपके युद्ध के साथ आते हैं और केवल उस युद्ध के भीतर दिखाई देते हैं। यदि आपके पास अन्य मॉड्यूल है, उदा। ईजेबी जार, वे इससे दिखाई नहीं देंगे और आपको ClassNotFoundException मिलेगा या (यदि आपके पास एकाधिक स्थानों में कक्षा है) ClassCastException

JBOSS-AS/server/<config>/lib में लिब्स पूरे सर्वर के लिए दृश्यमान हैं, इस प्रकार सभी तैनात ऐप्स और उनके मॉड्यूल। हालांकि (आईआईआरसी) उनके पास प्राथमिकता नहीं है, इसलिए यदि आप उस lib को लाते हैं उदा। एक युद्ध में, लेकिन ईजेबी जार में नहीं, आप दो अलग-अलग संस्करणों का उपयोग कर समाप्त कर सकते हैं, जो अवांछनीय है (संभवतया उपरोक्त ClassCastException तक पहुंच जाएगा)।

कक्षा लोडिंग व्यवहार कई तरीकों से tweaked किया जा सकता है, उदाहरण के लिए देखें JBoss wiki

स्टेटिक डेटा:

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

+1

+1 मैं अपने साझा जार के लिए एक अपने समर्पित निर्देशिका पसंद करते हैं इससे इसे बनाए रखना आसान हो जाता है – stacker

0

जेबीएसएस/सर्वर/डिफ़ॉल्ट/lib ठीक काम करता है।

उस फ़ोल्डर में सभी जार जेबॉस में लोड किए जाएंगे।

0
  1. जाओ% JBOSS_HOME% \ सर्वर \ डिफ़ॉल्ट \ conf निर्देशिका
  2. ओपन फाइल jboss-service.xml
  3. टैग के तहत आप पाएंगे करने के लिए

एक नी डब्ल्यू के रूप में नीचे classpath टैग अपने स्थानीय मशीन

नोट पर sharedlib फ़ोल्डर शामिल करने के लिए: कृपया कोड आधार के लिए फ़ाइल प्रोटोकॉल शामिल करना सुनिश्चित करें

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