EJB คืออะไรและทำหน้าที่อะไร


151

เคยพยายามที่จะเรียนรู้ว่าEJBถั่วคืออะไรมันหมายความว่าอินสแตนซ์ของพวกเขาได้รับการจัดการในสระว่ายน้ำหรือไม่ จริงๆไม่สามารถได้รับการยึดเกาะที่ดีของพวกเขา

คุณช่วยอธิบายสิ่งที่พวกเขาเป็นจริง (จริง ๆ แล้วสำหรับโปรแกรมเมอร์ Java)? พวกเขาทำอะไร? วัตถุประสงค์ของพวกเขาคืออะไร ทำไมต้องใช้พวกเขา (ทำไมไม่ยึดติดอยู่POJO?)บางทีตัวอย่างแอปพลิเคชัน?

EJB 3.1โปรดดูเท่านั้นที่จะปรับปรุงข้อมูลที่เป็น ข้อมูลวันที่เกี่ยวกับ EJB อาจทำให้เข้าใจผิด

สำหรับผู้เริ่มต้นเรียน EJB โปรดทราบ:

EJB จะขึ้นอยู่กับวัตถุกระจายนี้หมายถึงชิ้นส่วนซอฟต์แวร์ที่ทำงานบนเครื่องหลาย (เสมือนหรือกายภาพ) เชื่อมโยงกันด้วยเครือข่าย


คำตอบ:


161

ทำไมต้องใช้พวกเขา (ทำไมไม่ยึดติดกับ POJO?)

หากคุณต้องการส่วนประกอบที่เข้าถึงฐานข้อมูลหรือเข้าถึงทรัพยากรการเชื่อมต่อ / ไดเรกทอรีอื่น ๆ หรือเข้าถึงได้จากไคลเอนต์หลายรายหรือมีวัตถุประสงค์เพื่อให้บริการ SOA EJBs ในปัจจุบันมักจะ "ใหญ่ขึ้นแข็งแกร่งขึ้นเร็วขึ้น (หรือปรับขยายได้น้อยกว่า) และเรียบง่ายกว่า POJO พวกเขามีค่ามากที่สุดสำหรับการให้บริการผู้ใช้จำนวนมากผ่านเว็บหรือเครือข่ายองค์กรและค่อนข้างมีค่าน้อยสำหรับแอปขนาดเล็กภายในแผนก

  1. การใช้ซ้ำ / การแบ่งปันลอจิกในแอปพลิเคชัน / ไคลเอนต์หลายตัวด้วย Loose Coupling
    EJB สามารถบรรจุในไหของตนเองนำไปใช้และเรียกใช้จากสถานที่มากมาย พวกเขาเป็นองค์ประกอบทั่วไป จริงอยู่ POJOs สามารถ (ออกแบบอย่างระมัดระวัง!) เป็นห้องสมุดและบรรจุเป็นไห แต่ EJBs รองรับการเข้าถึงเครือข่ายทั้งในและระยะไกล - รวมถึงผ่านอินเตอร์เฟส Java ท้องถิ่น, RMI แบบโปร่งใส, ข้อความ JMS async และบริการเว็บ SOAP / REST, ประหยัดจากการพึ่งพา jar แบบตัดและวางที่มีการปรับใช้หลายอย่าง (ไม่สอดคล้องกัน)
    พวกเขามีประโยชน์มากสำหรับการสร้างบริการ SOA เมื่อใช้สำหรับการเข้าถึงภายในพวกเขาเป็น POJOs (พร้อมเพิ่มบริการคอนเทนเนอร์ฟรี) การออกแบบเลเยอร์ EJB แยกต่างหากส่งเสริมการดูแลเป็นพิเศษสำหรับการเพิ่มการห่อหุ้มข้อต่อข้อต่อหลวมและการรวมกันและการเชื่อมต่อแบบสะอาด (ซุ้ม) ป้องกันผู้โทรจากการประมวลผลและข้อมูลที่ซับซ้อน

  2. ความสามารถในการปรับขนาดและความน่าเชื่อถือหากคุณใช้การร้องขอจำนวนมากจากข้อความ / กระบวนการ / เธรดการโทรจำนวนมากคำขอนั้นจะถูกกระจายไปทั่วอินสแตนซ์ EJB ที่มีอยู่ในพูลก่อนแล้วจึงจัดคิว ซึ่งหมายความว่าหากจำนวนคำขอที่เข้ามาต่อวินาทีมากกว่าเซิร์ฟเวอร์ที่สามารถจัดการได้เราจะลดระดับลงอย่างงดงาม - มีคำขอบางส่วนที่ถูกประมวลผลอย่างมีประสิทธิภาพและคำขอส่วนเกินจะต้องรอ เราไม่ถึงเซิร์ฟเวอร์ "ล่มสลาย" - ที่คำขอทั้งหมดจะได้รับเวลาตอบสนองที่แย่มากพร้อมกับเซิร์ฟเวอร์พยายามเข้าถึงทรัพยากรมากกว่าฮาร์ดแวร์และระบบปฏิบัติการที่สามารถจัดการกับปัญหาได้ EJB สามารถปรับใช้ในระดับที่แยกต่างหากซึ่งสามารถทำคลัสเตอร์ได้ - ซึ่งให้ความน่าเชื่อถือผ่าน failover จากเซิร์ฟเวอร์เครื่องหนึ่งไปยังเซิร์ฟเวอร์เครื่องอื่นบวกกับฮาร์ดแวร์ที่สามารถเพิ่มขนาดเชิงเส้นได้

  3. การจัดการภาวะพร้อมกัน ที่เก็บทำให้มั่นใจได้ว่าอินสแตนซ์ EJB เข้าถึงได้โดยอัตโนมัติอย่างปลอดภัย (ตามลำดับ) โดยลูกค้าหลายราย คอนเทนเนอร์จัดการพูล EJB เธรดพูลคิวการเรียกใช้และดำเนินการล็อกการเขียนระดับวิธี (โดยค่าเริ่มต้น) หรืออ่านการล็อก (ผ่าน @Lock (READ) โดยอัตโนมัติ สิ่งนี้จะช่วยปกป้องข้อมูลจากความเสียหายผ่านการเขียนทับการเขียนพร้อมกันและช่วยให้ข้อมูลสามารถอ่านได้อย่างสม่ำเสมอโดยการป้องกันการปะทะการอ่าน - เขียน
    สิ่งนี้มีประโยชน์เป็นส่วนใหญ่สำหรับเซสชันถั่ว @Singleton โดยที่ bean กำลังจัดการและแบ่งปันสถานะทั่วไปกับผู้เรียกลูกค้า สิ่งนี้สามารถถูกแทนที่อย่างง่ายดายเพื่อกำหนดค่าหรือควบคุมสถานการณ์ขั้นสูงด้วยตนเองโดยทางโปรแกรมสำหรับการเรียกใช้โค้ดและการเข้าถึงข้อมูลที่เกิดขึ้นพร้อมกัน

  4. การจัดการธุรกรรมอัตโนมัติ
    อย่าทำอะไรเลยและวิธีการ EJB ทั้งหมดของคุณจะถูกเรียกใช้ในการทำธุรกรรม JTA หากคุณเข้าถึงฐานข้อมูลโดยใช้ JPA หรือ JDBC ระบบจะบันทึกรายการโดยอัตโนมัติ เหมือนกันสำหรับการร้องขอ JMS และ JCA ระบุ @TransactionAttribute (someTransactionMode) ก่อนที่เมธอดเพื่อระบุว่า / วิธีนั้นมีส่วนร่วมในธุรกรรม JTA อย่างไรโดยแทนที่โหมดเริ่มต้น: "Required"

  5. การเข้าถึงทรัพยากร / การพึ่งพาที่ง่ายมากผ่านการฉีด
    คอนเทนเนอร์จะค้นหาทรัพยากรและตั้งค่าการอ้างอิงทรัพยากรเป็นฟิลด์อินสแตนซ์ใน EJB: เช่น JNDI การเชื่อมต่อ JDBC ที่เก็บไว้, การเชื่อมต่อ JMS / หัวข้อ / คิว, EJBs อื่น ๆ , ธุรกรรม JTA, JTA หน่วยงานการจัดการหน่วยงานถาวรของ JPA ทรัพยากรอะแดปเตอร์ JCA เช่นการตั้งค่าการอ้างอิงไปยัง EJB & ธุรกรรม JTA & ตัวจัดการเอนทิตี JPA & โรงงานเชื่อมต่อ JMS และคิว:

    @Stateless
    public class MyAccountsBean {
    
        @EJB SomeOtherBeanClass someOtherBean;
        @Resource UserTransaction jtaTx;
        @PersistenceContext(unitName="AccountsPU") EntityManager em;
        @Resource QueueConnectionFactory accountsJMSfactory;
        @Resource Queue accountPaymentDestinationQueue;
    
        public List<Account> processAccounts(DepartmentId id) {
            // Use all of above instance variables with no additional setup.
            // They automatically partake in a (server coordinated) JTA transaction
        }
    }
    

    Servlet สามารถเรียกใช้ bean นี้แบบโลคัลโดยเพียงแค่ประกาศตัวแปรอินสแตนซ์:

    @EJB MyAccountsBean accountsBean;    
    

    แล้วเพียงแค่เรียกวิธีการ 'ตามที่ต้องการ

  6. การโต้ตอบอย่างชาญฉลาดกับ JPA ตามค่าเริ่มต้นแล้ว EntityManager ที่ถูกแทรกดังกล่าวจะใช้บริบทการคงอยู่ของธุรกรรมที่มีขอบเขต นี่คือที่สมบูรณ์แบบสำหรับถั่วเซสชั่นไร้สัญชาติ เมื่อมีการเรียกใช้เมธอด EJB (ไร้สัญชาติ) บริบทการมีอยู่แบบใหม่จะถูกสร้างขึ้นภายในธุรกรรมใหม่เอนทิตีวัตถุทั้งหมดที่ดึง / เขียนไปยังฐานข้อมูลเอนทิตีทั้งหมดจะมองเห็นได้เฉพาะภายในการเรียกใช้เมธอดนั้นและแยกจากวิธีอื่น แต่ถ้า EJBs ไร้สัญชาติอื่นถูกเรียกใช้โดยเมธอดคอนเทนเนอร์จะเผยแพร่และแชร์พีซีเครื่องเดียวกันกับพวกเขาดังนั้นเอนทิตีเดียวกันจะถูกแชร์โดยอัตโนมัติในวิธีที่สอดคล้องกันผ่านพีซีในการทำธุรกรรมเดียวกัน
    หากมีการประกาศเซสชันถั่ว @Stateful affinity แบบสมาร์ทที่เทียบเท่ากับ JPA จะทำได้โดยการประกาศเอนทิตีที่เป็นขอบเขตเพิ่มเติม: @PersistentContent (unitName = "AccountsPU, type = EXTENDED) สิ่งนี้มีอยู่ตลอดชีวิตของเซสชันถั่ว ข้ามการเรียกและธุรกรรม bean หลายครั้งการแคชสำเนาในหน่วยความจำของเอนทิตี DB ที่ดึง / เขียนก่อนหน้านี้ดังนั้นจึงไม่จำเป็นต้องดึงข้อมูลซ้ำ

  7. การจัดการวงจรชีวิต วงจรชีวิตของ EJBs นั้นมีการจัดการตู้คอนเทนเนอร์ ตามที่ต้องการมันจะสร้างอินสแตนซ์ EJB ล้างและเตรียมใช้งานสถานะ bean เซสชันเซสชัน passivates & เปิดใช้งานและเรียกใช้เมธอดการเรียกกลับตลอดวงจรดังนั้นรหัส EJB สามารถมีส่วนร่วมในการดำเนินการวงจรชีวิตเพื่อรับและปล่อยทรัพยากร นอกจากนี้ยังรวบรวมข้อยกเว้นทั้งหมดบันทึกพวกเขาย้อนกลับการทำธุรกรรมตามที่ต้องการและส่งข้อยกเว้น EJB ใหม่หรือ @ApplicationExceptions ตามที่ต้องการ

  8. การจัดการความปลอดภัย การควบคุมการเข้าถึงตามบทบาทกับ EJB สามารถกำหนดค่าผ่านการเพิ่มความคิดเห็นแบบง่ายหรือการตั้งค่า XML เซิร์ฟเวอร์จะส่งรายละเอียดผู้ใช้ที่ผ่านการตรวจสอบความถูกต้องโดยอัตโนมัติพร้อมกับการโทรแต่ละครั้งเป็นบริบทความปลอดภัย (การโทรหลักและบทบาท) มันทำให้มั่นใจได้ว่ากฎ RBAC ทั้งหมดจะถูกบังคับใช้โดยอัตโนมัติเพื่อให้วิธีการที่ไม่สามารถถูกเรียกโดยผิดกฎหมายโดยบทบาทที่ไม่ถูกต้อง อนุญาตให้ EJB เข้าถึงรายละเอียดผู้ใช้ / บทบาทได้อย่างง่ายดายสำหรับการตรวจสอบแบบเป็นโปรแกรมเพิ่มเติม อนุญาตให้เสียบในการประมวลผลความปลอดภัยเพิ่มเติม (หรือแม้แต่เครื่องมือ IAM) ไปยังคอนเทนเนอร์ด้วยวิธีมาตรฐาน

  9. มาตรฐานและพกพา การใช้งาน EJB เป็นไปตามมาตรฐาน Java EE และข้อกำหนดการเข้ารหัส, การส่งเสริมคุณภาพและความง่ายในการทำความเข้าใจและการบำรุงรักษา นอกจากนี้ยังส่งเสริมการพกพาของรหัสไปยังเซิร์ฟเวอร์ของแอปผู้ขายใหม่โดยมั่นใจว่าพวกเขาสนับสนุนเหมือนกันทั้งหมดคุณสมบัติมาตรฐานและพฤติกรรมและท้อใจนักพัฒนาจากการนำตั้งใจที่เป็นกรรมสิทธิ์ของ
    คุณสมบัติของผู้ขายที่ไม่ใช่แบบพกพา

  10. The Real Kicker: ความเรียบง่าย ทั้งหมดข้างต้นสามารถทำได้ด้วยรหัสที่มีความคล่องตัวสูง - ไม่ว่าจะใช้การตั้งค่าเริ่มต้นสำหรับ EJB ภายใน Java EE 6 หรือเพิ่มคำอธิบายประกอบ การเข้ารหัสคุณสมบัติขององค์กร / ความแรงของอุตสาหกรรมใน POJOs ของคุณเองจะเป็นวิธีที่ volumous เพิ่มเติมที่ซับซ้อนและผิดพลาดได้ง่าย เมื่อคุณเริ่มเขียนโค้ดด้วย EJB พวกเขาค่อนข้างง่ายต่อการพัฒนาและให้สิทธิประโยชน์มากมาย

ในข้อมูลจำเพาะของ EJB ดั้งเดิมเมื่อ 10 ปีที่แล้ว EJBs เป็นงานที่ยุ่งยากมาก พวกมันป่องต้องใช้โค้ดและสิ่งประดิษฐ์การกำหนดค่ามากมายและให้ประโยชน์ประมาณ 2/3 ข้างต้น โครงการเว็บส่วนใหญ่ไม่ได้ใช้งานจริง แต่สิ่งนี้มีการเปลี่ยนแปลงอย่างมีนัยสำคัญกับ 10 ปีของการปรับแต่งการยกเครื่องการเพิ่มประสิทธิภาพการทำงานและการพัฒนาซับใน ใน Java EE 6 จะให้ความแข็งแกร่งในระดับอุตสาหกรรมสูงสุดและใช้งานง่าย

ไม่ชอบอะไร ?? :-) :-)


67

EJB เป็นองค์ประกอบของจาวาซึ่งประกอบด้วยตรรกะทางธุรกิจที่คุณปรับใช้ในคอนเทนเนอร์และได้รับประโยชน์จากบริการด้านเทคนิคที่จัดทำโดยคอนเทนเนอร์โดยปกติแล้วจะอยู่ในรูปแบบการประกาศโดยใช้คำอธิบายประกอบ:

  • การจัดการธุรกรรม: การทำธุรกรรมสามารถเริ่มต้นได้โดยอัตโนมัติก่อนที่เมธอดของ EJB จะถูกเรียกใช้และถูกคอมมิตหรือย้อนกลับเมื่อเมธอดนี้ส่งคืน บริบทการทำธุรกรรมนี้ถูกเผยแพร่ไปยังการโทรไปยัง EJB อื่น ๆ
  • การจัดการความปลอดภัย: การตรวจสอบสามารถทำให้ผู้เรียกมีบทบาทที่จำเป็นในการดำเนินการวิธีการ
  • การฉีดพึ่งพา: EJB อื่น ๆ หรือทรัพยากรเช่นตัวจัดการเอนทิตี JPA, แหล่งข้อมูล JDBC และอื่น ๆ สามารถถูกฉีดเข้าไปใน EJB
  • การเกิดพร้อมกัน: คอนเทนเนอร์ทำให้แน่ใจว่ามีเพียงหนึ่งเธรดในแต่ละครั้งที่เรียกใช้เมธอดของอินสแตนซ์ EJB ของคุณ
  • การกระจาย: EJB บางตัวสามารถเรียกได้จากระยะไกลจาก JVM อื่น
  • failover และ load-balancing: ไคลเอนต์ระยะไกลของ EJB ของคุณสามารถโอนสายไปยังเซิร์ฟเวอร์อื่นโดยอัตโนมัติหากจำเป็น
  • การจัดการทรัพยากร: stateful beans สามารถพาสไปยังดิสก์โดยอัตโนมัติเพื่อ จำกัด การใช้หน่วยความจำของเซิร์ฟเวอร์ของคุณ
  • ... ฉันอาจลืมบางจุด

เมื่อคุณอ้างถึงธุรกรรม - คุณอ้างถึงความอดทน
jacktrades

6
ใช่ แต่ไม่เพียงเท่านั้น คอนเทนเนอร์ EJB จัดทำผู้จัดการธุรกรรม JTA แบบกระจายสนับสนุนทรัพยากรหลายรายการในธุรกรรมเดียว ตัวอย่างเช่นคุณสามารถอัปเดตข้อมูลบางอย่างในฐานข้อมูลและส่งข้อความ JMS บางรายการในธุรกรรมเดียว หากมีสิ่งใดล้มเหลวทุกอย่างจะถูกย้อนกลับ: การอัพเดตฐานข้อมูลและข้อความที่ส่ง
JB Nizet

@JBNizet ขอโทษสำหรับความคิดเห็นในเธรดเก่า แต่ไม่ใช่เฟรมเวิร์ก EJB เช่น Spring กำลังให้บริการเหล่านี้ที่คุณกล่าวถึง ฉันไม่เข้าใจความแตกต่าง
MoienGK

หลักการพื้นฐานเหมือนกัน Spring ได้รับแนวคิดจาก EJB และในทางกลับกัน แต่ API, การนำไปใช้, วิธีการปรับใช้และคุณลักษณะบางอย่างนั้นแตกต่างกัน
JB Nizet

@JB Nizet ในรูปแบบ MVC คุณจะวาง EJB ในตำแหน่งใด ฉันจะบอกว่าพวกเขาเป็นสมาชิกของเลเยอร์โมเดลแม้ว่าฉันจะรู้ว่ามีหลายคนที่บอกว่าพวกเขาเป็นผู้ควบคุม ถ้า EJB มีตรรกะทางธุรกิจ (คุณบอกว่าทำ) แสดงว่าเป็นโมเดลเลเยอร์ตามคำจำกัดความ
user107986

22

หวังว่าสิ่งนี้จาก Oracle doc จะช่วยให้คนอย่างฉันเข้าใจหัวข้อของ EJB ในวิธีที่ง่าย

Enterprise Bean คืออะไร enterprise bean เป็นส่วนประกอบของฝั่งเซิร์ฟเวอร์ที่รวมเอาตรรกะทางธุรกิจของแอปพลิเคชันไว้ด้วยภาษาการเขียนโปรแกรม Java ตรรกะทางธุรกิจคือรหัสที่ตอบสนองวัตถุประสงค์ของแอปพลิเคชัน ในแอปพลิเคชันการควบคุมสินค้าคงคลังตัวอย่างเช่น enterprise beans อาจใช้ตรรกะทางธุรกิจในวิธีที่เรียกว่า checkInventoryLevel และ orderProduct ด้วยการเรียกใช้วิธีการเหล่านี้ลูกค้าสามารถเข้าถึงบริการสินค้าคงคลังที่มีให้โดยแอปพลิเคชัน

ประโยชน์ของ Enterprise Beans ด้วยเหตุผลหลายประการ enterprise beans ทำให้การพัฒนาแอพพลิเคชั่นขนาดใหญ่กระจายตัวง่ายขึ้น ข้อแรกเนื่องจากคอนเทนเนอร์ EJB ให้บริการระดับระบบแก่ enterprise beans ผู้พัฒนา bean สามารถมีสมาธิในการแก้ปัญหาทางธุรกิจ คอนเทนเนอร์ EJB ไม่ใช่ผู้พัฒนา bean รับผิดชอบบริการระดับระบบเช่นการจัดการธุรกรรมและการอนุญาตด้านความปลอดภัย

ข้อที่สองเนื่องจาก beans มากกว่าไคลเอ็นต์มีตรรกะทางธุรกิจของแอปพลิเคชันผู้พัฒนาไคลเอ็นต์สามารถมุ่งเน้นที่การนำเสนอของไคลเอ็นต์ นักพัฒนาไคลเอนต์ไม่จำเป็นต้องเขียนรหัสรูทีนที่ใช้กฎธุรกิจหรือฐานข้อมูลการเข้าถึง ด้วยเหตุนี้ลูกค้าจึงผอมลงซึ่งเป็นประโยชน์ที่สำคัญอย่างยิ่งสำหรับลูกค้าที่ใช้อุปกรณ์ขนาดเล็ก

ประการที่สามเนื่องจาก enterprise beans เป็นส่วนประกอบแบบพกพาแอสเซมเบลอร์แอปพลิเคชันสามารถสร้างแอปพลิเคชันใหม่จากถั่วที่มีอยู่ แอ็พพลิเคชันเหล่านี้สามารถรันบนเซิร์ฟเวอร์ Java EE ที่เข้ากันได้โดยที่พวกเขาใช้ API มาตรฐาน

เมื่อใดจึงควรใช้ Enterprise Beans คุณควรพิจารณาใช้ enterprise beans หากแอปพลิเคชันของคุณมีข้อกำหนดใด ๆ ต่อไปนี้:

แอปพลิเคชันจะต้องปรับขนาดได้ เพื่อรองรับจำนวนผู้ใช้ที่เพิ่มขึ้นคุณอาจต้องกระจายส่วนประกอบของแอปพลิเคชันในหลาย ๆ เครื่อง ไม่เพียง แต่ enterprise beans ของแอปพลิเคชันเท่านั้นที่สามารถทำงานบนเครื่องที่แตกต่างกัน แต่ตำแหน่งของพวกเขาจะยังคงโปร่งใสสำหรับลูกค้า

การทำธุรกรรมจะต้องมั่นใจในความสมบูรณ์ของข้อมูล Enterprise beans สนับสนุนธุรกรรมกลไกที่จัดการการเข้าถึงวัตถุที่ใช้ร่วมกันในเวลาเดียวกัน

แอพพลิเคชั่นจะมีลูกค้าหลากหลาย ด้วยโค้ดเพียงไม่กี่บรรทัดไคลเอนต์ระยะไกลสามารถค้นหา enterprise beans ได้อย่างง่ายดาย ลูกค้าเหล่านี้อาจผอมบางและมากมาย


3

คำถามที่ฉันสนใจมากที่สุดคือฉันจะใช้มันได้ที่ไหนและอย่างไร เพื่อให้เข้าใจสิ่งนี้เราต้องก่อนเพื่อดูว่ามี EJB ประเภทใดอยู่ มี 2 ​​ประเภทใหญ่:

  1. ถั่วเซสชั่น
  2. ข้อความที่ขับเคลื่อนด้วยถั่ว

ลองพิจารณา Session Beans กัน พวกเขามี 3 ชนิด:

  1. Stateful - องค์ประกอบเหล่านี้รักษาสถานะและเฉพาะสำหรับไคลเอนต์ข้ามการร้องขอหลาย เห็นมันเป็นเซสชั่น การใช้งานทันทีสิ่งเหล่านี้สามารถนำไปใช้เป็นตะกร้าสินค้าหรือประเภทอื่น ๆ (เซสชันการเข้าสู่ระบบและอื่น ๆ )
  2. ไร้สัญชาติ - สิ่งเหล่านี้คือส่วนประกอบที่มีอยู่ในตัวเองซึ่งไม่ได้เก็บข้อมูลไว้ระหว่างการร้องขอ ใช้งานได้ทันทีที่มาถึงใจ - เรียนบริการในชั้นบริการ OrderServiceจินตนาการ การใช้งานที่ยิ่งใหญ่สำหรับสิ่งเหล่านี้คือการเปิดเผยบริการเว็บ อีกครั้งนี้อยู่ในชั้นบริการหรือแยกจากกันโดยสิ้นเชิง
  3. Singleton - เหล่านี้คือ beans ที่มีอยู่ต่อแอปพลิเคชันและถูกสร้างขึ้นหนึ่งครั้งและสามารถนำมาใช้ซ้ำ / เข้าถึงได้หลายครั้ง ทันทีที่Configurationนึกถึงองค์ประกอบ - คุณสามารถจัดเก็บการกำหนดค่าระดับแอปพลิเคชันและเข้าถึงได้เมื่อคุณต้องการจากที่ใดก็ได้

ตอนนี้ความสามารถหรือฟีเจอร์ที่เหลือสามารถใช้ข้ามเลเยอร์ในสถานการณ์เช่นนี้ได้:

  • ความปลอดภัย - คุณสามารถตรวจสอบการอนุญาตด้วยคำอธิบายประกอบในวิธีการที่เรียกว่า สิ่งนี้สามารถเกิดขึ้นได้ในเลเยอร์บริการเช่นเดียวกับในตัวควบคุมหากคุณต้องการ
  • การจัดการธุรกรรม - นี่คือผู้สมัครที่เห็นได้ชัดในชั้นบริการหรือชั้นความคงทน
  • การฉีดพึ่งพา - อีกครั้งจะถูกใช้ทุกที่

หนึ่งในการใช้งานครั้งใหญ่ในยุคปัจจุบันคือ Microservices และ Service Oriented Architecture คุณสามารถจัดทำส่วนประกอบของตรรกะทางธุรกิจบางอย่างเป็น EJB และแจกจ่ายให้ทั่วทั้งองค์กรเพื่อให้ลูกค้าหลาย ๆ คนใช้ (โดยไคลเอนต์ที่นี่ฉันหมายถึงแอพพลิเคชั่นส่วนหลังอื่น ๆ )

และอื่น ๆ ตอนนี้ข้อเสียเปรียบครั้งใหญ่คือคุณต้องพึ่งพา EJB container มากและถึงแม้ว่าคุณสามารถสลับไปมาระหว่างการใช้งานอ้างอิง 2 ตัวคุณจะไม่สามารถสลับไปใช้งานที่เบากว่า - Tomcat เช่น แต่ทำไมคุณต้องการเสียสละผลประโยชน์ทั้งหมด?

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.