إنتربرايز جافابين
وحدة جافا للأعمال 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). 
وتعمل خاصية وحدة جافا للأعمال على تقديم طريقة قياسية لتطبيق شفرة "أعمال" النهاية الخلفية الموجودة نمطيا في تطبيقات الأعمال (كما هو نقيض لشفرة واجهة "النهاية الأمامية"). وكانت مثل هذه الشفرة موجودة باستمرار لتناول نفس أنواع المشكلات، ووجد كذلك أن الحلول لهذه المشكلات يعاد تطبيقها بصورة متكررة من قبل المبرمجين. وكان وحدة جافا للأعمال يهدف إلى تناول مثل هذه الاهتمامات كقضية هامة، وتكامل عملياتي، والأمن بطريقة قياسية، تاركة المبرمجين أحرارا في التركيز على المشكلة الخاصة المتاحة. 
ووفقا لذلك، فإن خاصية وحدة جافا للأعمال تفصل كيفية تقديم خادم للتطبيق:
إضافة إلى ذلك، فإن خاصية وحدة جافا للأعمال تحدد الأدوار التي لعبها حاوية وحدة جافا للأعمال ووحدات جافا للأعمال، وكذلك كيفية نشر وحدات جافا للأعمال في حاوية. لاحظ أن الخاصية الحالية لوحدة جافا للأعمال لا تفصل بصورة مزيدة كيفية تقديم خادم التطبيق للتوكيد (وهي المهمة الموكلة لخاصية لخاصية 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 يعتبر تقريبا واجهة برمجة تطبيق جديدة تماما يحمل القليل من التشابه مع المواصفات السابقة لوحدة جافا للأعمال.
يظهر ما يلي مثالا أساسيا لما يبدو عليه تشفير وحدة جافا للأعمال
ويحدد ما سبق واجهة محلية وتطبيق فئة الخدمة لتوكيد كائن العميل (من خلال كائن رسم الخرائط العلائقية). ويعتني وحدة جافا للأعمال بإدارة المحيط المؤكد، وتكون طريقة العميل المضاف تبادلية وآمنة التشعب من الأساس. وكما ظهر جليا، فإن وحدة جافا للأعمال لا يركز إلا على منطق الأعمال والتوكيد ولا يعرف شيئا عن أي تمثيل خاص.
ويمكن استخدام مثل وحدة جافا للأعمال من قبل فئة ما في شريحة الويب على سبيل المثال كما يلي:
ويحدد ما سبق أوجه خادم جافا JavaServer Faces (JSF) التي تدعم بين والتي يتم ضخ وحدة جافا للأعمال فيها من خلال وسيلة شرح @EJB. إن طريقة العملاء المضافين addCostumer مرتبطة نمطيا ببعض مكونات واجهة المستخدم UI،مثل الأزرار. وعلى العكس من وحدة جافا للأعمال، فإن دعم بين لا يحتوي على أي منطق أعمال أو كود توكيد، لكنه يرسل مثل هذه الاهتمامات لوحدة جافا للأعمال. ويعرف دعم بين تمثيلا خاصا لا يكون لوحدة جافا للأعمال أية معرفة بها.
ويملك وحدة جافا للأعمال نوعين رئيسيين من الوحدات beans:إن وحدات الجلسات الكبيرة هي كائنات أعمال تتمتع بوجود حالة: أي أنها تحتفظ بتتبع ما يستدعيه العميل الذي يتعامل معها من خلال الجلسة ثم يلج إلى مثال الوحدة ويكون قاصرا على عميل واحد في المرة الواحدة. إن حالة وحدات الجلسات الكبيرة يمكن أن تستمر تلقائيا من خلال الحاوية لتحرير الذاكرة بعد توقف ولوج العميل إلى الوحدة لوقت ما. وتمد خاصية JPA سياقا مستمرا يدعم بشكل مميز من قبل وحدات الجلسات الكبيرة.
إن وحدات الجلسات المفردة هي كائنات أعمال لها حالة مشاركة عالميا. إن الولوج المتواتر إلى الوحدة الواحدة والمثال الوحيد يمكن التحكم فيه من قبل الحاوية (تواتر إدارة الحاوية CMC) أو من خلال الوحدة ذاتها (تواتر إدارة الوحدة BMC). ويمكن لتواتر إدارة الحاوية أن تستخدم شرح @Lock، وهو الذي يصمم ما إذا كان قفل القراءة أو قفل الكتابة سيستخدم كطريقة استدعاء. إضافة إلى ذلك فإن وحدات الجلسات المفردة يمكنها ان تطلب بصورة متميزة أن تكون مماثلة عند تشغيل حاولة وحدة جافا للأعمال، باستخدام شرح @Startup.إن الوحدات القائمة على الرسائل هي كائنات أعمال يكون تنفيذها مرتبطا بالرسائل بدلا من طريقة الاستدعاءات. وتستخدم الوحدات القائمة على الرسائل بين نظم أخرى لتقديم تجريد عالي المستوى وسهل الاستخدام للمستوى الأدنى من خاصية خدمات رسائل الجافا JMS. ويمكنها أنم تلتحق بصفوف أو الرسائل النصية لخدمات رسائل الجافا، والتي يتم ضخها آليا في الوحدة. وتتم إضافتها في وحدة جافا للأعمال للسماح بالمعالجة القائمة على الحدث. وعلى غير شاكلة وحدات الجلسات، فإن MDB ليس بها عرض للعميل (محلي/ بعيد/ بدون واجهة)، أي أنه لا يمكن للعملاء أن الإطلاع على مثال MDB. إنها تستمتع فحسب للرسائل الواردة حول، على سبيل المثال، صف خدمات رسائل جافا أو موضوع أو عمليات معالجتها آليا. ولا يكون دعم خدمات رسائل جافا مطلوبا إلا من قبل خاصية EE،, لكن الوحدات القائمة على الرسائل يمكنها دعم بروتوكولات الإرسال الأخرى. ويمكن أن تكون مثل هذه البروتوكولات غير متزامنة لكنها يمكن أن تكون أيضا متزامنة. ولأن وحدات الجلسات يمكنها أيضا أن تكون متزامنة أو غير متزامنة، فغن الاختلاف الرئيسي بين وحدات الجلسات والوحدات القائمة على الرسائل ليس اختلافا متعلقا بالتزامن، لكنه اختلاف بين طريقة الاستدعاء والإرسال (القائمتين على الكائن)
كما استخدمت الإصدارات السابقة من وحدة جافا للأعمال نوعا من الوحدات معروف باسم وحدة الكيان 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 نشطة من الأساس بالنسبة لاستدعاء وحدات الجلسات. وهكذا فإنه ليست هناك حاجة لتشكيل مميز. ويمكن تحويل هذا السلوك من خلال الوحدة عبر الشروح وإذا اقتضت الحاجة فإن مثل هذا التشكيل يمكن أن يصبح لاحقا مسيطرا في واصفات الانتشار. ويتضمن ذلك وقف التعاملات للوحدة ككل أو للطرق المحددة، أو طلب استراتيجيات بديلة لنشر التعامل وبدء أو الانضمام لعملية. وتتعامل مثل هذه الاستراتيجيات أساسا مع ما سوف يحدث إذا لم تتقدم العملية أو تطورت بالفعل في وقت استدعاء الوحدة:
وبدلا من ذلك فإنه يمكن للوحدة أيضا أن تعلن من خلال شرح ما أنها تريد القيام بعمليات بطريقة برمجية من خلال واجهة برمجة تطبيق تابعة لـ JTA. إن نمط التشغيل هذا يطلق عليه المعاملات المدارة بالوحدة BMT، لأن الوحدة نفسها تتناول المعاملات بدلا من الحاوية.
خدمات رسائل جافا مستخدمة لإرسال الرسائل من الوحدات beans إلى كائنات العميل، ومن أجل تمكين العملاء من استقبال رسائل غير متزامنة من هذه الوحدات. ويمكن استخدام MDB لاستقبال الرسائل من تطبيقات العميل بصورة غير متزامنة باستخدام إما صف أو موضوع خدمات رسائل جافا
وكبديل للإدخال، فإن عملاء وحدة جافا للأعمال يمكنهم الحصول على إحالة لكائن وسيط لوحدة الجلسات (بذرة وحدة جافا للأعمال) باستخدام JNDI، ويمكن استخدام هذا البديل في الحالات التي يكون فيها الإدخال غير متاح، مثل الوحدات غير المدارة أو عملاء جافا SE البعيدون، أو عندما يكون ضروريا التحديد من الناحية البرمجية أية وحدة يجب الحصول عليها. 
أسماء واجهة جافا للتسمية والدليل Java Naming and Directory Interface JNDI لوحدات جلسات وحدة جافا للأعمال تم تحديدها من قبل حاوية وحدة جافا للأعمال من خلال الآلية التالية:
"(المداخل في الأقواس المربعة تشير لأجزاء اختيارية)"
يمكن لوحدة واحدة أن يحصل عليها من أي اسم متصل بالأنماط السابقة، واعتمادا على "موقع" العميل. إن العملاء في نفس الوحدة Module كالوحدة Bean المطلوبة يمكن أن تستخدم نطاقا أكبر من الوحدات، إن العملاء في نفس التطبيق كالوحدة المطلوبة التي تستخدم نطاقا تطبيقيا وما هو أعلى منه، الخ.
على سبيل المثال فإن كود التشغيل في نفس الوحدة مثل وحدة خدمة العملاء (كما هو مقدم من قبل المثال الظاهر سابقا في هذا المقال) سوف يستخدم الكود التالي للحصول على إحالة (محلية) له:
تعتبر حاوية وحدة جافا للأعمال مسئولة عن ضمان أن كود العميل له حقوق ولوج كافية لوحدة جافا للأعمال.
بصدور وحدة جافا للأعمال 2.1 وما سبقه، فإنه كان على كل وحدة جافا للأعمال أن يقدم فئة تطبيق للجافا وواجهتي جافا. وقد كونت حاوية وحدة جافا للأعمال أمثلة لفئة تطبيق الجافا لتقديم تطبيق وحدة جافا للأعمال. وكانت واجهات جافا مستخدمة من قبل كود العميل لوحدة جافا للأعمال. 
وتتم الإشارة إلى الواجهتين باعتبارهما واجهتين منزلية وبعيدة، ومحددة التوقيعات للطرق البعيدة لوحدة جافا للأعمال. وتنقسم الطرق إلى مجموعتين:
بصدور وحدة جافا للأعمال 2.1 وما سبقه، فإن خاصية وحدة جافا للأعمال تطلبت وجود واصفات انتشار. وكانت هناك حاجة إلى ذلك من أجل تطبيق آلية تسمح لوحدات جافا للأعمال بالانتشار بطريقة مستمرة بغض النظر عن المنصة الخاصة بوحدة جافا للأعمال التي كان قد تم اختيارها. إن المعلومات عن كيفية البدء في نشر الوحدة bean(مثل اسم الواجهات المنزلية أو الواجهات البعيدة، ومسألة تخزين أو كيفية تخزين الوحدة في قاعدة البيانات، الخ) كان من الواجب تحديدها في واصفات الانتشار. 
إن واصفات الانتشار وثيقة بتنسيق XMLيمكنها الدخول على كل وحدات جافا للأعمال التي سيتم نشرها. وتحدد وثيق XML هذه المعلومات لاتالية لكل وحدة جافا للأعمال:إن حاويات وحدات أعمال جافا القديمة المقدمة من العديد من الموردين تطلبت نشرا مزيدا للمعلومات مقارنة بما هو قائم في خاصية وحدة جافا للأعمال. وكانت تستلزم المعلومات الإضافية مثل ملفات XMLالمنفصلة، أو بعض تنسيقات ملفات التشكيل الأخرى. وقد قدمت منصة وحدة جافا للأعمال بصورة عامة أدواتها الخاصة التي سوف تقرأ واصفات الانتشار هذه، ويمكن أن تولد مجموعة من الفئات التي سوف تطبق الواجهات المنزلية والبعيدة لاتي أصبحت الآن غير ذات أهمية. 
منذ إصدار وحدة جافا للأعمال 3.0 (JSR 220) فإن واصف XML تم استبداله بمجموعة شروح جافا في تطبيق وحدة الأعمال (على لامستوى المصدري)، بالرغم من أنه لا يزال ممكنا استخدام واصف XML بدلا من (إضافة إلى) الشروح. وإذا تم تطبيق كل من واصف XML شروحه لنفس السبب داخل وحدة الأعمال، فإن تعريف XML سيهيمن على الشرح ذو المستوى المصدري المتصل بها.
JSR 318 إن غرض خاصية وحدة جافا للأعمال 3.1 هو مزيد من التبسيط لبينة وحدة جافا للأعمال من خلال تقليل تعقيده من وجهة نظر المطور، بينما يحاول هذا الإصدار أيضا إضافة وظيفية جديدة استجابة لاحتياجات الجماعة:
JSR 220 التغيرات الرئيسية: سهل هذا الإصدار من كتابة وحدات جافا للأعمال، من خلال استخدام الشروح بدلا من "واصفات الانتشار" المعقدة المستخدمة في النسخة 2.x. إن استخدام الواجهات المنزلية والواجهات البعيدة وملف ejb-jar.xml كان أيضا غير مطلوب في هذا الإصدار، وقد حل محله واجهة أعمال ووحدة تطبق الواجهة.
JSR 153 التغيرات الرئيسية
التغيرات الرئيسية:
أهداف الإصدار 1.1: