# كوربا (حاسوب)

CORBA هي كلمة اختصار لـCommon Object Request Broker Architecture وهي عبارة إنكليزية تعني باللغة العربية أسلوب البناء الوسيطي لطلب الأغراض العامة.
يعتبر أسلوب البناء الوسيطي لطلب الأغراض العامة CORBA معيار قياسي معرّف من قبل مجموعة إدارة الأغراض (بالإنجليزية: Object Management Group،‏ OMG)‏. يخوّل هذا المعيار المكونات البرمجية (بالإنجليزية: Software components)‏ المكتوبة بلغات حاسوبية مختلفة، والتي تعمل على أجهزة متعددة، يخولها بالعمل معا.

## نظرة عامة (مقدمة)

تعتبر كوربا CORBA تقنية في البرمجيات مستخدمة في تنظيم وتوحيد دلالية استدعاءات المناهج (الطرائق) method-call بين أغراض التطبيقات التي تقع في المجال العنواني نفسه للتطبيق أو تقع في مجال عنواني بعيد (أي عنوان المضيف نفسه، أو عنوان مضيف بعيد على شبكة ما). لقد تم إصدار النسخة 1.0 في شهر تشرين الأول أكتوبر من عام 1991 ميلادي.
تستخدم كوربا CORBA لغة تعريف الواجهات Interface Definition Language) IDL) لتحديد الواجهات التي سوف تقدمها الأغراض البرمجية للعالم الخارجي. عندئذ كوربا تؤمن الانتقال من لغة تعريف الواجهات IDL إلى أي لغة برمجة خاصة بالتنفيذ مثل لغة C++ أو لغة جافا. هناك ارتباط قياسي لعدد من لغات البرمجة منها لغة آدا Ada ولغة C ولغة C++ ولغة Lisp ولغة Smalltalk ولغة جافا ولغة كوبول COBOL ولغة PL/L ولغة بايثون Python. كما وهناك ارتباطات غير قياسية للغات أخرى مثل لغة بيرلPerl ولغة فيجوال بيسك Visual Basic ولغة Rubyروبي ولغة Erlang ولغة Tcl منجزة من خلال الوسائط لطلب الأغراض العامة ORBs Object Request Brokers ومكتوبة من أجل تلك اللغات.
تقتضي مواصفات كوربا وجود ORB كي يتمكن من خلاله التطبيق بالتعامل مع أغراض برمجية أخرى. في الواقع، يقوم التطبيق بإعطاء قيمة ابتدائية للـ ORB ويقوم بالنفاذ إلى وصيلة الغرض Object Adapter الذي يحافظ على بعض الأمور متل عداد المرجع وسياسات إنشاء الأغراض وسياسات فترة حياة الأغراض.. الخ.
يستخدم الـ Object Adapter لتسجيل الـ instances من الصفوف مولدة النص البرمجي generated code classes. تعتبر الصفوف مولدة النص البرمجي Generated Code Classes على أنها نتيجة ترجمة الكود الخاص بـ IDL المستخدم الذي يقوم بتحويل تعاريف الواجهات عالية المستوى إلى أساس صفوف خاصة باللغة وخاصة بنظام التشغيل لكي يتم استخدامها في تطبيق المستخدم. وتعد هذه الخطوة ضرورية للتأكيد على دلالات ألفاظ الكوربا، كما وتعد ضرورية لتقديم عملية صحيحة للمستخدم للمواجهة مع البنية التحتية لكوربا. هناك لغات مقابلات IDL تعتبر أكتر صعوبة من غيرها. على سبيل المثال طبيعة لغة البرمجة جافا تقتضي أن الـ IDL-Java Mapping سلس ويستفيد من كوربا بشكل بسيط في تطبيقات الجافا. بينما C++ Mapping لا تعتبر سهلة ولكنها مناسبة لجميع هيئات الكوربا مثل معالجة الاستثناءات Exception Handling. كما وأن C-mapping تعتبر أشد غرابة (لأنها ليست لغة برمجة غرضية التوجه) ولكنها منطقية وتعالج RPC semantics بشكل جيد. (لقد استبدلت Red Hat Linux و GNOME UI system الـ IPC المبني على كوربا بآخر هو DBus) إن تحقيق التقابل بين لغات البرمجة يتطلب من المبرمج أن يكتب IDL code يمثل واجهة إلى الأغراض البرمجية الخاصة به. وعادةً هناك مترجم خاص مع كوربا هو IDL compiler يحول IDL code الذي كتبه المبرمج إلى نص برنامج مولد حسب لغة البرمجة المحددة. ومن ثم يقوم مترجم تقليدي بترجمة نص البرنامج المولد لإنشاء ملفات أغراض القابلة للربط لهذا التطبيق.
بعض مواصفات كوربا هي: أنماط المعطيات، الاستثناءات Exceptions، بروتوكولات الشبكة، الزمن المحدد للتواصل communication timeouts. على سبيل المثال: يتواجد في جهة الخادم عادةً Portable Object Adapter (POA) يقوم بتوجيه الطلبات اما إلى الخادم المحلي local servants أو يقوم بتوجيهها إلى خوادم أخرى وذلك لتحقيق موازنة الحمل.
بعض الأمور التي لا تهتم بها كوربا ولكنها موجودة في جميع الأنظمة الموزعة الأخرى هي: مدة حياة الغرض، التكرارية وتجاوز الأعطال، name semantics، إدارة الذاكرة، الموازنة الديناميكية للحمل، وفصل النماذج عن بعضها (اظهار، معطيات، تحكم). إضافة لكون كوربا تقدم للمستخدم تقنية استدعاء الاجرائيات عن بعد بغض النظر عن البيئة، فهي أيضاً تعرّف بعض الخدمات الهامة مثل المناقلات transactions والأمان والأحداث والوقت وغيرها من نماذج الواجهات حسب المجال المحدد.

## العلامة التجارية OMG

إن كلاً من كوربا CORBA و IIOPو OMG هي علامات تجارية مسجلة لمجموعة Object Management Group ويجب مراعاة ذلك عن استخدامها. أما GIOP فهي ليست علامة مسجلة لدى OMG لذلك يكفي القول أن التطبيق يستخدم بنية معتمدة على GIOP.

## المواضيع التي تهتم بها كوربا CORBA (أسلوب البناء الوسيطي لطلب الأغراض العامة)
### الأغراض بواسطة المرجع

تستخدم الأغراض البرمجية في التطبيقات من خلال مرجع لها، ويمكن تحقيق هذا المرجع اما بعنوان نصي URI أو عن طريقة خدمة أسماء مشابهة لـ DNS أو تمريره كأحد المتحولات الممررة الاستدعاء. ان المراجع على الأغراض البرمجية تعتبر أغرض خفيفة مشابهة لواجهات أغراض الواقع (سواء كانت محلية أو عن بعد). إن استدعات الطرق البرمجية بواسطة المرجع Method calls on the reference تُنتِج استدعاءات متتالية لـ ORB كما وتحجب الـ thread بينما تنتظر اجابة: نجاح أم فشل. إن المتحولات الممررة قد تعيد معطيات ومن ثم المعطيات المستثناة ترتب داخليا من قبل الـ ORB حسب تقابل لغة البرمجة المحددة ونظام التشغيل.

### المعطيات بواسطة القيمة

تقدم لغة تعريف الواجهات الخاصة بـ CORBA تعريف inter-object communication مستقل عن لغة البرمجة ونظام التشغيل. إن أغراض كوربا تمرر بواسطة المرجع بينما المعطيات متل (integers, doubles, structs) تمرر بواسطة القيمة وهذا المزيج من الأغراض البرمجية الممررة بواسطة المرجع والمعطيات الممررة بواسطة القيمة تؤكّد على قوة data typing أثناء ترجمة الـ clients والـ Servers، ومع ذلك تحمي الوراثة المرنة في CORBA problem-space.

### الأغراض بواسطة القيمة Object By Value(OBV)

عرّفت كوربا و RMI-IIOP مفهوم OBV بعيداً عن الأغراض البرمجية البعيدة. إن النص البرمجي المكتوب في طرائق هذه الأغراض البرمجية بشكل افتراضي ينفذ محلياً. إذا كان الـ OBV قد وصل من مكان بعيد فإن النص البرمجي اللازم يجب أن يكون معروف سابقاً لدى كلا الطرفين أو يتم تحميله بشكل ديناميكي من المرسل، وللقيام بذلك يجب أن تتوفر التسجيلة التي تحوي الـ Code Base التي هي عبارة عن قائمة من عناوين URL مفصولة بفراغات، حيث يمكن تحميل النص البرمجي من تلك العناوين. كما ويمكن أن يوجد طرق عن بعد للـ OBV. قد يحوي الـ OBV حقول تنتقل عندما ينتقل الـOBV حيث أن هذه الحقول قد تكون OBV أيضاً مشكلة قوائم أو أشجار أو بنيان ما. إن OBV تتميز ببنية صفوف class hierarchy تتضمن الوراثة المتعددة والصفوف المجردة.

### نموذج مكونات كوربا CORBA Component Model (CCM)

إن CORBA Component Model (CCM) هو إضافة لمجموعة تعريفات كوربا. أول ظهور له كان في CORBA 3 كما وأنه يوصّف اطار عمل framework للتطبيقات قياسي لـ CORBA Component. بالرغم من أنه لا يعتمد على Enterprise Java Beans (EJB) التي هي مستقلة عن لغة البرمجة، الا وأنه أكثر عمومية من EJB لأنه يقدم أربع أنواع من الـcomponents بدلاً من 2 التي تعرّفها EJB. كما وأنه يعرّف تجرّد من الأشياء entities التي يمكن أن تقدم وتقبل خدمات من خلال واجهات اسمية معرفة جيداً تدعى ports. لدى CCM حاوٍ للمكونات component container لكي تُنشَر المكونات البرمجية فيه. ان هذا الحاوي يقدّم مجموعة من الخدمات للمكونات. بعض هذه الخدمات هي التنبيه والتوثيق authentication والاستمرارية وإدارة المناقلات. وهذه الخدمات هي أكثر الخدمات التي تطلبها النظم الموزعة، ومن خلال نقل التحقيق لهذه الخدمات من المكونات البرمجية إلى حاوِ المكونات ينخفض تعقيد المكونات components بشكل كبير. 2-5- بروتوكول InterORB العام (General InterORB Protocol(GIOP يعتبر GIOP بروتوكول مجرد تتخاطب من خلاله الـ ORB مع بعضها البعض. المعايير القياسية المرتبطة بهذا البروتوكول متبناة من قبل مجموعة OMG. إن بنية GIOP تقدم بعض البروتوكولات متل:
* Internet InterORB Protocol (IIOP) وهو تحقيق لـ GIOP يستخدم في الإنترنت ويقدم تقابل بين رسائل GIOP و TCP/IP layer.
* SSL InterORB Protocol (SSLIOP) وهو IIOP فوق SSL ويقدم ترميز encryption وتوثيق Authentication.
* HyperText InterORB Protocol (HTIOP) وهو IIOP فوق HTTP ويقدم بروكسي شفاف جانبي.
* و غيرها العديد..

### VMCID (Vendor Minor Codeset ID)

كل استثناء قياسي في كوربا يتضمن رقم ثانوي لتحديد نوع الاستثناء exception، رقم الاسثناء يتألف من رقم موجب مؤلف من 20 بت ويسمىVMCID (Vendor Minor Codeset ID) وهي الـ 20 بت العليا بالإضافة إلى 12 بت أخرى هي الرقم الثانوي. رقم VMCID في المجال بين 0 و 0xfffff محجوز للتجارب والرقم VMCID OMGVMCID و 1 إلى 0xf محجوز لاستخدامات مجموعة OMG أما غيرها فهو متاح للشركات المصنّعة.

### Corba Location (CorbaLoc)

هو مرجع نصي لأغراض كوربا يشبه URL. مثال عن corbaloc هو:
corbaloc::160.45.110.41:38693/StandardNS/NameServer-POA/_root
يجب على كل منتجات كوربا أن تدعم “corbaloc:”و “corbaname:” ويمكنها أن تدعم أي من “http:”, “ftp:”, “ملف:”. المزايا
- الاستقلال عن لغة البرمجة.
- الاستقلال عن نظام التشغيل.
- التحرر من التقنية، حيث تسمح كوربا للمهندسين باستنظام الواجهات بين النظم الجديدة والنظم القديمة وتؤمن وسائل تسمح للمبرمجين ببرمجة نظم متفاوتة ومن ثم دمجها معا لتكوين نظام متماسك بغض النظر عن التقنية المستخدمة.
- قوة في أنماط المعطيات، حيث تسمح كوربا بأي نمظ للمعطيات تقريبا كما وأن CORBA IDL تقدم تقنية تؤكد أن نص البرنامج المكتوب متوافق مع أنماط التوابع وأسماؤها وأنماط المتحولات الممررة والاسثناءات وغيرها..
- قدرة عالية على تحقيق التوافقية.
- التحرر من تفاصيل نقل المعطيات.

## المساويء والمشكلات والانتقادات

- شفافية الموقع، حيث أن الأغراض البرمجية الموجودة في المجال العنواني ذاته والتي يمكن الوصول إليها من خلال استدعاء بسيط تُعامَل ذات معاملة الأغراض البرمجية البعيدة، مما يؤدي إلى تعقيد الاستدعاءات وخاصة إذا كان معظم الأغراض البرمجية المطلوبة موجودة محلياً.
- النقص في التصميم، لم يكن هناك تنظيم للعروض المختلفة المقدمة ولم يتم تنسيق المشاكل لمعالجتها ومع ذلك تم إصدار المعايير القياسية مما أدى لتعقيد المواصفات وصعوبة تنفيذها وفي بعض الأحيان كانت غامضة. كما وأدى ظهور بعض الخلافات في اللجنة المصممة إلى ظهور طبعات منقّحة من معايير كوربا كانت مستحيلة التنفيذ دون وجود اضافات خاصة لها.
- مشكلات في التنفيذ والتحقيق، غالباً كانت النسخ المحققة قليلة أو غير كاملة أو غير كافية. على الرغم من أن النسخ المحققة جيداً من كوربا كان صعب الحصول عليها سابقاً إلا أن SUN Java SDK يأتي معها كوربا ضمنياً. كما وأن هناك بعض النسخ المحققة من كوربا قد تكون معقدة أو بطيئة أو غير متوافقة أو عير كاملة.
- الجدار الناري Firewalls، كوربا وبالتحديد IIOP تستخدم اتصال TCP/IP خام لنقل المعطيات، فإذا كان الزبون client موجود خلف بيئة firewall أو transparent proxy server قوية تسمح فقط بتمرير HTTP connections عبر الميناء 80، عندئذ التواصل سيكون مستحيل إلا إذا أعطى مخدم البروكسي المطلوب السماحية لـ HTTP CONNECT method أو SOCKS connections.
لقد كان من الصعب اجبار التحقيق على استخدام port قياسي واحد فقد كان يتم اختيار عدد من الـ ports بشكل عشوائي، وللآن الـ ORBs لديهم هذه العلة. بسبب هذه الصعوبات ازداد عدد المستخدمين الذين لجئو لاستخدام خدمات الويب web services بدلا من استخدام كوربا CORBA حيث تتواصل باستخدام XML/SOAP على الميناء 80 الذي يُترَك مفتوح عادةً. بعض النسخ الحديثة المحققة من كوربا تدعم SSL ويمكن إعدادها بسهولة لتعمل على رقم ميناء port واحد فقط.
ومن أشهر الـ ORBS المفتوحة المصدر مثل TAO و JacORB تدعم GIOP باتجاهين مما يعطي كوربا ميزة القدرة على اتصالات استعمال الاستدعاء الرجعي callback communication بدلا من صفة polling approach الموجودة في خدمات الويب.
كما أنه أصبح هناك عدد من الـ CORBA-friendly firewalls الصديقة لكوربا متوفرة في السوق.
- لا وجود للضغط compression، إن كوربا ترتب معطياتها على شكل معطيات ثنائية (صفر وواحد) ولكنها لا تستخدم أي ضغط. وحالياً شركات IONA/Remedy IT/Telefonica يعملون على إنشاء إضافة لمعيار كوربا القياسي يسمح بتحقيق الضغط وتسمى هذه الإضافة بـ ZIOP وسوف يقدم به طلب رسمي لمجموعة OMG في اجتماعها القادم.
- تجاهل التعامل مع الـ threads.
- لا يوجد تقابل للغات برمجة متل C# حيث أن كوربا تجاهلت.Net.
وغيرها العديد من المشكلات التي أدت إلى تراجع أهمية كوربا مع الزمن، وأيضاً من أسباب اندثار كوربا هو ظهور منافسة لها من قبل عدد من التقنيات مثل DCOM التابعة لشركة مايكروسوفت و EJB وخدمات الويب Web Services.

## OpenCCM (Open CORBA Component Model)

يعتبر OpenCCM أول تحقيق عام ومفتوح المصدر لمواصفات CORBA Component Model المعرّفة حسب مجموعة Object Management Group (OMG). يسمح OpenCCM بتصميم وتحقيق وترجمة وترزيم وتجميع ونشر وتنصيب واعداد وتنفيذ وإدارة وإنشاء تطبيقات موزعة تعتمد على مكونات كوربا CORBA Component. يعتبر OpenCCM مشروع حر ومفتوح المصدر معرّف تحت رخصة جنو LGPL ومستضاف من قبل Object Web Constium.
يعتمد OpenCCM على جافا مما يسمح له بالعمل على عدة منصات كما ويعمل على منتجات كوربا التالية:
* Borland Enterprise Server (BES)
* JacORB
* ORBacus
* The Community OpenORB
كما ويعمل OpenCCM تقريبا على كل أنظمة التشغيل مثل:
* Linux
* Linux Familiar
* MacOS X
* Solaris
* Windows NT/2000/XP
* Windows NT/2000/XP with CYGWIN
* Windows CE for Personal Data Assistants (PDA)
ولا زال OpenCCM قيد التطوير حيث أنه لا يتمتع بجميع ميزات CCM المعروفة.

## مراجع

* ↑ Chappel، David (مايو 1998). "Trouble with CORBA". www.davidchappel.com. مؤرشف من الأصل في 2012-12-03. اطلع عليه بتاريخ 2010-03-15.
* ↑ "omniORB : Free CORBA ORB". sourceforge.net. مؤرشف من الأصل في 2019-04-03. اطلع عليه بتاريخ 2014-01-09.
* ↑ "History of CORBA". Object Management Group. مؤرشف من الأصل في 2017-10-23. اطلع عليه بتاريخ 2017-03-12.
* بوابة علم الحاسوب
* بوابة برمجيات
* بوابة برمجة الحاسوب