أسلوب بناء وحدة جافا للأعمال البسيطة
**وحدة جافا للأعمال Enterprise JavaBean (EJB)** هو بنية تدار من جانب الخادم لبناء الوحدات لتطبيقات الأعمال.
إن خاصية وحدة جافا للأعمال أحد واجهات برمجة التطبيق المتعددة التابعة لجافا في خاصية Java EE. كما أن وحدة جافا للأعمال عبارة عن نموذج بجانب الخادم الذي يغلف منطق الأعمال لتطبيق ما. وكانت خاصية وحدة جافا للأعمال قد طورت أصلا في عام 1997 من قبل آي بي إم وتبنتها لاحقا صن مايكروسيستم (وحدة جافا للأعمال 1.0 و 1.1) في عام 1999، وتحسن في ظل معالجة تجمع الجافا Java Community Process مثل JSR 19 (وحدة جافا للأعمال 2.0)، وJSR 153 (وحدة جافا للأعمال2.1)، وJSR220 (وحدة جافا للأعمال 3.0)، وJSR318 (وحدة جافا للأعمال 3.1).

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

ووفقا لذلك، فإن خاصية وحدة جافا للأعمال تفصل كيفية تقديم خادم للتطبيق:

* معالجة التبادل.
* التكامل مع خدمات التوكيد المقدمة من قبل واجهة برمجة تطبيق جافا المؤكدة.
* التحكم المتزامن.
* الأحداث باستخدام خدمات رسائل جافا.
* تسمية وخدمات الدليل (JNDI).
* الأمن (جافا بالامتداد الكرايبتوجرافي) JCE و JAAS.
* نشر مكونات البرامج في تطبيق خادم التطبيق.
* الاستدعاءات الاجرائية البعيدة باستخدام RMI-IIOP (Remote Method Invocation Over Internet Orb Protocol).
* دعم طرق الأعمال مثل خدمات الويب.

إضافة إلى ذلك، فإن خاصية وحدة جافا للأعمال تحدد الأدوار التي لعبها حاوية وحدة جافا للأعمال ووحدات جافا للأعمال، وكذلك كيفية نشر وحدات جافا للأعمال في حاوية. لاحظ أن الخاصية الحالية لوحدة جافا للأعمال لا تفصل بصورة مزيدة كيفية تقديم خادم التطبيق للتوكيد (وهي المهمة الموكلة لخاصية لخاصية JPA)، ولكن بدلا من تفصيل كيف يمكن لمنطق الأعمال أن يتكامل بسهولة مع خدمات التوكيد المقدمة من قبل خادم التطبيق.
ومن أجل النشر والتشغيل، فإن خوادم التطبيق تكون مستخدمة. وتدعم تطبيقات أوراكل: ويبلوجيك WebLogic، وجلاس فيش أيه إس GlassFish AS، وتطبيق ويبسفير WebSphere وسايبيس أيسيرفر Sybase EAServer التابعين لآي بي إم خواص وحدة جافا للأعمال المقدمة من أوراكل صن مايكروسوفت. ويعتبر خادم أباتشي جيرونيمو the Apache Geronimo Serverخادم تطبيقي مصدري مفتوح طورته مؤسسة أباتشي للبرمجيات ASF.

تطبيق سريع أعقبه نقد
--------------------

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

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

بأي حال فإن قضية التعقيد استمرت في إعاقة قبول وحدة جافا للأعمال. وبالرغم من أن أدوات المطور المتفوق قد سهلت من تكوين واستخدامات وحدة جافا للأعمال من خلال ميكنة المهام المتكررة، فإن هذه الأدوات لا تسهل بأي حال من الأحوال تعلم كيفية استخدام التكنولوجيا. علاوة على ذلك فإن الحركة المضادة قد نمت بقوة على مستوى القاعدة بين المبرمجين. وكانت المنتجات الرئيسية لهذه الحركة يطلق عليها التكنولوجيات «ذات الوزن الخفيف» (أي مقارنة بوحدة جافا للأعمال) لهايبرنيت Hibernate (للتوكيد وكائن رسم الخرائط العلائقية) وسبرنج فريموورك Spring Framework (والتي قدمت طريقة أقل إطنابا لتشفير منطق الأعمال). وبالرغم من الافتقاد لدعم الشركات الكبيرة، فإن هذه التكنولوجيات نمت جماهيريا وتم تبنيها بشكل أكبر من قبل الشركات التي كانت قد أصيبت بخيبة أمل إزاء وحدة جافا للأعمال.

وكان وحدة جافا للأعمال مدعوما من قبل البرنامج التجريبي جافا بلو برنتز الذي أصدرته جافا بيت ستور التابع لصن. إن استخدام وحدة جافا للأعمال كان مثار جدل وأن مبرمجين نافذين في جافا أي أي مثل رود جونسون قد تبنوا مواقف استجابة إلى جافا بيت ستور التي عملت على إضعاف التوكيد على وحدة جافا للأعمال. وقد أنتجت صن نفسها بديلا يسمى كائنات بيانات جافا. وفيما بعد فإن وحدات جافا للأعمال وأشكال بيانات جافا والعديد من الأفكار الكامنة في هايبرنيت اشتركت في تشكيل وحدة جافا للأعمال 3.0 التي تضمنت في واجهة برمجة تطبيق توكيد جافا وكائنات جافا القديمة المسطحة Plain Old Java Objects (POJOs). وكان وحدة جافا للأعمال 3.0 أقل وزنا مقارنة بوحدة جافا للأعمال 2.0 وقدم اختيارات أكبر للمطورين.

إعادة صياغة وحدة جافا للأعمال
-----------------------------

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

مثال
----

يظهر ما يلي مثالا أساسيا لما يبدو عليه تشفير وحدة جافا للأعمال

```
@Local
public interface CustomerServiceLocal {
 void addCustomer(Customer customer);
}

@Stateless
public class CustomerService implements CustomerServiceLocal {
 
 @PersistenceContext 
 private EntityManager entityManager; 
 
 public void addCustomer(Customer customer) { 
 entityManager.persist(customer); 
 } 
}

```

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

ويمكن استخدام مثل وحدة جافا للأعمال من قبل فئة ما في شريحة الويب على سبيل المثال كما يلي:

```
@Named
@RequestScoped
public class CustomerBacking {

 @EJB 
 private CustomerServiceLocal customerService;

 public String addCustomer() {
 customerService.addCustomer(customer);
 context.addMessage(...); // abbreviated for brevity
 return "customer\_overview";
 }
}

```

ويحدد ما سبق أوجه خادم جافا JavaServer Faces (JSF) التي تدعم بين والتي يتم ضخ وحدة جافا للأعمال فيها من خلال وسيلة شرح @EJB. إن طريقة العملاء المضافين addCostumer مرتبطة نمطيا ببعض مكونات واجهة المستخدم UI، مثل الأزرار. وعلى العكس من وحدة جافا للأعمال، فإن دعم بين لا يحتوي على أي منطق أعمال أو كود توكيد، لكنه يرسل مثل هذه الاهتمامات لوحدة جافا للأعمال. ويعرف دعم بين تمثيلا خاصا لا يكون لوحدة جافا للأعمال أية معرفة بها.

الأنواع
-------

ويملك وحدة جافا للأعمال نوعين رئيسيين من الوحدات beans:

* ويمكن أن تكون وحدات الشبكات  Session Beans إما «كبيرة» أو «بلا هوية» أو «مفردة»، أو أن يتم الولوج لها من خلال واجهة إما «محلية» (نفس الآلة الافتراضية لجافا JVM) أو بعيدة (آلة افتراضية لجافا مختلفة)، أو الولوج مباشرة بدون واجهة، وفي هذه الحالة فإنه يتم تطبيق دلاليات محلية. وتدعم جميع وحدات الشبكات بطريقة غير متزامنة تنفيذ  جميع العروض (محلية/ بعيدة/ بدون واجهة).
* إن الوحدات القائمة على الرسائل (وتعرف أيضا بـ MDBs أو وحدات الرسائل). وتدعم الوحدات القائمة على الرسائل أيضا التنفيذ غير المتزامن ولكن من خلال مثال الإرسال.

### وحدات الجلسات

#### وحدات الجلسات الكبيرة

إن وحدات الجلسات الكبيرة هي كائنات أعمال تتمتع بوجود حالة: أي أنها تحتفظ بتتبع ما يستدعيه العميل الذي يتعامل معها من خلال الجلسة ثم يلج إلى مثال الوحدة ويكون قاصرا على عميل واحد في المرة الواحدة. إن حالة وحدات الجلسات الكبيرة يمكن أن تستمر تلقائيا من خلال الحاوية لتحرير الذاكرة بعد توقف ولوج العميل إلى الوحدة لوقت ما. وتمد خاصية JPA سياقا مستمرا يدعم بشكل مميز من قبل وحدات الجلسات الكبيرة.

*أمثلة*
* التأكد في مخزن الويب ما يمكن تناوله من خلال وحدة الجلسات الكبيرة التي يمكن أن تستخدم حالتها في الحفاظ على تتبع المكان الذي يقوم منه العميل بعملية الخروج، ويمكن أن تبقى على أقفال على المواد التي يقوم العميل بشرائها (من وجهة نظر بنية النظام، يمكن أن يكون ذلك أقل مثالية أن يقوم العميل بإدارة هذه الأقفال)

#### وحدات الجلسات المفردة

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

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

### الوحدات القائمة على الرسائل

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

*أمثلة*
* إرسال تحديث التكوين إلى القواعد المضاعفة يمكن أن يكون قد تم من خلال إرسال رسالة بخدمات رسائل جافا إلى «موضوع رسالة» ويمكن أن تكون قد تمت معالجتها من قبل استمع وحدة قائمة على الرسائل لهذا الموضوع (مثال الرسالة مستخدم هنا، ولأن المرسل لا يحتاج إلى أن يكون لديه معرفة عن حجم المستهلكين أو موقعهم أو حتى نوعهم بالضبط).
* تسليم وظيفة لعمل عنقودي من خلال إرسال رسالة باستخدام خدمات رسائل جافا، لكن هذه المرة فإن الاستماع للصف (مثال الرسالة والصف مستخدم، لأن المرسل ليس عليه الاهتمام الذي يمارس به العامل وظيفته، لكنه لا يحتاج إلى ضمان أن الوظيفة لا تنفذ إلا مرة واحدة فقط).
* إن معالجة أحداث التوقيت من مجدول كوارتز Quartz scheduler يمكن تناولها من خلال الوحدة القائمة على الرسالة؛ وعندما يطلق الكوارتز النار، فإن MDB يثار آليا. ولأن جافا EE لا تعرف شيئا عن كوارتز بالأساس، فإن مهايئ مصدر JCA سيكون مطلوبا وسيتم شرح MDB بالرجوع إلى ذلك.

### الوحدات الموروثة (قليلة الشأن)

كما استخدمت الإصدارات السابقة من وحدة جافا للأعمال نوعا من الوحدات معروف باسم وحدة الكيان Entity Bean. وكانت كائنات موزعة ذات حالة مستمرة. وهي الوحدات التي تكون في حاويتها مدارة لحالة الاستمرار Container-Managed Persistence (CMP)حيث تستخدم الحاوية المدارة باستمرار bean-Managed Persistence (BMP). وقد حلت وحدات الكيان بواجهة برمجة التطبيق لاستمرارية جافا في وحدة جافا للأعمال رقم 3.0، وكذلك في وحدة جافا للأعمال 3.1، إن أسلوب وحدات الكيان في CMP x2 لا تزال متاحة للتوافق بأثر رجعي. وتماما كما هو الحال في وحدة جافا للأعمال 3.1 فإن خاصية JPA كانت منفصلة تماما بخاصيتها نفسها وسوف لا يركز وحدة جافا للأعمال إلا على «وحدة الجلسة الجوهرية ونماذج مكونات الوحدة القائمة على الرسائل وواجهات برمجة التطبيق لعملاءها»).

وقد أقترحت أنواعا أخرى من وحدات الأعمال. على سبيل المثال وحدات أعمال الإعلام (JSR 86) التي تتناول تكامل كائنات الوسائط الإعلامية في تطبيقات Java EE.

التنفيذ
-------

تم نشر وحدات جافا للأعمال في حاوية وحدة جافا للأعمال داخل خادم التطبيق. وتصف هذه الخاصية كيف تتفاعل وحدة جافا للأعمال مع حاويتها وكيف يتفاعل كود العميل مع حاويتها/وحدة جافا للأعمال معا. إن فئات وحدة جافا للأعمال المستخدمة من قبل التطبيقات متضمنة في حزمة javax.ejb. (إن حزمة javax.ejb هي واجهة تقديم خدمة لا تستخدم إلا من قبل تطبيقات حاوية وحدة جافا للأعمال)

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

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

### التعاملات

يجب أن تدعم حاوية وحدة جافا للأعمال كل من تعاملات ACID المدارة بالحاوية والتعاملات المدارة بالوحدة.

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

Declarative Transactions Management Types| Type | Explanation |
| --- | --- |
| MANDATORY | If the client has not started a transaction, an exception is thrown. Otherwise the client's transaction is used. |
| REQUIRED | If the client has started a transaction, it is used. Otherwise a new transaction is started. (this is the default when no explicit type has been specified) |
| REQUIRES\_NEW | If the client has started a transaction, it is suspended. A new transaction is always started. |
| SUPPORTS | If the client has started a transaction, it is used. Otherwise, no transaction is used. |
| NOT\_SUPPORTED | If the client has started a transaction, it is suspended. No new transaction is started. |
| NEVER | If the client has started a transaction, an exception is thrown. No new transaction is started. |
|

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

### الأحداث

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

### خدمات التسمية والدليل

وكبديل للإدخال، فإن عملاء وحدة جافا للأعمال يمكنهم الحصول على إحالة لكائن وسيط لوحدة الجلسات (بذرة وحدة جافا للأعمال) باستخدام JNDI، ويمكن استخدام هذا البديل في الحالات التي يكون فيها الإدخال غير متاح، مثل الوحدات غير المدارة أو عملاء جافا SE البعيدون، أو عندما يكون ضروريا التحديد من الناحية البرمجية أية وحدة يجب الحصول عليها.
أسماء واجهة جافا للتسمية والدليل Java Naming and Directory Interface JNDI لوحدات جلسات وحدة جافا للأعمال تم تحديدها من قبل حاوية وحدة جافا للأعمال من خلال الآلية التالية:

أسماء واجهة جافا للتسمية والدليل| النطاق | اسم النمط |
| --- | --- |
| عالمي | java:global[/<app-name>]/<module-name>/<bean-name>[!<fully-qualified-interface-name>] |
| تطبيق | java:app/<module-name>/<bean-name>[!<fully-qualified-interface-name>] |
| وحدة | java:module/<bean-name>[!<fully-qualified-interface-name>] |
|

*(المداخل في الأقواس المربعة تشير لأجزاء اختيارية)*

يمكن لوحدة واحدة أن يحصل عليها من أي اسم متصل بالأنماط السابقة، واعتمادا على «موقع» العميل. إن العملاء في نفس الوحدة Module كالوحدة Bean المطلوبة يمكن أن تستخدم نطاقا أكبر من الوحدات، إن العملاء في نفس التطبيق كالوحدة المطلوبة التي تستخدم نطاقا تطبيقيا وما هو أعلى منه، الخ.
على سبيل المثال فإن كود التشغيل في نفس الوحدة مثل وحدة خدمة العملاء (كما هو مقدم من قبل المثال الظاهر سابقا في هذا المقال) سوف يستخدم الكود التالي للحصول على إحالة (محلية) له:

```
CustomerServiceLocal customerService =
 (CustomerServiceLocal) new InitialContext().lookup("java:module/CustomerService");

```

### الأمن

تعتبر حاوية وحدة جافا للأعمال مسئولة عن ضمان أن كود العميل له حقوق ولوج كافية لوحدة جافا للأعمال.

### التراث

#### الواجهات المنزلية وواجهات الأعمال المطلوبة

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

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

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

* اسم واجهة المنزل.
* فئة جافا للوحدة (كائن الأعمال)
* واجهة جافا للواجهة المنزلية
* واجهة جافا لكائن الأعمال
* التخزين المتواصل (فقط لوحدات الكيان)
* الأدوار والتراخيص الأمنية.
* حالة الكبر أو العدم (لوحدات الجلسات)

إن حاويات وحدات أعمال جافا القديمة المقدمة من العديد من الموردين تطلبت نشرا مزيدا للمعلومات مقارنة بما هو قائم في خاصية وحدة جافا للأعمال. وكانت تستلزم المعلومات الإضافية مثل ملفات XMLالمنفصلة، أو بعض تنسيقات ملفات التشكيل الأخرى. وقد قدمت منصة وحدة جافا للأعمال بصورة عامة أدواتها الخاصة التي سوف تقرأ واصفات الانتشار هذه، ويمكن أن تولد مجموعة من الفئات التي سوف تطبق الواجهات المنزلية والبعيدة لاتي أصبحت الآن غير ذات أهمية.
منذ إصدار وحدة جافا للأعمال 3.0 (JSR 220) فإن واصف XML تم استبداله بمجموعة شروح جافا في تطبيق وحدة الأعمال (على لامستوى المصدري)، بالرغم من أنه لا يزال ممكنا استخدام واصف XML بدلا من (إضافة إلى) الشروح. وإذا تم تطبيق كل من واصف XML شروحه لنفس السبب داخل وحدة الأعمال، فإن تعريف XML سيهيمن على الشرح ذو المستوى المصدري المتصل بها.

تاريخ الإصدار
-------------

### الإصدار النهائي لوحدة جافا للأعمال 3.1 (10 ديسمبر 2009)

JSR 318 إن غرض خاصية وحدة جافا للأعمال 3.1 هو مزيد من التبسيط لبينة وحدة جافا للأعمال من خلال تقليل تعقيده من وجهة نظر المطور، بينما يحاول هذا الإصدار أيضا إضافة وظيفية جديدة استجابة لاحتياجات الجماعة:

* عرض محلي بدون واجهة (عرض بدون واجهة).
* حزمة.war من مكونات وحدة جافا للأعمال.
* وحدة جافا للأعمال لايت EJB LIte: تعريف الأوعية الفرعية لوحدة جافا للأعمال.
* وحدة جافا للأعمال العالمي لأسماء JNDI النقال.
* مفردات (وحدات جلسات فردية).
* بدء التطبيق وأحداث الإغلاق.
* محسنات خدمة موقت وحدة جافا للأعمال.
* تزامن بسيط (@Asynchronous لوحدات الجلسات).

### الإصدار النهائي لوحدة جافا للأعمال 3.0 (11 مايو 2006)

JSR 220 التغيرات الرئيسية: سهل هذا الإصدار من كتابة وحدات جافا للأعمال، من خلال استخدام الشروح بدلا من «واصفات الانتشار» المعقدة المستخدمة في النسخة 2.x. إن استخدام الواجهات المنزلية والواجهات البعيدة وملف ejb-jar.xml كان أيضا غير مطلوب في هذا الإصدار، وقد حل محله واجهة أعمال ووحدة تطبق الواجهة.

### الإصدار النهائي لوحدة جافا للأعمال 2.1 (24 نوفمبر 2003)

JSR 153 التغيرات الرئيسية

* دعم خدمة الويب (جديدة): جلسات وحدات بدون حالة يمكنها بعث SOAP/HTTP. كما يمكن لوحدة جافا للأعمال أن يلج بسهولة إلى خدمة الويب باستخدام مرجع خدمات جديدة.
* خدمة توثيت وحدة جافا للأعمال (جديدة): وهو الآلية القائمة على الحدث لحث وحدات جافا للأعمال في أوقات معينة.
* تقبل الوحدات القائمة على الرسائل الرسائل من مصادر أخرى غير خدمات رسائل جافا.
* وجهات الرسائل (نفس فكرة إحالات وحدة جافا للأعمال، وإحالات المصادر، الخ) تمت إضافتها.
* إضافات لغة استعلام لوحدة جافا للأعمال (EJB-QL): ORDER BY, AVG, MIN, MAX, SUM, COUNT, MOD.
* آلية XML مستخدمة لتحديد واصفات الانتشار، وتحل محل DTDs

### الإصدار النهائي لوحدة جافا للأعمال 1.1 (17 ديسمبر 1999)

التغيرات الرئيسية:

* واصفو نشر إكس إم إل XML.
* سياقات JNDI أولية.
* الاستدعاءات الاجرائية البعيدة باستخدام RMI-IIOP (Remote Method Invocation Over Internet Orb Protocol).
* الأمن المدفوع بالدور، وليس القائم على الطريقة.
* دعم كيان بين- إلزامي، وليس اختياري.

أهداف الإصدار 1.1:

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

المراجع
-------

1. ↑  "Release 4.0.1". 4 مايو 2022. اطلع عليه بتاريخ 24 أكتوبر 2022. `{{استشهاد ويب}}`: تحقق من التاريخ في: `|access-date=` و`|date=` (مساعدة)
2. ↑  *J2EE Design and Development*, © 2002 Wrox Press Ltd. p. 5.
3. ↑  *J2EE Design and Development*, © 2002 Wrox Press Ltd. p. 19.
4. ↑  JSR 318, 4.1,  نسخة محفوظة 2020-08-05 على موقع واي باك مشين.
5. ↑  "Optional Local Business Interfaces - Ken Saks's Blog". مؤرشف من الأصل في 2009-04-06.
6. ↑  JSR 318, 4.5,  نسخة محفوظة 2020-08-05 على موقع واي باك مشين.
7. ↑  JSR 318, 4.6,  نسخة محفوظة 2020-08-05 على موقع واي باك مشين.
8. ↑  JSR 318, 4.10.3,  نسخة محفوظة 2020-08-05 على موقع واي باك مشين.
9. ↑  JSR 318, 4.3.14, 21.4.2,  نسخة محفوظة 2020-08-05 على موقع واي باك مشين.
10. ↑  "Extended Persistence Context in Stateful Session Beans : Enterprise Tech Tips". مؤرشف من الأصل في 2009-08-03.
11. ↑  JSR 318, 5.1,  نسخة محفوظة 2020-08-05 على موقع واي باك مشين.
12. ↑  JSR 318, 5.7.2,  نسخة محفوظة 2020-08-05 على موقع واي باك مشين.
13. ↑  JSR 318, 5.4.2,  نسخة محفوظة 2020-08-05 على موقع واي باك مشين.
14. ↑  JSR 318, 5.6.2,  نسخة محفوظة 2020-08-05 على موقع واي باك مشين.
15. ↑  Developing Quartz MDB نسخة محفوظة 04 مايو 2012 على موقع واي باك مشين.
16. ↑  The Java Community Process(SM) Program - JSRs: Java Specification Requests - detail JSR# 318 نسخة محفوظة 07 نوفمبر 2017 على موقع واي باك مشين.
17. ↑  JSR 318, 2.7,  نسخة محفوظة 2020-08-05 على موقع واي باك مشين.
18. ↑  JSR 318, Chapter 13,  نسخة محفوظة 2020-08-05 على موقع واي باك مشين.
19. ↑  JSR 318, 13.6.2,  نسخة محفوظة 2020-08-05 على موقع واي باك مشين.
20. ↑  Transaction Annotations نسخة محفوظة 26 أبريل 2011 على موقع واي باك مشين.
21. ↑  JSR 318, 13.3.6,  نسخة محفوظة 2020-08-05 على موقع واي باك مشين.
22. ↑  JSR 318, 4.4,  نسخة محفوظة 2020-08-05 على موقع واي باك مشين.
23. ↑  "Portable Global JNDI names - MaheshKannan". مؤرشف من الأصل في 2010-04-24. اطلع عليه بتاريخ 2020-09-10.
24. ↑  "Portable Global JNDI Names - Ken Saks's Blog". مؤرشف من الأصل في 2009-04-06.
25. ↑  JSR 318, Chapter 17,  نسخة محفوظة 2020-08-05 على موقع واي باك مشين.
26. ↑  Security Annotations نسخة محفوظة 26 أبريل 2011 على موقع واي باك مشين.

* أيقونة بوابةبوابة برمجة الحاسوب
* أيقونة بوابةبوابة علم الحاسوب