2010-11-10 8 views
7

पर कोड चल रहा है या नहीं, यह कैसे पहचान सकता है कि Google App Engine रन-टाइम (जावा) पर कुछ कोड (एक सर्व-लेट या एक साधारण वर्ग) चल रहा है या नहीं, ताकि कोई यह तय कर सके कि कोई ऐप इंजन के विशिष्ट पुस्तकालयों का उपयोग करने के लिए या नहीं? क्या इसके लिए कुछ विश्वसनीय रनटाइम पर्यावरण आईडी है?पहचानें कि क्या ऐप इंजन रनटाइम (जावा)

+0

संभावित डुप्लिकेट [कैसे जावा एप्लिकेशन इंजन में जाँच करने के लिए अगर हम विकास कार्य केंद्र पर हैं] (http://stackoverflow.com/ प्रश्न/1574637/कैसे-टू-चेक-इन-जावा-ऐप-इंजन-अगर-हम-विकास-कार्य-वर्कस्टेशन) –

उत्तर

4

आप देख सकते हैं com.google.appengine.runtime.version संपत्ति:

String appEngineVersion = System.getProperty("com.google.appengine.runtime.version"); 

यह सेट है, तो यह App इंजन है।

लेकिन मैं रनटाइम ओवरहेड से बचने के लिए अलग-अलग निर्माण लक्ष्यों का उपयोग करने पर विचार करता हूं।

+1

उत्तर के लिए बहुत बहुत धन्यवाद। मेरे पास 2 मामलों के लिए 2 अलग-अलग कार्यान्वयन उप-वर्ग हैं और मुझे लगता है कि अलग-अलग बिल्डों की आवश्यकता के लिए वे काफी छोटे हैं (दोनों में कुल आकार में 200 आकार)। – nsegae

1

@Matthew Flaschen के रूप में, सिस्टम गुण हैं जिन्हें आप यह निर्धारित करने के लिए जांच सकते हैं कि GAE मौजूद है या नहीं। This link विवरण देता है।

यदि आप इस मार्ग पर जाते हैं, तो आपके आवेदन को बनाने की आवश्यकता है ताकि मुख्य कोड में जीएई कक्षाओं पर कोई स्थिर निर्भरता न हो; यानी कोड में जीएई पैकेज और कक्षाओं के लिए कोई आयात या अन्य संदर्भ नहीं (स्ट्रिंग लिटल में जीएई कक्षा के नाम आदि)। सभी निर्भरताओं को कोड के लिए अलग किया जाना चाहिए जो Class.forName(String) का उपयोग करके लोड हो जाता है जब आपने यह निर्धारित किया है कि GAE मौजूद है या नहीं।

  • आप शायद एक अतिरिक्त एडाप्टर इंटरफेस के साथ खत्म हो जाएगा और (कम से कम) दो GAE और गैर GAE मामलों के लिए कार्यान्वयन:

    यह एक गैर तुच्छ भूमि के ऊपर का प्रतिनिधित्व करता है।

  • आपको स्टार्टअप पर प्रासंगिक वर्ग को गतिशील रूप से लोड करने और एडाप्टर इंटरफ़ेस के माध्यम से कॉल करने के लिए (मामूली) रनटाइम ओवरहेड प्राप्त हुए हैं।
  • आपकी जेएआर फ़ाइल परिणामस्वरूप बहुत बड़ी है।
  • अब आपको दो प्लेटफार्मों पर परीक्षण करना होगा।

दूसरी तरफ, आपके पास एक जेएआर होने का संभावित लाभ है जो जीएई और गैर-जीएई संदर्भ दोनों में काम करता है।

0

यह करने का एक और तरीका भी है। http://code.google.com/p/gaevfs/wiki/ApplicationPortability

आप की रुचि का

निम्नलिखित पंक्ति है:: इस पोर्टेबल कोड लिखने के लिए कैसे पर gaevfs के दस्तावेज में अच्छी तरह से समझाया गया है

boolean isGoogleAppEngine = getServletContext().getServerInfo().contains("Google"); 
1

के रूप में समझाया here आप निम्नलिखित संपत्ति की जाँच कर सकते हैं:

String environment = System.getProperty(
    "com.google.appengine.runtime.environment") 

environment ऐप इंजन पर चलते समय "उत्पादन" है, और विकास सर्वर में चलते समय "विकास" है।

2

@Reza क्या लिखा है के समान है, लेकिन थोड़ा क्लीनर:

उपयोग SystemProperty.environment.value() पाने के लिए "उत्पादन" जब App Engine और "विकास" पर चलने के दौरान विकास सर्वर में चल रहा है।

1

मैं यहाँ इसलिए यहाँ कोई प्रकार सुरक्षित समाधान देखा है:

if (SystemProperty.environment.value() == SystemProperty.Environment.Value.Production) { 
    // The app is running on App Engine... 
} 
की
संबंधित मुद्दे