การพัฒนาระบบจองธุรกิจโดยใช้เทคโนโลยี EJB
ผู้เขียน:Eve Cole
เวลาอัปเดต:2009-07-02 17:12:35
เทคโนโลยีมีการใช้มากขึ้นในการพัฒนาระบบเครือข่ายขนาดใหญ่ ในบทความนี้ ผู้เขียนจะแนะนำคำจำกัดความของ EJB (Enterprise Java Beans) แบบจำลองโครงสร้างระบบแอปพลิเคชันที่ใช้เทคโนโลยี EJB และเนื้อหาและการจำแนกประเภทของ EJB ส่วนประกอบสุดท้ายรวมกับ EJB-based ได้พัฒนาระบบการจองธุรกิจโดยใช้แบบจำลองโครงสร้างและส่วนประกอบ EJB
EJB ไม่ใช่ "ผลิตภัณฑ์" ในทางเทคนิค แต่เป็นข้อกำหนดทางเทคนิค คำจำกัดความของ EJB ของ SUN คือ โครงสร้างของ EJB เป็นโครงสร้างส่วนประกอบสำหรับการพัฒนาและกำหนดค่าแอปพลิเคชันทางธุรกิจแบบกระจายตามส่วนประกอบ แอปพลิเคชันที่พัฒนาด้วยโครงสร้าง EJB สามารถปรับขนาดได้ ทำธุรกรรมได้ และมีความปลอดภัยสำหรับผู้ใช้หลายคน แอปพลิเคชันเหล่านี้อาจจำเป็นต้องเขียนเพียงครั้งเดียว แต่สามารถนำไปใช้งานบนแพลตฟอร์มเซิร์ฟเวอร์งานที่รองรับข้อกำหนด EJB โดยทั่วไป EJB คือโมเดลส่วนประกอบฝั่งเซิร์ฟเวอร์มาตรฐานสำหรับการมอนิเตอร์ธุรกรรมส่วนประกอบ
แบบจำลองโครงสร้างระบบที่ใช้เทคโนโลยี EJB
โครงสร้าง EJB เป็นโครงสร้างส่วนประกอบฝั่งเซิร์ฟเวอร์ ซึ่งเป็นโครงสร้างแบบลำดับชั้น ดังแสดงในรูปที่ 1 โดยทั่วไปโมเดลโครงสร้างนี้สามารถแบ่งออกเป็นชั้นลูกค้า ชั้นตรรกะทางธุรกิจ และชั้นข้อมูล ผู้เขียนจะให้คำแนะนำสั้นๆ เกี่ยวกับเรื่องนี้ด้านล่าง
รูปที่ 1: โมเดลโครงสร้างแอปพลิเคชันที่ใช้ EJB
เลเยอร์ไคลเอนต์ส่วนใหญ่จะใช้เพื่อตอบสนองความต้องการการเข้าถึงที่หลากหลายสำหรับทั้งระบบและจัดการงานต่อไปนี้:
รับข้อมูลของผู้ใช้ วิเคราะห์และตรวจสอบข้อมูลของผู้ใช้และดำเนินการตามนั้น
แสดงผลการทำงานที่ส่งจากระดับสูงฝั่งเซิร์ฟเวอร์
เลเยอร์ไคลเอนต์มักจะประกอบด้วยกระบวนการไคลเอนต์ซึ่งเบราว์เซอร์สร้างและทำลายแบบไดนามิก
ชั้นตรรกะทางธุรกิจ นี่คือส่วนที่สำคัญที่สุดของทั้งระบบ เลเยอร์ตรรกะทางธุรกิจมักจะแบ่งออกเป็นสองชั้น ชั้นบนเป็นเลเยอร์รับคำขอ (โดยทั่วไปเรียกว่าเลเยอร์เว็บ) ซึ่งใช้เพื่อรับคำขอจากเบราว์เซอร์และถ่ายโอนคำขอไปยังชั้นล่างเพื่อประมวลผลผล จะถูกส่งไปยังเบราว์เซอร์ กระบวนการเหล่านี้ส่วนใหญ่ประกอบด้วยเพจ JSP, Applets บนเว็บ และ Servlets ที่แสดงเพจ HTML ชั้นล่างสุดคือเลเยอร์การประมวลผลคำขอ (โดยทั่วไปเรียกว่าเลเยอร์ EJB) ซึ่งรวมถึงกระบวนการฟัง กระบวนการประมวลผล และกระบวนการดำเนินการฐานข้อมูล มีหน้าที่รับผิดชอบในการประมวลผลคำขอของลูกค้าจากเลเยอร์การรับคำขอและประมวลผลคำขอเหล่านั้น และในเวลาเดียวกัน ส่งผลคำขอไปยังชั้นรับคำขอ หากจำเป็น ผลการประมวลผลจะต้องถูกส่งไปยังชั้นข้อมูลเพื่อจัดเก็บ
ชั้นข้อมูลส่วนใหญ่จะให้บริการข้อมูลสำหรับชั้นตรรกะทางธุรกิจ เช่น การจัดเก็บผลการประมวลผลของชั้นตรรกะทางธุรกิจ และการส่งคืนผลลัพธ์ข้อมูลที่ดึงมาจากชั้นตรรกะทางธุรกิจ นอกจากนี้ยังใช้เพื่อป้องกันการเปลี่ยนแปลงในแหล่งข้อมูลด้วย เมื่อฐานข้อมูลมีการเปลี่ยนแปลงเราเพียงแต่ใช้คำสั่งเพื่อเชื่อมต่อกับแหล่งข้อมูล
การจำแนกประเภทของส่วนประกอบ EJB โดยปกติ ส่วนประกอบ EJB ฝั่งเซิร์ฟเวอร์มีอยู่สองประเภทพื้นฐาน: Entity Bean และ Session Bean
รูปที่ 2: สถาปัตยกรรมของระบบจองธุรกิจ
Entity Beans เป็นโมเดลที่สร้างขึ้นสำหรับวัตถุในโลกแห่งความเป็นจริง ซึ่งโดยปกติแล้วจะเป็นบันทึกถาวรในฐานข้อมูล Entity Bean สร้างแบบจำลองสำหรับแนวคิดทางธุรกิจที่สามารถแสดงเป็นคำนามได้ โดยอธิบายทั้งสถานะของวัตถุในโลกแห่งความเป็นจริงและพฤติกรรมของวัตถุเหล่านั้น และช่วยให้นักพัฒนาสามารถสรุปข้อมูลและกฎเกณฑ์ทางธุรกิจที่เกี่ยวข้องกับแนวคิดเฉพาะได้ Session Bean คือ Enterprise Bean ที่สร้างขึ้นผ่าน Home Interface และมีไว้สำหรับการเชื่อมต่อไคลเอ็นต์โดยเฉพาะ โดยทั่วไปแล้วอินสแตนซ์ของ Session bean จะไม่แชร์กับไคลเอ็นต์อื่น Session Bean เป็นส่วนขยายของแอปพลิเคชันไคลเอนต์และรับผิดชอบในการจัดการกระบวนการหรืองานทั้งหมด Session Beans สามารถจัดการการโต้ตอบระหว่าง Entity Beans โดยอธิบายว่าเอนทิตีทำงานร่วมกันอย่างไรเพื่อทำงานพิเศษให้สำเร็จ
Entity bean สามารถแบ่งออกเป็นถั่วที่จัดการโดยคอนเทนเนอร์ และถั่วที่จัดการโดยใช้ถั่วตามวิธีจัดการความคงอยู่ Beans ที่จัดการโดยคอนเทนเนอร์ได้รับการจัดการโดยอัตโนมัติโดยคอนเทนเนอร์ EJB คอนเทนเนอร์ทราบว่าฟิลด์ของอินสแตนซ์ Bean ถูกแมปกับฐานข้อมูลอย่างไร และจัดการการแทรก อัปเดต และการลบข้อมูลที่เกี่ยวข้องกับเอนทิตีในฐานข้อมูลโดยอัตโนมัติ จัดการความพากเพียร Beans ต้องทำทั้งหมดนี้อย่างชัดเจน นักพัฒนา Bean ต้องเขียนโค้ดเพื่อใช้งานฐานข้อมูล คอนเทนเนอร์ EJB จะบอกอินสแตนซ์ Bean เท่านั้นเมื่อสามารถแทรก อัปเดต และลบข้อมูลในฐานข้อมูลได้อย่างปลอดภัย นอกจากนี้ คอนเทนเนอร์ดังกล่าวไม่ได้ให้ความช่วยเหลืออื่นใดอีกด้วย อินสแตนซ์ bean ทำหน้าที่คงอยู่ทั้งหมดด้วยตัวเอง
Session Beans สามารถแบ่งออกเป็น stateless bean และ stateful bean ขึ้นอยู่กับว่าเป็น stateless หรือไม่ Stateless Session Beans มีแนวโน้มที่จะใช้งานได้หลากหลายและสามารถนำมาใช้ซ้ำได้ Session Beans แบบมีสถานะเป็นส่วนขยายของแอปพลิเคชันไคลเอนต์ที่ทำงานในนามของไคลเอนต์และรักษาสถานะที่เกี่ยวข้องกับไคลเอนต์
การพัฒนาระบบการจองห้องโดยสารเป็นระบบการจองธุรกิจที่ใช้เทคโนโลยีส่วนประกอบ EJB ที่พัฒนาบนแพลตฟอร์ม J2EE กระบวนการหลักคือหลังจากที่ผู้ใช้เข้าสู่ระบบ เขาจะถูกพาไปยังหน้าการเลือกลูกค้าและหน้าการเลือกการนำทาง และจะให้ลูกค้าเลือกห้องโดยสารที่มีอยู่ (รับรายการห้องโดยสารที่มีอยู่จาก TravelAgentBean เมธอด listAvailableCabin() ของ TravelAgentBean ถูกเรียกโดย Servlet ที่สร้างหน้าเว็บนี้ รายการห้องโดยสารจะถูกใช้เพื่อสร้าง กล่องรายการ HTML บนหน้าเว็บที่โหลดลงในเบราว์เซอร์ของผู้ใช้) เมื่อผู้ใช้เลือกห้องโดยสารและส่งการเลือก คำขอ HTTP จะถูกส่งไปยังเซิร์ฟเวอร์ EJB (Websphere Application Server) หลังจากที่เซิร์ฟเวอร์ได้รับคำขอ คำขอก็จะจัดส่งไป ไปยัง ReserveServlet Servlet นี้เรียกใช้เมธอด TravelAgent.BookPassage() เพื่อทำการจองจริง ข้อมูลแท็กที่ส่งคืนโดยเมธอด BookPassage() จะถูกนำมาใช้เพื่อสร้างหน้าเว็บอื่นที่ถูกส่งกลับไปยังเบราว์เซอร์ของผู้ใช้ หากการจองสำเร็จ ProcessPaymentServlet จะเรียกวิธีการชำระเงินใน ProcessPaymentBean เพื่อดำเนินการกระบวนการเรียกเก็บเงินให้กับลูกค้า โครงสร้างเฉพาะของมันแสดงในรูปที่ 2
ส่วนประกอบ EJB ในระบบการจองส่วนใหญ่จะประกอบด้วยส่วนต่างๆ ดังต่อไปนี้:
CabinBean: Entity Bean คีย์หลักคือ CabinPK ซึ่งเป็นเอนทิตี Bean ที่ใช้ในการห่อหุ้มห้องโดยสารของเรือในโลกแห่งความเป็นจริง
CustomerBean: Entity Bean คีย์หลักคือ CustomerPK ซึ่งเป็นเอนทิตี Bean ที่ใช้ในการสรุปผู้บริโภคที่ต้องการจองห้องโดยสารบนเรือสำราญในโลกแห่งความเป็นจริง
CruiseBean: Entity Bean คีย์หลักคือ CruisePK ซึ่งเป็นเอนทิตี Bean ที่ใช้ในการสรุปเส้นทางเรือในโลกแห่งความเป็นจริง ReserveBean: Entity Bean คีย์หลักคือ CruiseID, CabinID ซึ่งแสดงถึงบันทึกที่ไม่เปลี่ยนแปลงในฐานข้อมูล นั่นคือ การจอง โดยจะบันทึกเหตุการณ์ในอดีตของระบบการจอง โดยส่วนใหญ่จะใช้เพื่อป้องกันการจองซ้ำซ้อน ลูกค้าสองรายจองเส้นทางเดียวกัน สาเหตุของปัญหานี้คือมีช่องว่างระหว่างเวลาที่ลูกค้าเลือกห้องโดยสารและเส้นทางกับเวลาที่เรียกใช้เมธอด bookPassage() TravelAgentBean: stateful session bean ซึ่งเป็นเซสชันที่รับผิดชอบขั้นตอนการจองห้องโดยสารเที่ยวบิน โดยสรุปกระบวนการดำเนินการจองเส้นทางให้เสร็จสิ้น และใช้ในแอปพลิเคชันไคลเอนต์ของตัวแทนการท่องเที่ยวทั่วโลก TravelAgentBean ไม่เพียงตอบสนองความต้องการของผู้บริโภคในการจองตั๋วเท่านั้น แต่ยังให้ข้อมูลเกี่ยวกับห้องโดยสารที่เหลือระหว่างการเดินทางอีกด้วย เพื่อให้งานนี้สำเร็จ Bean จำเป็นต้องทราบว่าการจองประกอบด้วยเส้นทางใด ห้องโดยสาร และลูกค้า หลังจากรวบรวมข้อมูลนี้แล้ว วิธี bookPassage() จะดำเนินการขั้นตอนการจองให้เสร็จสิ้น โดยจะเป็นผู้รับผิดชอบการเรียกเก็บเงินของลูกค้า ในเส้นทางที่ถูกต้อง จองห้องโดยสารที่เลือกบนเรือที่ถูกต้องและสร้างตั๋วสำหรับลูกค้าผ่านชั้นตั๋ว ที่นี่ เราจำเป็นต้องใช้คลาส CreditCard เพื่อจัดเก็บข้อมูลที่เกี่ยวข้องเกี่ยวกับบัตรเครดิตของลูกค้า ในเวลาเดียวกัน เมธอด ListAvailableCabins() จะถูกใช้เพื่อแสดงห้องโดยสารว่างที่ยังไม่ได้จอง
ProcessPaymentBean: Stateless session bean ซึ่งเป็นกระบวนการเรียกเก็บเงินจากผู้บริโภคในระบบธุรกรรม โดยกำหนดวิธีการทำธุรกรรมสามวิธีสำหรับการชำระเงินด้วยเช็ค เงินสด และบัตรเครดิต ได้แก่ ByCheck(), ByCash() และ ByCredit()
ตัวอย่างโค้ดโปรแกรมของระบบการจองธุรกิจทั้งหมดได้รับการพัฒนาภายใต้ IBM VisualAge สำหรับ Java ในสภาพแวดล้อมการพัฒนา IDE นี้ เอนทิตี bean จะพัฒนาได้ง่ายกว่า session bean มาก ข้อมูลต่อไปนี้ใช้ TravelAgentBean เป็นตัวอย่างในการแนะนำกระบวนการพัฒนา ของส่วนประกอบ EJB:
1. อินเทอร์เฟซระยะไกลของ TravelAgent มีวิธีกำหนดเส้นทางและ ID ห้องโดยสารที่ลูกค้าต้องการจอง นอกจากนี้ ยังมีการตั้งค่าเมธอด boolPassage() เพื่อเรียกเก็บเงินจากลูกค้าสำหรับการจองและสร้างตั๋วให้กับลูกค้า รหัสเฉพาะมีดังนี้:
แพ็คเกจ com.titan.travelagent;
นำเข้า java.rmi.RemoteException;
นำเข้า javax.ejb.FinderException;
นำเข้า com.titan.cruise.Cruise;
นำเข้า com.titan.customer.Customer;
นำเข้า com.titan.processPayment.CreditCard;
อินเทอร์เฟซสาธารณะ TravelAgent ขยาย javax.ejb.EJBObject
-
โมฆะสาธารณะ setCruiseID (การล่องเรือ int) พ่น RemoteException, FinderException;
public int getCruiseID () พ่น RemoteException, IncompleteConversationalState;
โมฆะสาธารณะ setCabinID (int Cabin) พ่น RemoteException, FinderException;
สาธารณะ int getCabinID () พ่น RemoteException, IncompleteConversationalState;
สาธารณะ int getCustomerID () พ่น RemoteException, IncompleteConversationalState;
ตั๋วสาธารณะ boolPassage (บัตรเครดิต, ราคาสองเท่า) พ่น RemoteException, IncompleteConversationalState;
-
2. อินเทอร์เฟซหน้าแรกของ TravelAgent
รหัสอินเทอร์เฟซ TravelAgent Home เป็นดังนี้:
puckage com.titan.tracelagent;
นำเข้า java.rmi.RemoteException;
นำเข้า javax.ejb.CreateException;
นำเข้า com.titan.customer.Customer;
อินเทอร์เฟซสาธารณะ TravelAgentHome ขยาย javax.ejb.EJBHome {
การสร้าง TravelAgent สาธารณะ (ลูกค้า) พ่น RemoteException, CreateException;}
3. คลาส TravelAgent Bean จำเป็นต้องนำลักษณะการทำงานทั้งหมดไปใช้ในอินเทอร์เฟซระยะไกลและอินเทอร์เฟซหน้าแรกของ TravelAgent เนื่องจากข้อจำกัดด้านพื้นที่ บทความนี้จะไม่แนะนำโค้ดการใช้งาน ผู้อ่านที่สนใจสามารถดำเนินการได้ด้วยตนเอง
จากขั้นตอนข้างต้น เราได้เสร็จสิ้นการพัฒนาส่วนประกอบ EJB ของระบบการจองธุรกิจ