حدد ما إذا كان رمز التشغيل على وقت تشغيل محرك التطبيق (Java)

StackOverflow https://stackoverflow.com/questions/4140747

  •  30-09-2019
  •  | 
  •  

سؤال

كيف يمكن للمرء أن يحدد ما إذا كانت بعض التعليمات البرمجية (سماء الخدمة أو فئة بسيطة) تعمل على وقت تشغيل محرك تطبيق Google (JAVA) بحيث يمكن للمرء أن يقرر ما إذا كان سيتم استخدام المكتبات المحددة لمحرك التطبيق أم لا؟ هل هناك معرف EnviRoment الذي يمكن الاعتماد عليه لهذا؟

لا يوجد حل صحيح

نصائح أخرى

يمكنك التحقق من com.google.appengine.runtime.version منشأه:

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

إذا تم تعيينه ، فهو محرك التطبيق.

لكنني سأفكر في استخدام أهداف بناء منفصلة بدلاً من ذلك ، لتجنب النفقات العامة في وقت التشغيل.

على غرار ما كتبه @Reza ، ولكن نظافة بعض الشيء:

استعمال SystemProperty.environment.value() للحصول على "إنتاج"عند التشغيل على محرك التطبيق ، و"تطوير"عند التشغيل في خادم التطوير.

كما قال Matthew Flaschen ، هناك خصائص نظام يمكنك التحقق منها لتحديد ما إذا كانت GAE موجودة أم لا. هذا الرابط يعطي التفاصيل.

إذا ذهبت إلى هذا الطريق ، فيجب إنشاء تطبيقك بحيث لا يكون للرمز الرئيسي تبعيات ثابتة على فئات GAE ؛ IE لا توجد واردات أو إشارات أخرى إلى حزم وفئات GAE في الكود (أسماء فئة GAE ، إلخ في حرفية السلسلة). يجب عزل جميع التبعيات على الكود الذي يتم تحميله باستخدام Class.forName(String) بعد تحديد ما إذا كان GAE موجودًا أم لا.

هذا يمثل النفقات العامة غير التافهة:

  • من المحتمل أن ينتهي بك الأمر بواجهة محول إضافية و (على الأقل) تطبيقين لحالات GAE وغير الجيبية.
  • لقد حصلت على النفقات العامة (الثانوية) في وقت التشغيل لتحميل الفئة ذات الصلة ديناميكيًا عند بدء التشغيل ، والاتصال بواجهة المحول.
  • ملف الجرة الخاص بك هو أكبر بكثير نتيجة لذلك.
  • عليك الآن اختبار على منصتين.

من ناحية أخرى ، لديك ميزة محتملة تتمثل في وجود جرة واحدة تعمل في كل من السياقات GAE وغير الجيبية.

كما هو موضح هنا يمكنك التحقق من الخاصية التالية:

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

environment هو "إنتاج" عند التشغيل على محرك التطبيق ، و "التطوير" عند التشغيل في خادم التطوير.

لم أر أي حل آمن من النوع هنا ، هنا هو:

if (SystemProperty.environment.value() == SystemProperty.Environment.Value.Production) {
    // The app is running on App Engine...
}

هناك طريقة أخرى للقيام بذلك أيضًا. يتم شرح ذلك جيدًا في وثائق Gaevfs حول كيفية كتابة التعليمات البرمجية المحمولة: http://code.google.com/p/gaevfs/wiki/applicationportability

يهمك السطر التالي:

boolean isGoogleAppEngine = getServletContext().getServerInfo().contains( "Google" );
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top