Προγραμματισμός

Τι είναι το EJB; Η εξέλιξη του Enterprise JavaBeans

Το Enterprise JavaBeans (EJB) είναι μια προδιαγραφή για την ανάπτυξη μεγάλης κλίμακας, κατανεμημένων επιχειρηματικών εφαρμογών στην πλατφόρμα Java. Το EJB 1.0 κυκλοφόρησε το 1998. Η πιο πρόσφατη έκδοση, EJB 3.2.3, έχει εγκριθεί για συμπερίληψη στην Τζακάρτα ΕΕ, όπου θα μετονομαστεί σε Jakarta Enterprise Beans.

Αρχιτεκτονική EJB

Η αρχιτεκτονική EJB αποτελείται από τρία κύρια συστατικά: εταιρικά φασόλια (EJBs), το κοντέινερ EJB και τον διακομιστή εφαρμογών Java. Τα EJB εκτελούνται μέσα σε ένα κοντέινερ EJB και το κοντέινερ EJB εκτελείται μέσα σε ένα διακομιστή εφαρμογών Java.

Υπάρχουν δύο τύποι EJB - φασόλια συνεδρίας και φασόλια που βασίζονται σε μηνύματα:

  • Φασόλια συνεδρίας καλείται από τον πελάτη και καθιστά τη λειτουργική επιχείρηση όπως συναλλαγές και διαχείριση πόρων διαθέσιμη στον πελάτη μέσω προγραμματισμού.
  • Φασόλια που βασίζονται σε μηνύματα επίσης ενσωματώνει και παρέχει λειτουργικότητα για επιχειρήσεις, αλλά είναι ασύγχρονα και καθοδηγούνται από συμβάντα. Τα φασόλια που βασίζονται σε μηνύματα ακούνε και ανταποκρίνονται σε συμβάντα και δεν μπορούν να επικαλεσθούν τον πελάτη.

Μόλις χρησιμοποιηθεί για να παρέχει επιμονή στο σύστημα EJB, τα φασόλια οντοτήτων έχουν αντικατασταθεί από το Java Persistence API. Συνεχίστε να διαβάζετε για να μάθετε περισσότερα σχετικά με τα φασόλια συνεδρίας και τα φασόλια που βασίζονται σε μηνύματα.

EJB εναντίον JavaBeans

Το Enterprise JavaBeans ήταν το πρώτο μοντέλο ανάπτυξης βασισμένο σε στοιχεία για το Java EE. Το EJB είναι παρόμοιο με το JavaBeans στο να βασίζεται σε στοιχεία, αλλά εκεί τελειώνει η ομοιότητα:

  • ΕΝΑ JavaBean είναι μια κλάση Java που ενσωματώνει πολλά αντικείμενα και συμμορφώνεται με ορισμένες συμβάσεις. Τα JavaBeans χρησιμοποιούνται κυρίως για ανάπτυξη από την πλευρά του πελάτη.
  • Ενα φασόλι επιχειρήσεων (EJB) είναι μια κλάση Java που διέπεται από συγκεκριμένες δυνατότητες από την πλευρά του διακομιστή. Οι εταιρικοί κόκκοι χρησιμοποιούνται σε μεγάλης κλίμακας επιχειρηματικές εφαρμογές και συστήματα.

Φασόλια συνεδρίας

ΕΝΑ φασόλι συνεδρίας είναι ο πιο γενικός τύπος business bean, που αντιπροσωπεύει ένα κομμάτι επιχειρησιακής λειτουργικότητας που μπορεί να κληθεί από έναν πελάτη. Ο πελάτης σε αυτήν την περίπτωση θα μπορούσε να είναι μια άλλη τάξη στην τοπική JVM ή μια απομακρυσμένη κλήση.

Το κοντέινερ EJB διαχειρίζεται τον κύκλο ζωής φασολιών συνεδρίας, ο οποίος καθορίζεται από την κατάσταση του φασολιού:

  • Χωρίς απάτη συνεδρίες είναι παρόμοια με το εύρος αιτήσεων στο Java Servlet API. Οι κόκκοι συνεδρίας χωρίς απάτη περιέχουν ένα κομμάτι της λειτουργικότητας που μπορείτε να καλέσετε, αλλά διαφορετικά είναι ανιθαγενείς.
  • Stateful φασόλια συνεδρίας σχετίζονται μόνο με έναν πελάτη και επισυνάπτονται στην τρέχουσα περίοδο λειτουργίας του συγκεκριμένου πελάτη. Τα φασόλια περιόδου λειτουργίας λειτουργούν παρόμοια με το εύρος περιόδου λειτουργίας στο Servlet API.
  • Φασόλια Singleton είναι παρόμοια με το πεδίο εφαρμογής στο Servlet API. Ένα φασόλι συνεδρίας singleton υπάρχει μόνο μία φορά για κάθε πελάτη.

Ασφάλεια νημάτων με κόκκους συνεδρίας

Ένα stateful φασόλι συνεδρίας είναι προσβάσιμο μόνο από έναν πελάτη κάθε φορά, επομένως η ασφάλεια του νήματος είναι εγγυημένη όταν εργάζεστε με αυτόν τον τύπο φασολιού. Τα φασόλια συνεδρίας χωρίς απάτριδες και τα φασόλια είναι πιο ευέλικτα, επιτρέποντας ταυτόχρονες συνδέσεις, τις οποίες πρέπει να διαχειριστεί ο προγραμματιστής. Είστε υπεύθυνοι για την ασφάλεια των νημάτων όταν εργάζεστε με αυτούς τους τύπους φασολιών.

Φασόλια που βασίζονται σε μηνύματα

Τα φασόλια που βασίζονται σε μηνύματα (MDBs) επικαλούνται μέσω μηνυμάτων JMS (Java Message Service). Το JMS λειτουργεί σαν ένα κατανεμημένο μοτίβο εντολών, όπου το φασόλι που βασίζεται σε μηνύματα λειτουργεί ως ακροατής της εντολής. Όταν ένα μήνυμα φτάνει σε ένα θέμα ή σε ουρά, καλείται το φασόλι που ακούγεται σε αυτό το θέμα.

Τα φασόλια που βασίζονται σε μηνύματα δεν χρησιμοποιούνται τόσο συχνά όσο τα φασόλια συνεδρίας, αλλά είναι ισχυρά. Όντας ασύγχρονοι και βασισμένοι σε συμβάντα, είναι ιδιαίτερα χρήσιμοι για μακροχρόνιες εργασίες όπου είναι σημαντικό να εξοικονομήσετε πόρους.

Η απλούστερη αρχιτεκτονική θα αποτελείται από την εφαρμογή EJB και το κοντέινερ και το διακομιστή της, που συντονίζονται με την υπηρεσία μηνυμάτων που επεξεργάζεται τα MDB. Στην παραγωγή, η αρχιτεκτονική σας πιθανότατα θα περιλαμβάνει ένα τρίτο συστατικό αφιερωμένο στην κατανάλωση των φασολιών. Κατά την ανάπτυξη, όλα αυτά τα εξαρτήματα θα μπορούσαν να λειτουργούν στο ίδιο τοπικό μηχάνημα.

Το Σχήμα 1 δείχνει μια τυπική αρχιτεκτονική βάσει γεγονότων με φασόλια που βασίζονται σε μηνύματα.

Μάθιου Τάισον

Η εργασία με φασόλια που βασίζονται σε μηνύματα είναι περισσότερο εμπλεκόμενη από τη χρήση κόκκων συνεδρίας. Σε ένα περιβάλλον που βασίζεται σε συμβάντα, συνήθως θα χρειαστείτε έναν μεσίτη μηνυμάτων όπως το ActiveMQ.

Ενώ οι κόκκοι συνεδρίας είναι απλούστεροι και, ως εκ τούτου, χρησιμοποιούνται πιο συχνά στο EJB, οι αρχιτεκτονικές που βασίζονται σε εκδηλώσεις έχουν γίνει δημοφιλείς, ειδικά με την έκρηξη των μικρο-υπηρεσιών

Σχολιασμοί του EJB

Ο ορισμός και η κατανάλωση επιχειρηματικών φασολιών ήταν ένα κρίσιμο σημείο για πολλούς προγραμματιστές έως το EJB 3.0, το οποίο εισήγαγε σχολιασμούς στις προδιαγραφές του EJB. Οι σχολιασμοί καθιστούν πολύ εύκολη τη διαμόρφωση εταιρικών φασολιών για ένα ευρύ φάσμα λειτουργιών που βρίσκονται στο Java EE. Συνεχίστε να διαβάζετε για να ξεκινήσετε με σχολιασμούς EJB.

@Stateless: Ορίστε ένα φασόλι συνεδρίας χωρίς κατάσταση

Για να ορίσετε μια τάξη ως κόμμα συνεδρίας χωρίς απάτη, χρησιμοποιείτε το javax.ejb. Αθόρυβο σχολιασμός, όπως φαίνεται στην καταχώριση 1.

Λίστα 1. Παράδειγμα σχολιασμού @Stateless

 εισαγωγή javax.ejb.Stateless; @Stateless δημόσια τάξη MyStatelessBean {public String getGreeting () {return "Hello JavaWorld."; }} 

Αυτό το απάτριδες φασόλι περιέχει μια απλή υπογραφή που δεν λαμβάνει επιχειρήματα και επιστρέφει μια συμβολοσειρά. Ωστόσο, μην αφήσετε την απλότητα να σας ξεγελάσει: αυτό το φασόλι μπορεί να κάνει ό, τι χρειάζεστε, συμπεριλαμβανομένης της αλληλεπίδρασης με άλλα φασόλια, υπηρεσίες ή το επίπεδο δεδομένων της εφαρμογής σας.

@EJB: Καταναλώστε ένα φασόλι συνεδρίας χωρίς απάτη

Μόλις ορίσετε ένα φασόλι συνεδρίας, η χρήση του είναι τόσο απλή:

Λίστα 2. Παράδειγμα σχολιασμού @EJB

 Η δημόσια τάξη MyServlet επεκτείνει το HttpServlet {@EJB MyStatelessBean myEjb; public void doGet (HttpServletRequest αίτημα, HttpServletResponse απόκριση) {Respons.getWriter (). write ("EJB Says" + testStatelessEjb.getGreeting ()); }} 

Εδώ, εγχέουμε το φασόλι ανιθαγενών σε servlet και στη συνέχεια είναι διαθέσιμο για χρήση. Παρατηρήστε πώς αναγνωρίζεται το φασόλι κάτω από το @EJB σχόλιο. Ο "ανιθαγενής" χαρακτηρισμός μας λέει ότι αυτό το φασόλι δεν θα παρακολουθεί τον πελάτη. Επειδή είναι απάτριδες, γνωρίζουμε επίσης ότι αυτό το φασόλι υπόκειται σε σπείρωμα εάν κάνει οποιαδήποτε εργασία εκτός της επίκλησης μεθόδου.

@Remote: Ορίστε μια απομακρυσμένη διεπαφή EJB

Στα παραπάνω παραδείγματα, υποθέτω ότι ο πελάτης EJB και EJB έτρεχε στο ίδιο JVM. Εάν η επιχείρηση bean και ο πελάτης της εκτελούνται σε ξεχωριστά JVM, τότε το EJB πρέπει να ορίσει a @Μακρινός διεπαφή. Σε αυτήν την περίπτωση, εναπόκειται σε εσάς να ορίσετε και να εφαρμόσετε τη διεπαφή, όπως φαίνεται στην καταχώριση 3.

Λίστα 3. Παράδειγμα σχολιασμού @Remote

 @Remote δημόσια διεπαφή MyStatelessEjbRemote {String sayHello (όνομα συμβολοσειράς); } 

Η απομακρυσμένη διεπαφή αποστέλλεται στον πελάτη για επίκληση. Στη συνέχεια, οι κλήσεις θα πραγματοποιηθούν από την υλοποίηση του διακομιστή EJB. ο MyStatelessBean Το παράδειγμα στην Λίστα 4 εφαρμόζει την απομακρυσμένη διεπαφή.

Λίστα 4. Εφαρμογή απομακρυσμένης διεπαφής

 δημόσια τάξη MyStatelessBean εφαρμόζει το MyStatelessEjbRemote {...} 

Μια απομακρυσμένη διεπαφή εφαρμόζεται όπως μια κανονική τάξη που εφαρμόζει μια διεπαφή. Ως καταναλωτής ενός απομακρυσμένου EJB, η εφαρμογή πελάτη πρέπει να έχει πρόσβαση στον ορισμό κλάσης για την απομακρυσμένη διεπαφή. Μπορείτε να συσκευάσετε τον ορισμό κλάσης για την απομακρυσμένη διεπαφή ως εξάρτηση JAR.

Τοπική έναντι απομακρυσμένης διεπαφής

Ενώ είναι σημαντικό να γνωρίζετε πώς να εφαρμόσετε μια απομακρυσμένη διεπαφή, στην πράξη είναι πιο συνηθισμένο να χρησιμοποιείτε μια τοπική διεπαφή. Η τοπική διεπαφή χρησιμοποιείται από προεπιλογή και λειτουργεί όποτε καλείται το EJB εντός του ίδιου περιβάλλοντος JVM. Η χρήση της απομακρυσμένης διεπαφής μπαίνει στο παιχνίδι όταν η εφαρμογή διανέμεται σε πολλά JVM.

Stateful συνεδρίες φασόλια και φασόλια singleton

Η διαδικασία για τον ορισμό και την κατανάλωση stateful @Συνεδρίαση φασόλια και @Μοναδικό χαρτί τα φασόλια είναι τα ίδια με αυτά που έχετε δει @Stateless φασόλια. Θυμηθείτε τη σημασιολογία:

  • Πολλαπλές συνεδρίες περιόδου λειτουργίας μπορούν να δημιουργηθούν και να χρησιμοποιηθούν για τον ίδιο πελάτη.
  • Ένα single bean θα υπάρχει μόνο μία φορά για ολόκληρη την εφαρμογή.

Ασφάλεια και προγραμματισμός νημάτων με μονότονα

Η ασφάλεια του νήματος είναι ενσωματωμένη όταν εργάζεστε με κόκκους συνεδρίας, αλλά και τα δύο απάτριδα και τα μονόφυλλα μπορούν να προσπελαστούν ταυτόχρονα από πολλούς πελάτες. Οι προγραμματιστές είναι υπεύθυνοι για την ασφάλεια των νημάτων κατά την εφαρμογή αυτών των τύπων φασολιών.

Τα φασόλια Singleton προσφέρουν κάποια υποστήριξη για την ασφάλεια των νημάτων μέσω του @Κλειδαριά σχόλιο. Μπορείτε να χρησιμοποιήσετε τον σχολιασμό @Lock στις μεθόδους singleton bean για να ορίσετε δικαιώματα ανάγνωσης / εγγραφής για κάθε μέθοδο. Οι δύο επιλογές είναι @Lock (LockType.READ) ή @Lock (LockType.WRITE), η οποία είναι η προεπιλογή.

Ένα άλλο χρήσιμο χαρακτηριστικό των φασολιών είναι η δυνατότητα προγραμματισμού εργασιών με απλό τρόπο, χρησιμοποιώντας το @Πρόγραμμα σχόλιο. Η λίστα 5 δείχνει πώς να προγραμματίζετε μια εργασία καθημερινά το μεσημέρι.

Λίστα 5. Παράδειγμα σχολιασμού @Schedule

 @Singleton δημόσια τάξη MySchedulerBean {@Schedule (hour = "12") άκυρο doIt () {System.out.println ("Γεια σας το μεσημέρι!"); }} 

CDI εναντίον EJB

Το CDI ή το Context and Dependency Injection είναι μια νεότερη εταιρική προδιαγραφή που έχουν προτείνει ορισμένοι προγραμματιστές να αντικαταστήσουν το EJB.

Σε υψηλό επίπεδο, το CDI προσφέρει ένα πλαίσιο στοιχείων γενικού σκοπού, ενώ το EJB ξεχωρίζει για τα πλούσια χαρακτηριστικά, μεμονωμένα στοιχεία του. Ενώ το CDI χρησιμοποιεί εξάρτηση εξάρτησης για τον καθορισμό και την αναφορά οποιουδήποτε στοιχείου λογισμικού, τα στοιχεία EJB ορίζονται πιο επίσημα, με το καθένα να προσφέρει ένα συγκεκριμένο σύνολο δυνατοτήτων έξω από το κουτί. Και οι δύο προδιαγραφές έχουν προγραμματιστεί για μελλοντική ανάπτυξη ως μέρος της Τζακάρτα ΕΕ, όπου το ζήτημα αν το CDI θα αντικαταστήσει το EJB θα επιλυθεί τελικά.

συμπέρασμα

Το Enterprise JavaBeans ήταν η πρώτη προδιαγραφή που προσφέρει έναν εύκολο τρόπο εγκλεισμού και επαναχρησιμοποίησης επιχειρηματικής λογικής σε εταιρικές εφαρμογές Java. Μακριά από το μεγάλο βάρος της παλιάς εποχής, το EJB σήμερα είναι ένα λιτό, βασισμένο σε σχολιασμούς πλαίσιο που σας επιτρέπει να έχετε πρόσβαση σε ένα ευρύ φάσμα λειτουργικών λειτουργιών της επιχείρησης, άμεσα. Εξετάστε το EJB την επόμενη φορά που θα σας ζητηθεί να αυξήσετε γρήγορα μια κατανεμημένη, επεκτάσιμη επιχειρηματική εφαρμογή. Μπορεί να εκπλαγείτε ευχάριστα.

Αυτή η ιστορία, "Τι είναι το EJB; Η εξέλιξη του Enterprise JavaBeans" δημοσιεύτηκε αρχικά από το JavaWorld.