كيف قمنا بالترحيل من Oracle JDK و Java Web Start إلى اعتماد و OpenJDK و OpenWebStart



يوم جيد.

في هذه المقالة ، سأتحدث عن "التحديث" في الشركة التي أعمل بها لأداة مثل Java Web Start ، أو بالأحرى ، حول استبدالها بحل بديل مفتوح المصدر.

عن نفسي


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

مشكلة


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

لذا ، كانت الشركة موجودة بسعادة لفترة طويلة ، حتى أعلنت Oracle أنها توقفت عن دعم الإصدار 8 من جافا ، وتم وضع علامة على تقنية Java Web Start على أنها موقوفة ، وقررت قطعها بدءًا من جافا 11. وهذا يعني أنه لا يزال هناك المزيد من تطبيقات JWS ، والتي لا يزال هناك الكثير منها لن تتلقى بما في ذلك تحديثات الأمان. بالطبع ، قلة من الناس يمكن أن يتقبلوا هذا. يعتقد أيضًا أن المتحمسين من Karakun قرروا كتابة بديلهم لـ JWS.

في شركتنا ، منذ بعض الوقت ، بدأوا في إعادة كتابة التطبيق باستخدام Spring boot للواجهة الخلفية و React للواجهة الأمامية ، لكن العملية ليست سريعة ، ولا توجد تحديثات الآن.

ابحث عن حل


لذلك واجه فريق التطوير مسألة إيجاد حلول بديلة. بشكل عام ، يجدر الاعتراف بأن هناك أكثر من حل للمشكلة. في البداية ، اختار المهندسون المعماريون حلين GetDown ونفس OpenWebStart . في وقت اتخاذ القرار الأولي ، وقع الاختيار على الخيار الأول ، نظرًا لأن OpenWebStart لم يتم إصداره حتى تحت الإصدار الأول (لم تكن هناك سوى بعض التطورات والخطط).

كل من الحلول له إيجابياته وسلبياته ، لكن الشركة قررت عدم انتظار إصدار OpenWebStart والبدء في تنفيذ دليل على المفهوم القائم على GetDown.

بعد قضاء أسبوعين ، تعامل أحد المطورين مع المهمة وأدركنا أنه ، من حيث المبدأ ، يمكننا تنفيذ حل كامل يلبي متطلباتنا من خلال قضاء المزيد من الوقت.

وفي الوقت نفسه ، وصلت مهام عاجلة أخرى وتشتت فريق التطوير عن الانتقال من مرحلة PoC إلى التنفيذ الكامل لاستبدال Java Web Start.

المواعيد النهائية


عاش الجميع بسعادة حتى أدركت الإدارة أن الوقت قد حان للانتهاء بالفعل وباستبدال Java Web Start. حتى هذه اللحظة ، لم أكن مشتركًا في هذا المشروع ، ولكن هنا ربطوني أيضًا.
أولاً ، قررت البحث عن معلومات حول حلول لمشكلتنا مرة أخرى. لذلك دعونا نقول الحل من الصفر. وهكذا ، اكتشفت وجود OpenWebStart. لقد اختبرت ذلك محليًا ، واجهت بعض المشكلات (ثم واجهنا مشاكل أخرى أيضًا) وقمت بحلها. نتيجة لذلك ، أحب الجميع الحل. وغني عن القول أن الإدارة أحببتها بشكل خاص لأنها لن تضطر إلى قضاء بعض الوقت في التطوير ، كما هو الحال مع GetDown. ولكن في النهاية ، قضينا بعض الوقت في جعل نظامنا يعمل مع OpenWebStart.

معلومات سريعة عن OpenWebStart


يعتمد OpenWebStart على تطبيق آخر لـ Java Web Start - IcedTea-Web ومواصفات JNLP JSR-56 . في وقت كتابة هذا التقرير ، كان المشروع موجودًا في الإصدار 1.1.4 ويخطط لتنفيذ الميزات الرئيسية لـ Java Web Start (يمكن ملاحظة التقدم هنا ).
لا أرى فائدة من سرد جميع الإعدادات الممكنة ، فقد يستغرق الأمر وقتًا طويلاً جدًا.

هنا فقط بعض منهم:

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

ميزات استخدام OpenWebStart والمشاكل التي واجهناها


قم بتثبيت OpenWebStart


تثبيت OpenWebStart بسيط للغاية. يكفي تنزيل ملف التثبيت لنظامك الأساسي على موقع الويب واتباع تعليمات المثبت.

ولكن هذا سوء الحظ. في حالتنا ، يبلغ عدد المستخدمين حوالي 10000 عميل ، ويجب على كل خدمة دعم لشركتنا تثبيت هذه الأداة. تم العثور على الحل بسرعة كبيرة: يتوفر ما يسمى بتثبيت الخلفية.

تحتاج إلى تحميل ملف التثبيت على كل جهاز كمبيوتر وتشغيل أمر خاص (ولهذا تمتلك الشركة بالفعل أداة):

OpenWebStart_windows_Setup.exe -q -varfile response.varfile

، حيث response.varfile هو ملف يحتوي على بعض الإعدادات التي يمكن للمُثبِّت تعيينها مسبقًا. على سبيل المثال ، المجلد الذي سيتم فيه تثبيت OpenWebStart ، وبعض المجلدات الأخرى.

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



لقد وجدنا في الإعدادات أنه يمكنك تحديد عنوان URL الذي سيأخذ OpenWebStart منه ملف الإعدادات ، حيث يمكنك تحديد عنوان URL إلى JRE الذي نحتاجه. ويمكن تحديد عنوان URL نفسه مع ملف الإعدادات في response.varfile المذكور أعلاه (وهذا هو مدى تعقيده).

ملف إعدادات JSON نفسه مع إصدارات مختلفة من JRE على النحو التالي .

في الإعدادات ، يمكنك أيضًا تحديد إصدار ومورد JRE ، في حالة تحديد العديد من JREs في ملف JSON. أشرنا إلى ملف واحد فقط وحمّلنا ملف JSON وأرشفته باستخدام JRE الذي نحتاجه في مجموعة Amazon S3.

بعد الاختبار ، وجدنا أنه مع إصدار JRE الذي قمنا بتنزيله ، لا يبدأ التطبيق ... اتضح أن Java لدينا بنية مختلفة قليلاً في الأرشيف. قمنا بتحضير نص برمجي دفعة أعاد بناء هيكل أرشيف JRE.

اعتقدنا "حسنًا ، الآن كل شيء سيعمل بشكل جيد".

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

سوء الحظ لا يأتي وحده


ولكن كما يحدث عادة ، لم نقتصر على مشكلة واحدة.

تطبيقنا ، دعنا نقول ، ميزة واحدة. في الواقع هناك اثنان منهم. تطبيق واحد (ملف jnlp واحد) يبدأ تطبيق ثاني (jnlp الثاني). وفي هذه الحالة ، لم يبدأ التطبيق الثاني. في السجلات ، يمكنك أن ترى أن التطبيقات عالقة في طريق مسدود. من أثر التسلل ، أصبح من الواضح أن السبب هو آلية التسجيل الداخلي لـ OpenWebStart.

تم حل المشكلة عن طريق تعطيل التسجيل الداخلي لـ OpenWebStart. بالطبع ، بقيت سجلات تطبيقاتنا قيد التشغيل.



تم إيقاف تشغيل هذه الإعدادات أيضًا في ملف response.varfile ، الذي يتم استخدامه أثناء التثبيت في الخلفية.

والآن ، بعد التغلب على هذه العوائق وبعض العوائق الأخرى (لست مضطرًا إلى ذكر الجميع بالفعل) ، تمكنا من إطلاق تطبيقنا ، الذي يخضع حاليًا للاختبار قبل إصداره إلى المنتج. كما اختبرنا ، تمت ترقية إصدار OpenWebStart من 1.1.1 إلى 1.1.4. من التغييرات الملحوظة أضيفت القدرة على الظهور لأول مرة عن بعد.



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

ملاحظة: جميع الصور مأخوذة من موقع OpenWebStart الرسمي .

Source: https://habr.com/ru/post/undefined/


All Articles