1. EJB คืออะไร?
EJB (Enterprise Java Beans) เป็นเทคโนโลยีองค์ประกอบแอปพลิเคชันเชิงพาณิชย์ใน Javaee และเป็นหนึ่งในสามองค์ประกอบหลักของ Javaee (Servlet, JSP, EJB) EJB เป็นกรอบสำหรับการอนุญาตให้ลูกค้าใช้วัตถุแบบกระจายระยะไกลทำให้การพัฒนาแอพพลิเคชั่นระดับองค์กรง่ายขึ้นอย่างมาก โครงสร้างองค์ประกอบ EJB เป็นโครงสร้างการคำนวณแบบกระจายตามส่วนประกอบและเป็นส่วนประกอบในระบบแอปพลิเคชันแบบกระจาย
EJB เป็นข้อกำหนดของกรอบบริการฝั่งเซิร์ฟเวอร์ Java และกำหนดข้อกำหนดทางเทคนิคสำหรับระบบส่วนประกอบฝั่งเซิร์ฟเวอร์ ข้อกำหนดนี้สามารถให้สถาปัตยกรรมมาตรฐานกระจายวัตถุ มันปิดกั้นการใช้งานการใช้งานพื้นฐานระดับระบบที่ซับซ้อนสำหรับนักพัฒนาส่วนประกอบและผู้ใช้ช่วยให้นักพัฒนาสามารถมุ่งเน้นไปที่การใช้ตรรกะทางธุรกิจและบริการพื้นฐานที่ซับซ้อนบางอย่างมีหน้าที่รับผิดชอบในคอนเทนเนอร์ EJB EJB สามารถขยายได้ตามการเติบโตของแอปพลิเคชันและเซิร์ฟเวอร์ EJB ให้ฟังก์ชั่นโหลดบาลานซ์รวมถึงการควบคุมการเข้าถึงทรัพยากร
2. การสื่อสารระหว่างคอนเทนเนอร์ EJB และส่วนประกอบ
คอนเทนเนอร์ EJB จัดเตรียมสภาพแวดล้อมการดำเนินงานสำหรับส่วนประกอบ EJB วิธีที่คอนเทนเนอร์ EJB จัดการ EJBS นั้นคล้ายคลึงกับวิธีที่เว็บคอนเทนเนอร์จัดการ Servlets EJBS จะต้องทำงานในภาชนะ EJB คอนเทนเนอร์ EJB ส่วนใหญ่จัดการการคงอยู่ของ EJB การจัดการวงจรชีวิตการจัดการความปลอดภัยการจัดการธุรกรรมการเชื่อมต่อระยะไกลการประมวลผลพร้อมกันการจัดกลุ่มและการปรับสมดุลโหลด คอนเทนเนอร์จัดการอินสแตนซ์ของส่วนประกอบ EJB ทำให้ส่วนประกอบ EJB สามารถบรรลุประสิทธิภาพสูงสุดและการใช้หน่วยความจำ คอนเทนเนอร์สามารถเปิดใช้งานและ passivate ส่วนประกอบ EJB จัดการพูลอินสแตนซ์ ฯลฯ คอนเทนเนอร์มีหน้าที่ในการจัดการปัญหาที่ซับซ้อนของการประมวลผลธุรกรรมแบบกระจายการจัดการปัญหาการสื่อสารระดับต่ำสำหรับการเชื่อมต่อระยะไกลและการปกปิดปัญหาการสื่อสารสำหรับนักพัฒนาส่วนประกอบ EJB และลูกค้า ดังนั้นนักพัฒนาส่วนประกอบ EJB สามารถมุ่งเน้นไปที่การห่อหุ้มตรรกะทางธุรกิจและคอนเทนเนอร์มีหน้าที่รับผิดชอบในการจัดการธุรกรรมอื่น ๆ ทั้งหมด EJB โต้ตอบกับคอนเทนเนอร์ผ่านกลไกเช่น ejbcontent, JNDJ, ฟังก์ชั่นการโทรกลับ
JBOSS เป็นคอนเทนเนอร์และเซิร์ฟเวอร์ที่จัดการ EJB รองรับข้อกำหนด EJB1.1, EJB2.0 และ EJB3 และโดยทั่วไปจะถูกผูกไว้กับ Tomcat หรือ Jetty
โปรดดูรูปที่ 1 (แผนผังการทำงานของคอนเทนเนอร์ EJB):
รูปที่ 1: หลักการทำงานของคอนเทนเนอร์ EJB
องค์ประกอบ EJB เป็นวัตถุแบบกระจายซึ่งเมื่อสร้างอินสแตนซ์สามารถสื่อสารกับแอปพลิเคชันในพื้นที่ที่อยู่อื่น ๆ อินสแตนซ์ EJB ถูกห่อหุ้มในวัตถุโครงกระดูกซึ่งสื่อสารกับลูกค้าผ่านวัตถุต้นขั้ว ต้นขั้วไม่รวมถึงตรรกะทางธุรกิจ แต่ใช้อินเทอร์เฟซธุรกิจ เมื่อใดก็ตามที่มีการเรียกใช้วิธีการเชิงพาณิชย์ในอินเทอร์เฟซเชิงพาณิชย์สตอสสตับส่งข้อความเครือข่ายไปยังเฟรมเวิร์กและบอกว่าวิธีการที่เรียกว่า เฟรมเวิร์กเรียกใช้วิธีการที่สอดคล้องกันของอินสแตนซ์ EJB และส่งผลลัพธ์ที่ส่งคืนโดยอินสแตนซ์ EJB ไปยังต้นขั้วและต้นขั้วส่งคืนผลลัพธ์เหล่านี้ไปยังแอปพลิเคชันที่เกี่ยวข้อง ผ่านวัตถุระดับกลางสองตัวต้นขั้วและเฟรมเวิร์กกระบวนการสื่อสารที่ซับซ้อนระหว่างวัตถุแบบกระจายจะถูกบล็อก เฟรมเวิร์กถูกนำมาใช้โดยคอนเทนเนอร์ในขณะที่ต้นขั้วจะถูกสร้างขึ้นโดยอัตโนมัติโดยเครื่องมือการพัฒนาซึ่งไม่จำเป็นต้องใช้รหัสการเขียน โปรดดูรูปที่ 2 (แผนผังการสื่อสารส่วนประกอบ EJB):
รูปที่ 2: หลักการสื่อสารระหว่างส่วนประกอบ EJB
3. การจำแนกประเภท EJB
ส่วนประกอบ EJB สามารถแบ่งออกเป็นสองประเภท: ถั่วเซสชันและถั่วที่ขับเคลื่อนด้วยข้อความ ถั่วเซสชันห่อหุ้มตรรกะทางธุรกิจ ไคลเอนต์สามารถเรียกวิธีการเซสชันถั่วผ่านบริการท้องถิ่นระยะไกลและเว็บเพื่อเข้าถึงแอปพลิเคชันที่ปรับใช้บนเซิร์ฟเวอร์ดังนั้นจึงเรียกวิธีการของถั่วอื่น ถั่วเซสชันไม่ได้คงอยู่นั่นคือข้อมูลของมันจะไม่ถูกบันทึกไว้ในฐานข้อมูล ในหมู่พวกเขา Session Bean ประกอบด้วยสามประเภท: ถั่วเซสชั่นที่เป็นสเตท, ถั่วเซสชั่นไร้สัญชาติและถั่วเซสชั่นชิ้นเดียว ถั่วที่ขับเคลื่อนด้วยข้อความมักจะใช้เป็นผู้ฟังสำหรับข้อความประเภทเฉพาะทำให้ Javaee สามารถจัดการกับข้อความแบบอะซิงโครนัสและลูกค้าไม่สามารถเข้าถึงถั่วที่ขับเคลื่อนด้วยข้อความผ่านอินเทอร์เฟซ
ต่อไปนี้จะแนะนำถั่วเซสชั่นที่เป็นสเตท, ถั่วเซสชันไร้สัญชาติ, ถั่วเซสชันชิ้นเดียวและถั่วเซสชันที่ขับเคลื่อนด้วยข้อความในทางกลับกัน
4. ถั่วเซสชั่นไร้สัญชาติ
ถั่วเซสชันไร้สัญชาติให้เพียงตรรกะทางธุรกิจสำหรับลูกค้าและไม่รักษาสถานะเซสชันสำหรับลูกค้า เมื่อลูกค้าเรียกวิธีการของถั่วเซสชันไร้สัญชาติคุณสมบัติของถั่วเซสชันที่เกี่ยวข้องจะอธิบายสถานะการโทร แต่รักษาสถานะนี้ในระหว่างการเรียกวิธีการ เมื่อการเรียกใช้วิธีการเสร็จสิ้นสถานะจะถูกล้าง
วงจรชีวิตของถั่วเซสชันไร้สัญชาติถูกควบคุมโดยคอนเทนเนอร์ เมื่อคอนเทนเนอร์ EJB ได้รับคำขอของลูกค้าสำหรับถั่วเซสชันไร้สัญชาติหากไม่มี EJB คอนเทนเนอร์จะสร้างอินสแตนซ์ของถั่วฉีดทรัพยากรที่ต้องการลงในส่วนประกอบแล้วคอนเทนเนอร์จะเรียกใช้วิธีการ postconstruct และส่วนประกอบถูกสร้างขึ้น ในเวลานี้ถั่วเปลี่ยนจากสถานะ "ไม่มีอยู่" ไปสู่สถานะ "การดำรงอยู่" เมื่อการโทรของลูกค้าเสร็จสิ้นคอนเทนเนอร์จะโทรกลับวิธีการล่วงหน้าและถั่วจะถูกทำลาย ในเวลานี้ถั่วจะถูกแปลงจากสถานะ "มีอยู่" ไปสู่สถานะ "ไม่มีอยู่" โปรดดูรูปที่ 3 (วงจรชีวิตของถั่วเซสชันไร้สัญชาติ):
รูปที่ 3: วงจรชีวิตของถั่วเซสชั่นไร้สัญชาติ
5. ถั่วเซสชั่นสเตตฟู
ถั่วเซสชันที่มีสถานะคงไว้ซึ่งสถานะเซสชันสำหรับผู้ใช้ ไม่สามารถวางไว้ในกลุ่มส่วนประกอบสำหรับผู้ใช้ที่แตกต่างกันเพื่อแบ่งปันเช่นถั่วเซสชันไร้สัญชาติ สำหรับถั่วเซสชันที่มีสถานะตราบใดที่ลูกค้าส่งคำขอคอนเทนเนอร์จะสร้างอินสแตนซ์ที่สอดคล้องกับไคลเอนต์และไคลเอนต์หนึ่งตัวสอดคล้องกับอินสแตนซ์ ในช่วงอายุการใช้งานถั่วเซสชั่นสเตตฟูจะรักษาข้อมูลของผู้ใช้และเมื่อเซสชันสิ้นสุดลงวงจรชีวิตของถั่วเซสชั่นสเตตก็สิ้นสุดลงเช่นกัน
ถั่วเซสชั่นที่มีสถานะมีสามรัฐที่ใช้งานอยู่: การไม่มีอยู่การใช้งานและการพาสซีฟ เมื่อถั่วเซสชันที่มีสถานะใช้งานอยู่เป็นระยะเวลาหนึ่งหากคำขอจากไคลเอนต์ภายนอกยังไม่ได้รับเพื่อบันทึกทรัพยากรระบบคอนเทนเนอร์จะทำให้ข้อมูลสถานะของรัฐเป็นอนุกรมในถั่วเซสชันสถานะไปยังพื้นที่เก็บข้อมูลชั่วคราว กระบวนการนี้เรียกว่า "passivation" คอนเทนเนอร์เรียกใช้วิธี prepassivate ก่อนที่จะ passivation เมื่อคอนเทนเนอร์ได้รับการร้องขอสำหรับถั่วเซสชั่นที่มีสถานะผ่านการผ่านมันจะเพิ่มอินสแตนซ์ของถั่วเซสชันที่เป็นสถานะและนำข้อมูลสถานะออกจากพื้นที่ชั่วคราวเพื่อส่งคืนสู่สถานะที่ใช้งานอยู่ กระบวนการนี้เรียกว่า "การเปิดใช้งาน" หลังจากการเปิดใช้งานคอนเทนเนอร์จะเรียกกลับวิธีการ proactivate เมื่อถั่วเซสชั่นที่มีสถานะเป็นระยะเวลาหนึ่งคอนเทนเนอร์จะล้างอินสแตนซ์อย่างสมบูรณ์และโทรกลับวิธีการ predestroy โปรดดูรูปที่ 4 (วงจรชีวิตของถั่วเซสชั่นที่มีสถานะ):
รูปที่ 4: วงจรชีวิตของถั่วเซสชั่นที่มีสถานะ
6. ถั่วเซสชั่นห้องเดี่ยว
ถั่วเซสชันชิ้นเดียวจะถูกสร้างอินสแตนซ์หนึ่งครั้งสำหรับแต่ละแอปพลิเคชันและมีอยู่ตลอดเวลาตลอดวงจรชีวิตของแอปพลิเคชัน ถั่วเซสชันชิ้นเดียวได้รับการออกแบบมาสำหรับสถานการณ์เฉพาะและลูกค้าสามารถเข้าถึงอินสแตนซ์ EJB ที่ไม่ซ้ำกันนี้ในโหมดที่ใช้ร่วมกันและพร้อมกัน
ถั่วเซสชั่นชิ้นเดียวคล้ายกับถั่วเซสชั่นไร้สัญชาติ ความแตกต่างคือถั่วเซสชันชิ้นเดียวมีเพียงหนึ่งอินสแตนซ์ในแอปพลิเคชันในขณะที่ถั่วเซสชันไร้สัญชาติสามารถมีหลายอินสแตนซ์แต่ละอินสแตนซ์จะถูกวางไว้ในกลุ่มส่วนประกอบเพื่อให้ผู้ใช้แบ่งปัน
ถั่วเซสชั่นชิ้นเดียวเป็นเหมือนถั่วเซสชั่นไร้สัญชาติไม่เคยผ่านไป วงจรชีวิตของมันมีร่างกายสองประเภทเท่านั้น: "ไม่มีอยู่จริง" และ "การดำรงอยู่" โปรดดูรูปที่ 5 (วงจรชีวิตของถั่วเซสชั่นชิ้นเดียว):
รูปที่ 5: วงจรชีวิตของถั่วเซสชั่นชิ้นเดียว
7. ถั่วที่ขับเคลื่อนด้วยข้อความ
ถั่วที่ขับเคลื่อนด้วยข้อความเป็นส่วนประกอบที่ออกแบบมาเพื่อจัดการคำขอตามข้อความโดยเฉพาะ ถั่วที่ขับเคลื่อนด้วยข้อความรวมฟังก์ชั่นของ Java Message Service (JMS) และ Enterprise Beans ไคลเอนต์ไม่สามารถรับการอ้างอิงโดยตรงและเรียกใช้วิธีนี้ แต่สามารถเริ่มต้นได้ด้วยข้อความระบบเท่านั้น
คอนเทนเนอร์ EJB มักจะสร้างกลุ่มส่วนประกอบของถั่วที่ขับเคลื่อนด้วยข้อความ เช่นเดียวกับถั่วเซสชั่นไร้สัญชาติถั่วที่ขับเคลื่อนด้วยข้อความจะไม่เคยผ่านไปและวัฏจักรชีวิตของพวกเขามีเพียงสองขั้นตอนเท่านั้น: การไม่มีอยู่จริงและการดำรงอยู่
คลาสถั่วที่ขับเคลื่อนด้วยข้อความจะต้องใช้อินเทอร์เฟซ MessageListener เมื่อคอนเทนเนอร์ตรวจพบข้อความในคิวว่าถั่วกำลังฟังอยู่มันจะเรียกวิธี onMessage () และส่งข้อความเป็นพารามิเตอร์
ความเข้าใจที่ครอบคลุมเกี่ยวกับ EJB พื้นฐานของ J2EE คือเนื้อหาทั้งหมดที่ฉันแบ่งปันกับคุณ ฉันหวังว่าคุณจะให้ข้อมูลอ้างอิงและฉันหวังว่าคุณจะสนับสนุน wulin.com มากขึ้น