سؤال

لدينا خادم جافا تطبيق يعمل على عدد من أجهزة الكمبيوتر في جميع متصلا بالإنترنت ، وبعض وراء الجدران النارية.نحن بحاجة إلى بعد التحديث جرة ملفات البرامج النصية لبدء التشغيل من موقع مركزي ، مع عدم وجود ملحوظ انقطاع إلى التطبيق نفسه.

هذه العملية يجب أن يكون المراقب وغير مضمونة (أيلا يمكننا كسر التطبيق بسبب المفاجئة انقطاع الإنترنت).

في الماضي كنا قد استخدمت مجموعة متنوعة من البرامج النصية الخارجية والمرافق العامة للتعامل مع مهام مماثلة ، ولكن لأن لديهم الخاصة بهم التبعيات ، والنتيجة هي أكثر صعوبة للحفاظ على أقل المحمولة.قبل صنع شيء جديد ، أريد الحصول على بعض المدخلات من المجتمع.

هل تم العثور على حل جيد هذا بالفعل ؟ لديك أي أفكار أو اقتراحات ؟

فقط للتوضيح:هذا التطبيق هو الخادم ، ولكن ليس من أجل تطبيقات الويب (لا webapp حاويات أو الحرب الملفات هنا).انها مجرد مستقلة برنامج جافا.

هل كانت مفيدة؟

المحلول

أنت لم تحدد نوع ملقم تطبيقات - أنا ذاهب لنفترض أن كنت لا تستخدم تطبيقات الويب (كما نشر حرب بالفعل ما كنت تتحدث عن ، نادرا ما تحتاج إلى التطبيق على شبكة الإنترنت إلى سحب نوع التحديثات.إذا كنت تتحدث عن تطبيق ويب المناقشة التالية يمكن أن لا تزال سارية - عليك فقط تنفيذ إجراءات التحديث و بينغ بونغ الحرب الملف بدلا من الملفات الفردية).

قد ترغب في إلقاء نظرة على jnlp - WebStart ويستند هذا (هذا هو تطبيق عميل نشر التكنولوجيا), ولكن أنا متأكد من أنه يمكن أن تكون مصممة على إجراء التحديثات على خادم نوع التطبيق.بغض النظر ، jnlp يقوم بعمل جيد جدا توفير واصفات التي يمكن استخدامها لتحميل المطلوبة الإصدارات المطلوبة الجرار...

بعض الأفكار العامة على هذا (لدينا عدة تطبيقات في نفس دلو و تفكر في التحديث التلقائي آلية):

  1. النظر في وجود bootstrap.jar الملف الذي هو قادر على قراءة الملف jnlp وتحميل المطلوب/تحديث الجرار قبل إطلاق التطبيق.

  2. ملفات JAR يمكن يتم تحديث حتى أثناء تشغيل التطبيق (على الأقل على ويندوز هو نظام التشغيل الأكثر احتمالا أن عقد التأمين على تشغيل الملفات).يمكنك تشغيل في مشاكل إذا كنت تستخدم فئة مخصصة لوادر, أو لديك مجموعة من الجرار التي يمكن تحميلها أو تفريغها في أي وقت ، ولكن إذا قمت بإنشاء آليات لمنع هذا ، ثم الكتابة فوق الجرار ثم إعادة تشغيل التطبيق يجب أن تكون كافية للحصول على تحديث.

  3. على الرغم من أنه من الممكن استبدال الجرار ، قد ترغب في النظر في بينغ بونغ النهج الخاص بك مسار lib (إذا لم يكن لديك بالفعل الخاصة بك التطبيق قاذفة تكوين السيارات-قراءة كل جرة الملفات في مجلد lib وإضافتها إلى فئة المسار تلقائيا ، ثم هذا شيء كنت حقا لا تريد أن تفعل).هنا كيف بينغ بونغ يعمل:

التطبيق تطلق وتبدو في ليب بينغ\الإصدار.خصائص lib-بونغ\الإصدار.خصائص يحدد هو أحدث.دعنا نقول أن lib-بينغ إصدار لاحق.قاذفة البحث عن lib-بينغ*.جرة و يضيف تلك الملفات إلى CP خلال إطلاق.عند القيام بتحديث, تحميل ملفات jar إلى lib-بونغ (أو نسخ الملفات جرة من lib-بينغ إذا كنت ترغب في حفظ عرض النطاق الترددي و الجرة لم يغير في الواقع - وهذا نادرا ما يستحق كل هذا الجهد ، على الرغم من!).مرة واحدة لديك كل الجرار نسخها إلى lib-كرة الطاولة, آخر شيء عليك فعله هو إنشاء نسخة.خصائص الملف (أن طريقة توقف تحديث النتائج في جزئية مجلد lib يمكن الكشف عن تطهير).أخيرا ، يجب إعادة إطلاق التطبيق, والتمهيد تلتقط التي lib-بونغ هو المطلوب classpath.

  1. بينغ بونغ كما هو موضح أعلاه يسمح لفة مرة أخرى.إذا كنت التصميم بشكل صحيح ، يمكن أن يكون قطعة واحدة من التطبيق الخاص بك التي يمكنك اختبار هيك ومن ثم لا تتغير أبدا أن يتحقق لمعرفة ما إذا كان ينبغي الرجوع إصدار محدد.بهذه الطريقة إذا كنت لا تصل الفوضى ونشر شيء أن يكسر التطبيق, يمكنك يبطل الإصدار.هذا الجزء من التطبيق فقط يجب حذف الإصدار.خصائص الملف من سوء lib-* المجلد ، ثم إعادة إطلاقها.من المهم الحفاظ على هذا الجزء من التراب بسيطة لأنها تفشل آمنة.

  2. هل يمكن أن يكون أكثر من 2 مجلدات (بدلا من بينغ/بونغ فقط lib-yyyymmdd و تطهير جميع ولكن أحدث 5 ، على سبيل المثال).وهذا يسمح لمزيد من المتقدم (ولكن أكثر تعقيدا!) الاستعادة من الجرار.

نصائح أخرى

بالتأكيد يجب أن نلقي نظرة على أو إس جي أي ، تم إنشاؤه فقط لهذه الحالات (وخاصة بالنسبة جزءا لا يتجزأ من المنتجات) و يستخدم من قبل عدد كبير من الشركات.يمكنك تحديث جرة "حزم" إضافة أو إزالة أثناء تشغيل التطبيق.أنا لم تستخدم نفسي, لذلك أنا لا أعرف عن نوعية مفتوحة المصدر أطر/خوادم, ولكن هنا هو مجموعة من الروابط المفيدة للحصول على أنك بدأته:

http://www.osgi.org/Main/HomePage
http://www.aqute.biz/Code/Bnd
http://blog.springsource.com/2008/02/18/creating-osgi-bundles/
http://blog.springsource.com/
http://www.knopflerfish.org/
http://felix.apache.org/site/index.html

أنصح كابيسترانو متعدد نشر الخادم.في حين أنها بنيت على نشر القضبان تطبيقات رأيت أنها تستخدم بنجاح لنشر تطبيقات جافا.

الرابط:كابيسترانو 2.0 ليس فقط على القضبان

الجرار لا يمكن تعديلها من حين JVM يعمل على أعلى من ذلك ، سوف يؤدي إلى أخطاء.لقد حاولت مهام مماثلة وأفضل خطرت هو صنع نسخة من تحديث جرة الانتقال بدء السيناريو أن ننظر إلى هذه الجرة.مرة واحدة لديك تحديث جرة ، بداية الأمر والانتظار على القديم جرة إلى نهاية بعد إعطائه إشارة إلى ذلك.للأسف هذا يعني فقدان واجهة المستخدم الرسومية.... الخللحظة ولكن التسلسلية معظم الهياكل في جافا سهل الحالية واجهة المستخدم الرسومية يمكن نقلها إلى تحديث التطبيق في الواقع قبل إغلاق (بعض الأشياء قد لا تكون serializable على الرغم من!).

من الصعب جدا أن تجعل التحديث الذرية ، وخاصة إذا كان لديك أي تحديث قاعدة بيانات القيام به.

ولكن إذا كنت لا, ما يمكنك القيام به هو التأكد أولا من التطبيق الخاص بك يمكن تشغيل من مسار نسبي.هذا هو, يمكنك وضع التطبيق الخاص بك في بعض الدليل ، و كل من الملفات الهامة الموجودة بالنسبة إلى هذا الموقع ، بحيث أن الفعلية الخاصة بك موقع التثبيت ليس من المهم حقا.

بجانب تكرار التثبيت الخاص بك.الآن لديك "تشغيل" النسخة لديك النسخة "الجديدة".

تحديث "الجديد" نسخة باستخدام أي تكنولوجيا تريد (FTP ، رسينك ، ورقة الشريط ما يطفو القارب الخاص بك).

التحقق من التثبيت (اختبارية سريعة وحدة الاختبارات, كل ما تحتاجه-حتى بداية الأمر على اختبار ميناء إذا كنت ترغب في).

عندما كنت سعيدا مع تثبيت جديد أسفل الأصلي تشغيل سبيل المثال ، إعادة تسمية الدليل الأصلي (mv تطبيق application_old) ، إعادة تسمية الدليل الجديد (mv application_new التطبيق) ، والبدء مجددا.

أسفل الخاص بك يتم تقليل الوقت إلى خادم إيقاف وبدء الوقت (منذ إعادة تسمية "حرة").

لو عن طريق الصدفة كنت الكشف عن خطأ فادح ، لديك النسخة الأصلية لا تزال هناك.وقف الخادم الجديد تسميته مرة أخرى إعادة تشغيل القديمة.سريع جدا تقع مرة أخرى.

الشيء الآخر الجميل هو أن الخدمة البنية التحتية الثابتة (مثل rc الخاص بك من البرامج النصية ، وظائف كرون ، إلخ.) لأنها تشير إلى "تطبيق" دليل و لا تغيير.

ويمكن أيضا أن يتم ذلك مع لينة الروابط بدلا من تسمية الدلائل.وفي كلتا الحالتين على ما يرام.

ولكن تقنية بسيطة ، بالقرب واقية من الرصاص إذا كان التطبيق الخاص بك تتعاون.

الآن, إذا كان لديك DB التغييرات, حسنا, هذا مختلف تماما سيئة المسألة.مثالي إذا كنت يمكن أن تجعل النظام الخاص بك DB التغييرات "متوافقة" ، ثم نأمل القديم إصدار التطبيق يمكن تشغيلها على مخطط جديد ، ولكن هذا ليس ممكنا دائما.

أعتقد أنك يمكن أن الساخن-نشر ملفات JAR إذا كنت تستخدم أو إس جي أي التطبيق القائم على الخادم مثل SpringSource dm Server.لم يسبق لي استخدامه نفسي ، ولكن معرفة نوعية العامة الربيع محفظة, أنا متأكد من أنها تستحق نظرة.

نحن نستخدم الكسوف الذي تحديث نظام أو إس جي أي ، و لدينا خبرة جيدة جدا.

أوصت!

أحدث نسخة من جافا ويب ستارت يسمح بالحقن في ذاكرة التخزين المؤقت المحلية في الواقع دون استدعاء البرنامج فإنه يمكن أن تكون علامة على أنها "غير متصل".لأن ذاكرة التخزين المؤقت هو ما يستخدم استدعاء البرنامج فإنه سيتم تحديثها القادم تشغيل فقط.هذا العمل سوف تحتاج على الأرجح الجرار مع إصدار الأرقام في الاسم (على سبيل المثالour-library-2009-06-01.jar).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top