IBM Bob

تحديث Java: جعل ترقيات المؤسسات قابلة للتحقيق

قم بترقية تطبيقات Java المؤسسية من الجمود إلى الحداثة باستخدام workflows موجَّهة وagentic.

تحديث Java: جعل ترقيات المؤسسات قابلة للتحقيق

الكتّاب

Jay TalekarBrian Taylor

تاريخ النشر

الفئة

announcement

مشاركة

تحديث Java: جعل ترقيات المؤسسات قابلة للتحقيق

ادخل إلى أي مؤسسة كبيرة — بنك أو شركة طيران أو شركة اتصالات — وستجد Java تقوم بالأعباء الثقيلة غالباً. أنظمة المصارف الأساسية ومسارات كشف الاحتيال وإدارة الطلبات ومهام الدُّفعات الليلية التي تُسوّي ملايين المعاملات قبل الفجر. إنها تعمل وتتوسّع، وهذا بالضبط سبب استمرار الكثير منها في العمل على Java 8 أو أقدم.

العمل ليس مرادفاً للصحة. الـ frameworks تعتمد على إصدارات لم تعد تتلقّى تصحيحات أمنية. المؤلّفون الأصليون رحلوا منذ زمن. "لا تلمسه، فهو يعمل" تحجّرت كمبدأ معماري. والفجوة تتّسع: السجلات والفئات المختومة ومطابقة الأنماط والـ virtual threads ومجمّعات G1/ZGC وتحسين الوعي بالحاويات والبدء الأسرع كلّها تقع على الجانب الآخر من ترقية لا أحد يريد جدولتها.

هذه المقالة تتناول سدّ هذه الفجوة. تغطّي لماذا تتعثّر هذه التطبيقات، ثم تستعرض القدرات الخمس في Premium Package for Java — ترقيات إصدار JDK، وإعادة المنصة إلى Liberty، وتحديث واجهة المستخدم، وتوليد اختبارات الوحدة، ومعالجة الثغرات الأمنية — وكيف تقسم كل منها العمل بين الأتمتة الحتمية والذكاء الاصطناعي. تختتم بما يحتاجه مستودعك لتحقيق أقصى استفادة منها، وكيفية الحصول على الوصول، وكيفية البدء.

لماذا يتخلّف هذا الكمّ من تطبيقات Java عقداً كاملاً

إن كان التحديث واضح الفائدة، لماذا تبدو كثير من تطبيقات Java المؤسسية متجمّدة حول 2014؟ الأسباب هيكلية: جاذبية تنظيمية ومخاطر هندسية حقيقية.

  • نموّ عضوي لا نموّ مُصمَّم. نمت هذه الأنظمة ميزةً فميزة، استحواذاً فاستحواذ. تراكمت طبقات الكود فوق طبقات أقدم، كُتبت كل منها في ظل مواعيد نهائية واتفاقيات مختلفة. ما ترثه اليوم يشبه الترسّبات الجيولوجية: قرارات اتّخذتها عشرات الفرق على مدى عقد.
  • المهندسون الذين كتبوا الوحدات الأساسية رحلوا، وذهبت المعرفة الضمنية معهم. ما بقي هو توثيق متناثر وبعض المهندسين الكبار الذين "يتذكّرون كيف تعمل تلك الوحدة إلى حدٍّ ما".
  • ترقية Java تعني مراجعة التبعيات وترقية الـ frameworks (Spring وHibernate وترحيل namespace Jakarta EE) وإزالة واجهات APIs المهملة وإعادة التحقق عبر كل بيئة — شهور من الجهد وميزانية حقيقية وتكلفة فرصة حقيقية، يصعب تبريرها حين النظام يعمل أصلاً.
  • حتى قفزة Java 8 → 17 أو 21 يمكنها الكشف عن تعارضات نظام الوحدات وواجهات APIs داخلية أُزيلت (sun.misc.Unsafe) وتحذيرات reflection تتحوّل إلى أخطاء صارمة وتغييرات طفيفة في سلوك garbage-collector. ترقية الإصدار على الورق تتحوّل إلى تحقيق متعدد الأسابيع في الواقع.
  • دورات الانحدار طويلة. مجموعات الاختبار الضخمة — وحدات وتكامل وأداء وUAT وأحياناً موافقات يدوية — تعني أن ترقية واحدة يمكنها إطلاق أسابيع من الاختبار قبل الشحن.
  • تحت كل ذلك: الخوف من كسر ما يعمل. حين يُحرّك تطبيق ملايين الدولارات يومياً، تكون تكلفة نشر سيئ أضخم بكثير من تكلفة عدم الترقية، لذا تنزلق المحادثة حول الترقية إلى الربع القادم. والربع الذي يليه.

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

Premium Package for Java

Premium Package for Java مجموعة من خمسة workflows لتحديث Java المؤسسية. كل منها مبني على نفس تقسيم العمل: دع الأتمتة الحتمية تؤدّي العمل المتوقّع والميكانيكي، ودع الذكاء الاصطناعي يتعامل مع القرارات السياقية التي لا تستطيع الوصفات ترميزها.

محرّكات قواعد مثل OpenRewrite موثوقة في إعادة البناء الميكانيكية عبر آلاف الملفات. الذكاء الاصطناعي أفضل في الأجزاء الفوضوية — تفسير أخطاء البناء، والتفكير في منطق الأعمال، والاختيار بين المقايضات. Bob ينسّق الاثنَين في workflow تدريجي مع إنسان يوافق على الخطوات الحاسمة.

الخبرة الكامنة وراءه مهمّة هنا. صاغ الـ workflows مهندسون من IBM وRed Hat بنوا مجمّعات JIT وشحنوا WebSphere وOpen Liberty وساعدوا في ريادة Quarkus وساهموا في OpenJDK وJakarta EE وMicroProfile. الأدوات تُرمّز كيف تتعامل تلك الفرق مع النقل — معرفة لا يستطيع نموذج استعادتها من الكود أمامه.

إليك كيف يتوزّع العمل عبر القدرات الخمس.

القدرة الأولى: ترقيات إصدار JDK — Java 8 إلى 11 أو 17 أو 21 أو 25

ترقية JDK هي أكثر مهام التحديث شيوعاً والأكثر استهانةً بها. يتعامل معها Bob كرحلة متعددة المراحل مدفوعة بالأدلة لا كأمر واحد.

  • استخبارات المشروع أوّلاً. يحلّل Bob أداة البناء (Maven أو Gradle) وهيكل الوحدات وإصدار Java الحالي وحجم الـ framework، ثم يقترح مسارات ترقية قابلة للتطبيق (8→17، 8→21، مع أو بدون Jakarta EE)، مع تقييم صعوبة وتحديات تقنية متوقّعة لكل منها.
  • للهدف المختار، تتعامل وصفات OpenRewrite المنتقاة مع التحويلات الميكانيكية بأمان وعلى نطاق واسع.
  • الوصفات توصلك إلى جزء من الطريق؛ في الواقع 40–50%. الباقي — تعارضات التبعيات الغريبة، وواجهات APIs الداخلية المُزالة، وتعطّلات خاصة بالمكتبة — هنا تتدخّل حلقة agentic. يُجمّع Bob المشروع ويُحلّل سجلات بناء Maven/Gradle ويُجمّع الاستثناءات حسب السبب الجذري ويطلب من الذكاء الاصطناعي إصلاحات محدّدة، وحدة بوحدة.
  • ضمانات تحترم القصد. يُعطى الذكاء الاصطناعي تعليمات بعدم التبديل بصمت بين namespace هاي javax وjakarta، وعدم تعليق الكود أو نقل الملفات "لجعله يُجمَّع"، وطلب موافقة صريحة قبل أي تغيير في package أو تبعية.

تحصل على ترقية سريعة حيث يمكن أتمتتها وحذرة حيث لا يمكن، مع سجل تدقيق كامل في النهاية.

القدرة الثانية: إعادة المنصة إلى Liberty — WebSphere التقليدي إلى Liberty

نقل من WebSphere Application Server التقليدي إلى WebSphere Liberty أو Open Liberty يمنحك بصمة ذاكرة أصغر وتغليف صديق للحاويات وبدء أسرع ودعم Jakarta EE الحديث. إنها أيضاً إحدى أكثر عمليات النقل تعقيداً للمحاولة يدوياً.

  • تقييم مدفوع بـ AMA. يستوعب Bob مخرجات IBM Application Modernization Accelerator، ويُحلّل تقاريره إلى مشكلات نقل محدّدة على مستوى الملفات مع توجيه معالجة قائم على القواعد.
  • كل قاعدة AMA تحمل توجيهاً وصفياً — "استبدل com.ibm.websphere.* بمعادل Jakarta EE القياسي"، و"انقل تهيئة ibm-web-ext.xml إلى server.xml". يُغذّي Bob هذه المشكلات مجمَّعةً حسب السبب الجذري إلى الذكاء الاصطناعي مع النص المساعد للقاعدة، فيطبّق النموذج الإصلاح المعروف بدلاً من التخمين.
  • حيث يتضمّن النقل قفزة Jakarta، تتعامل مكتبة وصفات OpenRewrite ذاتها مع ميكانيكيات namespace بشكل حتمي.
  • بناء ونشر وتحقق. يبني Bob WAR/EAR وينشر عبر liberty-maven-plugin أو liberty-gradle-plugin ويتابع سجلات الخادم لأخطاء البدء وتحميل الفئات ويحلّها بشكل تكراري. التحقق الوظيفي بـ curl ضد نقاط نهاية REST جزء من التدفق القياسي.

يُرمّز الـ workflow كيف يتعامل مهندسو Liberty مع النقل، بدلاً من تركه لموجّه عام.

القدرة الثالثة: تحديث واجهة المستخدم — JSP/Struts إلى SPA حديث

معظم تطبيقات Java القديمة لا تزال تُشغّل واجهاتها عبر JSP أو Struts أو servlets. يقسم Bob هذا إلى pipeline من خمس مراحل.

  • استخراج البنية. قبل إعادة كتابة أي كود، يحلّل Bob التطبيق ويُنتج architecture.md يُحصي كل controller وaction وservlet وصفحة ونموذج وقاعدة تحقق ومسار تدفق بيانات. هذه الوثيقة هي مرجع الحقيقة لبقية النقل.
  • تُحوَّل طبقة العرض القديمة (Struts actions وservlets ومتحكّمات JSP) إلى نقاط نهاية REST على backend حديث — Spring Boot أو Quarkus أو Liberty — مع ترك DAOs وفئات النموذج الأصلية دون تعديل للحفاظ على سلامة قاعدة البيانات.
  • سقالة Frontend. مشروع TypeScript جديد (Angular أو React أو إطار آخر) مرتبط بنظام تصميم مختار — Carbon أو Material UI أو shadcn/ui — مع عميل HTTP والتخصيص والتوجيه وإدارة الحالة وحدود الأخطاء وCORS جاهزة قبل بدء أي عمل على الميزات.
  • تُوزَّع نماذج JSP والجداول على معادلات نظام التصميم — DataTables وCards وDatePickers وForms المتحقّقة — مع الحفاظ على قواعد الأعمال الأصلية.
  • بوّابات تحقق في كل خطوة. لا يبدأ Bob التطبيق أبداً بنفسه. بعد كل مرحلة يطلب من المطوّر تشغيل أمر البناء/البدء والتأكيد، مع إبقاء التحقق في يدَي الإنسان.

يتعامل الذكاء الاصطناعي مع الترجمة السياقية من JSP tag soup إلى مكوّنات حديثة؛ تتعامل الأتمتة مع السقالة والتبعيات والتحقق من البناء.

القدرة الرابعة: اختبار الوحدة — الاستراتيجية أوّلاً ثم التوليد

تغطية الاختبار غالباً ما تكون العائق الأكبر أمام التحديث: لا يمكنك ترقية ما لا يمكنك التحقق منه بأمان. Bob يُولّد استراتيجية اختبار قبل توليد الاختبارات.

  • توليد الاستراتيجية. يحلّل Bob المشروع ويُنتج UNITTEST.md يغطّي البنية والوحدات التي تحتاج تغطية والـ frameworks الموصى بها (JUnit 5 وMockito وAssertJ) واتفاقيات التسمية وعتبات التغطية والأوامر الدقيقة لتشغيل الاختبارات مع وبدون تقارير التغطية.
  • يعمل اختيار المرشّحين على تفصيلات متعددة — حزم كاملة وفئات محدّدة وطرق فردية — ويمكن أن يعمل على git diffs لتركيز الجهد على الكود المُغيَّر مؤخّراً.
  • توليد وتشغيل وإصلاح. ينتهي كل موجّه اختبار بنفس التعليمة: شغّل الاختبارات، وأصلح الأخطاء. يُنفّذ الذكاء الاصطناعي ويُلاحظ الأخطاء ويكرّر حتى تصبح المجموعة خضراء بدلاً من التوقف عند توليد الكود.
  • يتكامل Bob مع JaCoCo حتى تستهدف الحلقة التغطية المقيسة لا مجرد تشغيل اختبار أخضر.

تُشغّل الأتمتة الاختبارات؛ الذكاء الاصطناعي يكتبها ويُفكّر في الأخطاء. التغطية الناتجة هي ما يفتح حصار الـ workflows الأربعة الأخرى.

القدرة الخامسة: معالجة الثغرات الأمنية — CVEs كجزء من الحلقة ذاتها

تطبيق مُحدَّث لا يزال يشحن تبعيات مليئة بـ CVEs منجز بنصفه فقط. معالجة الثغرات الأمنية تُعيد استخدام البنية ذاتها لترقية JDK، موجَّهةً نحو الثغرات.

  • كشف مدفوع بالبناء. يُعيد Bob استخدام محلّلات سجل Maven وGradle من workflow الترقية، مضبوطةً على كشف إشعارات التبعيات وتحذيرات الإهمال والتبعيات العابرة المعروفة بالثغرات من مخرجات البناء وإضافات dependency-check وأدوات SBOM.
  • حين لا يكون الإصلاح مجرّد ترقية إصدار نظيفة — مثلاً المكتبة المُرقَّعة غيّرت التوقيعات وتحتاج مواقع الاستدعاء نقلاً — تُجمّع حلقة agentic الأعطال حسب السبب الجذري وتُطبّق المعالجة عبر الوحدات وتُعيد البناء للتحقق.
  • تنطبق الضمانات ذاتها. لا تغييرات تبعيات بدون موافقة صريحة، ولا كود معلَّق، ولا مفاجآت namespace. الإصلاحات تُعرض وتُشرح وتُؤكَّد قبل أن تُطبَّق.

تعمل معالجة الأمان على المسار ذاته مع باقي عمل التحديث لا كخارطة طريق منفصلة.

الخيط المشترك

عبر القدرات الخمس، يثبت نفس تقسيم العمل:

المرحلةالمالك
تحليل المشروع واستخراج البيانات الوصفيةالأتمتة
التحويلات الميكانيكية المعروفةوصفات OpenRewrite
البناء وتحليل السجل وتجميع الأخطاءالأتمتة
القرارات السياقية ومعالجة الأخطاء وترجمة الكودالذكاء الاصطناعي
بوّابات الموافقة والتحقق والنشرإنسان في الحلقة
سجل التدقيق (مخطّطات Mermaid وملخّصات المهام وتتبّع التكاليف)الأتمتة

تتعامل الأتمتة مع ما هو حتمي، الذكاء الاصطناعي مع ما هو سياقي، والإنسان يوافق على ما هو حاسم — مدعوماً بمهندسي IBM وRed Hat الذين بنوا المنصة تحته.

اجعل مستودعك جاهزاً

تذهب هذه الـ workflows أبعد على قاعدة كود مقروءة بالفعل — والأشياء التي تساعد Bob هي ذاتها التي تساعد أي مهندس يرث الكود:

  • بناء أخضر وسريع بشكل معقول. كل حلقة هنا مرتكزة إلى مخرجات التجميع والاختبار. كلما كان بناء mvn/gradle أسرع وأكثر موثوقية، كانت دورة توليد-تشغيل-إصلاح أكثر إحكاماً.
  • اختبارات موجودة، ولو جزئية. التغطية هي شبكة أمان للترقيات وإشارة يقرأها Bob. إن كان لديك القليل منها، ابدأ بالقدرة الرابعة قبل محاولة قفزة الإصدار.
  • شجرة تبعيات محدّدة ومُعلنة. إصدارات pom.xml/build.gradle الواضحة وقفل تبعيات حالي يُحدثان الفرق بين تشغيل وصفة نظيف وصيد تعارض متعدد الأيام.
  • أدوات بناء يمكن لـ Bob قيادتها. تعتمد workflows Liberty والأمان على إضافات قياسية (liberty-maven-plugin وdependency-check وأدوات SBOM)؛ وجودها مُوصَّلة يسمح لنصف الأتمتة بأداء عمله.

كيفية الحصول على الوصول

Premium Package for Java إضافة لخطة Bob الأساسية، لا تحميل منفصل.

كيفية الحصول على الحق تعتمد على خطّتك:

  • الخطط الفردية (Pro وPro+ وUltra). اذهب إلى صفحة الأسعار على bob.ibm.com، اختر خطة، وأضف إضافة Java أثناء الدفع. بعد إتمام الطلب وتثبيت Bob IDE، يُكتشف الحق عند تسجيل الدخول. تدير المقاعد والإضافات من اشتراكك على bob.ibm.com.
  • خطط المؤسسات. يُعيّن مسؤول Bob الخاص بك مقاعد الخطة الأساسية وإضافة Java من واجهة Bob Admin. بمجرّد تعيين مقعد لك، ينطبق الكشف التلقائي ذاته — سجّل الدخول وستظهر الـ workflows.

أمران يستحقّان التصريح بهما:

  • يجب عليك اختيار إضافة Java عند الدفع. ليست جزءاً من الخطة الأساسية بشكل افتراضي. إن تخطّيتها أثناء الشراء، لن تظهر الـ workflows حتى على خطة مدفوعة.
  • خطط التجربة لا يمكنها استخدام الإضافات. يتطلّب Premium Package for Java خطة Pro أو Pro+ أو Ultra أو enterprise مدفوعة.

ابدأ

بمجرّد أن تشمل خطّتك الإضافة وتسجيل الدخول إلى Bob IDE:

  • شغّل تقييم ترقية JDK على وحدة واحدة أوّلاً لرؤية المسارات المقترحة وتقييمات الصعوبة قبل الالتزام بهدف.
  • إن كانت التغطية ضئيلة، أنشئ استراتيجية UNITTEST.md وابنِ شبكة أمان قبل أي قفزة إصدار.
  • وافق على التغييرات وحدةً بوحدة — الضمانات موجودة للحفاظ على تغييرات namespace والتبعيات في يديك.

اطّلع على دراسات الحالة على bob.ibm.com لترى كيف أجرت الفرق هذه عمليات النقل من البداية إلى النهاية.