2012-05-16 11 views
10

मेरी वेब सेवा किसी जेबॉस ऐप सर्वर या वेबस्पेयर ऐप सर्वर पर चलती है। उन दोनों के लिए मुझे इंस्टेंस नाम जानने की जरूरत है, क्योंकि जब्स के लिए मैं System.getProperty("jboss.server.name"), का उपयोग कर सकता हूं लेकिन मैं वेबस्पेयर के लिए क्या उपयोग कर सकता हूं? मैं WebSphere विशेष तरीकों का उपयोग नहीं कर सकते, मैं System.propertiesकिसी वेबस्पेयर ऐप सर्वर का उदाहरण नाम प्राप्त करना

धन्यवाद

उत्तर

7

कॉल करने की आवश्यकता यह मंच तटस्थ रखने के लिए आप Websphere सर्वर के लिए एक JVM तर्क के रूप में एक चर सेट कर सकते हैं (प्रत्येक नोड अगर के लिए एक इसके क्लस्टर)। Websphere 7 के लिए, आप व्यवस्थापक कंसोल में निम्नलिखित मिल जाएगा ...

Servers > Server Types > Websphere application servers > [your cluster node] > 
    > Java and Process Management > Process Definition > Java Virtual Machine > 
    > Generic JVM arguments 

और इस तरह एक चर जोड़ने ...

-DServerName=serverNodeA 

फिर आप के रूप में अपने कोड में मूल्य पहुँच सकते हैं। ..

String serverName = System.getproperty("ServerName"); 

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

3

ब्रैड द्वारा सुझाए गए दृष्टिकोण अच्छे हैं लेकिन मैं इसे अलग-अलग कर दूंगा।

सर्वर जेवीएम की कस्टम प्रॉपर्टी में, मैं एक संपत्ति सर्वर-नाम जोड़ूंगा और इसके मान को WAS_SERVER_NAME के ​​रूप में निर्दिष्ट करूंगा।

यहां इस बात के लिए रोटी टुकड़ा है: -> -> प्रक्रिया परिभाषा -

सर्वर> जावा वर्चुअल मशीन> कस्टम गुण

एक नया एक wiht कहना मूल्य $ के साथ सर्वर नाम {WAS_SERVER_NAME}

जोड़े

प्रत्येक WAS सर्वर इंस्टेंस में यह वेबस्पेर वैरिएबल सर्वर इंस्टेंस के नाम पर सेट है। आपको टाइपो (या यहां समान त्रुटियां) बनाने के बारे में चिंता करने की आवश्यकता नहीं है और यह दृष्टिकोण सभी WAS सर्वर के लिए काम करता है।

आप टेम्पलेट के रूप में सेट किए गए मानों के साथ एक सर्वर बना सकते हैं और जब आप कोई नया सर्वर बनाते हैं, तो ये हमेशा आपके लिए मौजूद होते हैं।

HTH

9

मैं एक वातावरण चर के रूप में सर्वर का नाम निर्दिष्ट करने के साथ सहमत (Manglu के स्पर्श भी ठीक रहेगा)। चर्चा पूरी करने के लिए, यहां बताया गया है कि आप रनटाइम के माध्यम से इंस्टेंस नाम कैसे प्राप्त करते हैं (यह एपीआई हाल के संस्करणों में बहिष्कृत है लेकिन अभी भी उपयोग में है);

import com.ibm.websphere.runtime.ServerName; 

System.out.println("Display name: " + ServerName.getDisplayName()); 
System.out.println("Full name: " + ServerName.getFullName()); 

नमूना उत्पादन की तरह

प्रदर्शन नाम होगा: server1
पूरा नाम: was7host01Node01Cell \ was7host01Node01 \ server1

+0

मैंने समाधान की कोशिश की, और यह अच्छी तरह से काम करता है। – Stony

+0

बिल्कुल मुझे क्या चाहिए। एक जादू की तरह काम करता है। –

6

kurtcebe समाधान अच्छी तरह से काम करता है। मेवेन का उपयोग करने वालों के लिए, आप आसानी से अपने प्रोजेक्ट में जार नहीं प्राप्त कर पाएंगे। इस वजह से, class.forname का उपयोग करें ...

try { 
    Class<?> c = Class.forName("com.ibm.websphere.runtime.ServerName"); 
    LOGGER.debug("Class found" + c); 
    Method m = c.getMethod("getFullName", new Class<?>[0]); 
    LOGGER.debug("Method found" + m); 
    Object o = m.invoke(DeliveryServiceUtils.class, new Object[0]); 
    LOGGER.debug("Method invoked, response is " + o); 
    processName = o.toString(); 
} 
catch (Exception ex) { 
    processName = "unknown - " + ex.getClass().getName() + ": " + ex.getMessage(); 
} 
13

कम से कम वेबस्फेयर के लिए एक विकल्प, जेएनडीआई पेड़ में इसे देखना है।

InitialContext ic = new javax.naming.InitialContext(); 
String serverName = ic.lookup("servername").toString(); 

इस तरह से मैं कुछ भी कॉन्फ़िगर करने के लिए की जरूरत नहीं है WebSphere बांधता है के रूप में यह मेरे लिए जानकारी: यह मैं क्या उपयोग है।

सेल और नोड नाम को "इस नोड/सेल/सेलनाम" और "यह नोड/नोडनाम" का उपयोग करके भी पुनर्प्राप्त किया जा सकता है। क्लस्टर में कुछ उपयोगी है।

+0

यह मेरे लिए भी काम करता है! – Stony

+0

ग्रेट, कृपया ऊपर उठाना न भूलें :) – IsidroGH

+0

इससे मुझे बहुत सिरदर्द बचाया गया क्योंकि मैं प्रत्येक वेबपैप के लिए एक JVM पैरामीटर में नहीं भेजना चाहता था। +1 –

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