تطوير نظام حجز الأعمال المعتمد على تقنية EJB
الكاتب:Eve Cole
وقت التحديث:2009-07-02 17:12:35
تم استخدام التكنولوجيا بشكل متزايد في تطوير أنظمة الشبكات واسعة النطاق، وسيقدم المؤلف في هذه المقالة تعريف EJB (Enterprise Java Beans)، ونموذج هيكل نظام التطبيق القائم على تقنية EJB، ومحتوى وتصنيف EJB. أخيرًا، تم دمجها مع EJB القائم على تطوير نظام حجز الأعمال باستخدام النموذج الهيكلي ومكونات EJB.
EJB ليس "منتجًا" من الناحية الفنية، ولكنه مواصفات فنية. تعريف SUN لـ EJB هو: هيكل EJB هو هيكل مكون لتطوير وتكوين تطبيقات الأعمال الموزعة القائمة على المكونات. التطبيقات التي تم تطويرها باستخدام هياكل EJB قابلة للتطوير، وإجراء المعاملات، وآمنة لعدة مستخدمين. قد تحتاج هذه التطبيقات إلى الكتابة مرة واحدة فقط، ولكن يمكن نشرها على منصة خادم المهام التي تدعم مواصفات EJB. بشكل عام، EJB هو نموذج مكون قياسي من جانب الخادم لمراقبة معاملات المكونات.
نموذج هيكل النظام يعتمد على تقنية EJB
هيكل EJB عبارة عن هيكل مكون من جانب الخادم، وهو هيكل هرمي موضح في الشكل 1. يمكن عادةً تقسيم هذا النموذج الهيكلي إلى طبقة العميل وطبقة منطق الأعمال وطبقة البيانات. وسيقدم المؤلف مقدمة موجزة عن ذلك أدناه.
الشكل 1: نموذج هيكل التطبيق القائم على EJB
تُستخدم طبقة العميل بشكل أساسي لتلبية متطلبات الوصول المختلفة للنظام بأكمله والتعامل مع المهام التالية:
تلقي مدخلات المستخدم وتحليلها والتحقق من مدخلات المستخدم ومعالجتها وفقًا لذلك؛
يعرض نتائج التشغيل المرسلة من المستوى العالي من جانب الخادم.
تتكون طبقة العميل عادةً من عمليات العميل، والتي يتم إنشاؤها وتدميرها ديناميكيًا بواسطة المتصفح.
طبقة منطق الأعمال هذا هو الجزء الأكثر أهمية في النظام بأكمله. تنقسم طبقة منطق الأعمال عادةً إلى طبقتين. الطبقة العليا هي طبقة استقبال الطلب (تسمى عادةً طبقة الويب)، والتي تُستخدم لتلقي الطلبات من المتصفح ونقل الطلبات إلى الطبقة السفلية لمعالجة نتائج المعالجة يتم إرسالها إلى المتصفح. تتكون هذه العمليات بشكل أساسي من صفحات JSP والتطبيقات المستندة إلى الويب وServlets التي تعرض صفحات HTML. الطبقة السفلية هي طبقة معالجة الطلب (تسمى عمومًا طبقة EJB)، والتي تتضمن عملية الاستماع وعملية المعالجة وعملية تشغيل قاعدة البيانات، وهي مسؤولة عن معالجة طلبات العملاء من طبقة استقبال الطلب ومعالجتها، وفي نفس الوقت تمرير نتائج الطلب إلى طبقة استقبال الطلب، إذا لزم الأمر، يجب تسليم نتائج المعالجة إلى طبقة البيانات للتخزين.
توفر طبقة البيانات بشكل أساسي خدمات البيانات لطبقة منطق الأعمال، مثل تخزين نتائج المعالجة لطبقة منطق الأعمال وإرجاع نتائج البيانات التي تم استردادها بواسطة طبقة منطق الأعمال، كما يتم استخدامها لحماية التغييرات في مصدر البيانات عندما تتغير قاعدة البيانات، نحتاج فقط إلى تعديلها، فقط استخدم العبارة للاتصال بمصدر البيانات.
تصنيف مكونات EJB عادة، هناك نوعان أساسيان من مكونات EJB من جانب الخادم: Entity Bean وSession Bean.
الشكل 2: بنية نظام حجز الأعمال
Entity Beans هي نماذج مصممة لكائنات في العالم الحقيقي، والتي عادةً ما تكون سجلات ثابتة في قاعدة بيانات. يبني Entity Bean نموذجًا لمفاهيم الأعمال التي يمكن التعبير عنها كأسماء، فهو يصف حالة الكائنات في العالم الحقيقي وسلوكها، ويسمح للمطورين بتغليف البيانات وقواعد العمل المتعلقة بمفاهيم محددة. Session Bean عبارة عن Enterprise Bean تم إنشاؤها من خلال الواجهة الرئيسية ومخصصة لاتصالات العميل ولا تتم مشاركة مثيلات Session Bean بشكل عام مع العملاء الآخرين. تعد Session Bean امتدادًا لتطبيق العميل وهي مسؤولة عن إدارة العملية أو المهمة بأكملها. يمكن لوحدات الجلسة إدارة التفاعل بين وحدات الكيان، وتصف كيفية عملها معًا لإكمال مهمة خاصة.
يمكن تقسيم وحدات الكيان إلى وحدات تتم إدارتها بواسطة الحاوية ووحدات تتم إدارتها باستخدام الوحدات استنادًا إلى الطريقة التي تدير بها الثبات. تتم إدارة الفاصوليا المُدارة بواسطة الحاوية تلقائيًا بواسطة حاوية EJB. تعرف الحاوية كيفية تعيين حقول مثيل Bean إلى قاعدة البيانات، وتدير تلقائيًا إدراج البيانات المتعلقة بالكيان وتحديثها وحذفها في قاعدة البيانات إدارة المثابرة تحتاج إلى القيام بكل هذا بشكل صريح. يجب على مطوري Bean كتابة تعليمات برمجية لتشغيل قاعدة البيانات. تخبر حاوية EJB فقط مثيل Bean عندما يمكنه إدراج البيانات وتحديثها وحذفها بأمان في قاعدة البيانات. بالإضافة إلى ذلك، فهي لا توفر أي مساعدة أخرى. مثيل الفول يعمل كل الثبات بنفسه.
يمكن تقسيم حبوب الجلسة إلى حبوب عديمة الحالة وفاصوليا ذات حالة وفقًا لما إذا كانت ذات حالة. تميل وحدات الجلسة عديمة الحالة إلى أن تكون متعددة الاستخدامات وقابلة لإعادة الاستخدام؛ ووحدات الجلسة ذات الحالة هي امتدادات لتطبيقات العميل التي تكمل المهام نيابة عن العملاء وتحافظ على الحالة المتعلقة بالعميل.
تطوير نظام حجز الأعمال نظام حجز المقصورة هو نظام حجز أعمال يعتمد على تقنية مكونات EJB التي تم تطويرها على منصة J2EE، وتتمثل عمليته الرئيسية في أنه بعد تسجيل دخول المستخدم، سيتم توجيهه من خلال صفحة اختيار العميل وصفحة اختيار التنقل بدوره، وسيزود العميل بتحديد كابينة متاحة (احصل على قائمة بالكبائن المتاحة من TravelAgentBean. يتم استدعاء طريقة listAvailableCabin() الخاصة بـ TravelAgentBean بواسطة Servlet الذي ينشئ صفحة الويب هذه. سيتم استخدام قائمة المقصورة لإنشاء مربع قائمة HTML الموجود على صفحة الويب المحملة في متصفح المستخدم)، عندما يحدد المستخدم مقصورة ويقدم التحديد، سيتم إرسال طلب HTTP إلى خادم EJB (خادم تطبيق Websphere، بعد أن يتلقى الخادم الطلب، يتم إرساله). إلى ReservationServlet. يستدعي Servlet هذا طريقة TravelAgent.BookPassage() لإجراء الحجز الفعلي، سيتم استخدام معلومات العلامة التي يتم إرجاعها بواسطة طريقة BookPassage() لإنشاء صفحة ويب أخرى يتم إرسالها مرة أخرى إلى متصفح المستخدم. إذا تم الحجز بنجاح، فسوف تقوم ProcessPaymentServlet باستدعاء طريقة الدفع في ProcessPaymentBean لتنفيذ عملية الشحن للعميل. يظهر هيكلها المحدد في الشكل 2.
تشتمل مكونات EJB في نظام الحجز بشكل رئيسي على الأجزاء التالية:
CabinBean: Entity Bean، المفتاح الأساسي هو CabinPK، وهو كيان Bean يستخدم لتغليف مقصورة السفينة في العالم الحقيقي.
CustomerBean: Entity Bean، المفتاح الأساسي هو CustomerPK، وهو كيان Bean يستخدم لتغليف المستهلكين الذين يحتاجون إلى حجز كبائن الرحلات البحرية في العالم الحقيقي.
CruiseBean: Entity Bean، المفتاح الأساسي هو CruisePK، وهو كيان Bean يستخدم لتغليف مسارات السفن في العالم الحقيقي. ReservationBean: Entity Bean، المفتاح الأساسي هو CruiseID، CabinID، وهو يمثل سجلًا غير متغير في قاعدة البيانات، أي أنه يسجل الأحداث التاريخية لنظام الحجز، ويستخدم بشكل أساسي لمنع الحجز المزدوج. يحجز عميلان نفس المسار. سبب هذه المشكلة هو وجود فجوة بين الوقت الذي يختار فيه العميل المقصورة والمسار والوقت الذي يتم فيه استدعاء طريقة bookPassage(). TravelAgentBean: وحدة الجلسة المميزة، وهي وحدة الجلسة المسؤولة عن سير عمل حجز حجرات الطيران، وهي تتضمن عملية إكمال عملية الحجز لمسار ما وتستخدم في تطبيقات العملاء الخاصة بوكلاء السفر حول العالم. لا يلبي تطبيق TravelAgentBean احتياجات المستهلكين لحجز التذاكر فحسب، بل يوفر أيضًا معلومات حول المقصورات المتبقية أثناء الرحلة. من أجل إكمال هذه المهمة، يحتاج Bean إلى معرفة المسار والمقصورة والعميل الذي يتكون منه الحجز. بعد جمع هذه المعلومات، تكمل طريقة bookPassage() عملية الحجز وهي المسؤولة عن إعداد فواتير العميل الحساب على المسار الصحيح حجز المقصورة المحددة على السفينة الصحيحة وإنشاء تذكرة للعميل من خلال فئة التذكرة. نحتاج هنا إلى استخدام فئة CreditCard لتخزين المعلومات ذات الصلة ببطاقة ائتمان العميل. وفي الوقت نفسه، يتم استخدام طريقة ListAvailableCabins() لعرض الكبائن المتاحة التي لم يتم حجزها.
ProcessPaymentBean: حبة الجلسة عديمة الحالة، وهي عملية فرض رسوم على المستهلكين في نظام المعاملات. وهو يحدد ثلاث طرق للمعاملات وطرق الدفع بالشيكات والنقد وبطاقات الائتمان، وهي ByCheck() وByCash() وByCredit().
مثال على رمز البرنامج لنظام حجز الأعمال تم تطوير نظام حجز الأعمال بالكامل ضمن IBM VisualAge لـ Java في بيئة تطوير IDE هذه، يعد تطوير وحدات الكيان أسهل بكثير من وحدات الجلسة فيما يلي يستخدم TravelAgentBean كمثال لتقديم عملية التطوير من مكونات EJB:
1. واجهة TravelAgent البعيدة توفر طريقة لتعيين المسار ومعرف المقصورة الذي يريد العميل حجزه. بالإضافة إلى ذلك، تم إعداد الأسلوب boolPassage() لإرسال فاتورة إلى العميل مقابل حجزه وإنشاء تذكرة للعميل. الكود المحدد هو كما يلي:
الحزمة com.titan.travelagent;
import java.rmi.RemoteException;
import javax.ejb.FinderException;
import com.titan.cruise.Cruise;
import com.titan.customer.Customer;
import com.titan.process Payment.CreditCard;
الواجهة العامة TravelAgent تمتد إلى javax.ejb.EJBObject
{
مجموعة الفراغ العام (int Cruise) يطرح RemoteException، FinderException؛
public int getCruiseID() يطرح RemoteException، IncompleteConversationalState؛
public void setCabinID(int Cabin) يلقي RemoteException، FinderException؛
public int getCabinID() يلقي RemoteException، IncompleteConversationalState؛
public int getCustomerID() يلقي RemoteException، IncompleteConversationalState؛
تذكرة عامة boolPassage (بطاقة الائتمان، سعر مزدوج) تطرح RemoteException، IncompleteConversationalState؛
}
2. واجهة TravelAgent الرئيسية
رمز واجهة TravelAgent Home هو كما يلي:
بوكاج com.titan.tracelagent;
import java.rmi.RemoteException;
import javax.ejb.CreateException;
import com.titan.customer.Customer;
الواجهة العامة TravelAgentHome تمتد javax.ejb.EJBHome {
إنشاء TravelAgent العام (عميل العميل) يطرح RemoteException,CreateException;}
3. تحتاج فئة TravelAgent Bean إلى تنفيذ جميع السلوكيات في واجهة TravelAgent البعيدة والواجهة الرئيسية. نظرًا لقيود المساحة، لن تقدم هذه المقالة رمز التنفيذ الخاص بها، ويمكن للقراء المهتمين إكمالها بأنفسهم.
من خلال الخطوات المذكورة أعلاه، أكملنا تطوير مكون EJB لنظام حجز الأعمال.