EJB2 vs EJB3
EJB (Enterprise JavaBeans) is een Java API (Application Programming Interface) die wordt gevonden in de Java EE (Java Platform, Enterprise Edition)-specificatie. EJB beschrijft een architectonisch model voor de ontwikkeling van bedrijfsapplicaties. Dit is een beheerd model aan de serverzijde dat de bedrijfslogica van de bedrijfstoepassing kan vastleggen. IBM is de oorspronkelijke maker van EJB die het in 1997 ontwikkelde. Sun Microsystems nam het in 1999 over.
Vóór de introductie van EJB bleek dat de programmeurs de oplossingen voor problemen in back-end bedrijfscode vaak opnieuw implementeerden. Als gevolg hiervan werd EJB geïntroduceerd om deze veelvoorkomende problemen, zoals persistentie, transactie-integriteit en beveiliging, aan te pakken. EJB biedt standaardmanieren om deze back-endproblemen aan te pakken, door te specificeren hoe de applicatieserver transacties moet verwerken, integreren met JPA-services (Java Persistence API), gelijktijdigheidscontrole afhandelen, JMS-gebeurtenissen (Java Message Service) afhandelen, naamgevingsproblemen oplossen met JNDI (Java Naming and Directory Interface), veilige programma's ontwikkelen met JCE (Java Cryptography Extension) en JAAS (Java Authentication and Authorization Service), componenten implementeren, op afstand communiceren met RMI-IIOP (Java Remote Method Invocation-interface via het Internet Inter-Orb Protocol), webservices ontwikkelen, asynchrone methoden aanroepen en de Timer-service gebruiken.
EJB2
EJB2 (EJB 2.0) werd uitgebracht op 22 augustus 2001. Het beschrijft de specificatie voor het ontwikkelen van gedistribueerde objectgeoriënteerde applicaties in Java door tools te combineren die zijn ontwikkeld door verschillende leveranciers. Een van de belangrijkste doelen van EJB2 was om programmeurs in staat te stellen gemakkelijker bedrijfsapplicaties te ontwikkelen zonder dat ze details op laag niveau hoeven te begrijpen, zoals multi-threading en pooling van verbindingen. Een ander doel was om programmeurs in staat te stellen een "Bean" één keer te schrijven en overal te draaien zonder opnieuw te compileren (volgens de slogan "één keer schrijven, overal uitvoeren" van de Java-programmeertaal). Bovendien was EJB2 bedoeld om componenten die door verschillende leveranciers zijn ontwikkeld, gemakkelijk met elkaar te laten samenwerken, en leveranciers in staat te stellen extensies voor hun producten te schrijven die EJB's kunnen ondersteunen.
EJB3
EJB3 (EJB 3.0) werd uitgebracht op 11 mei 2006. EJB3 maakte het leven van programmeurs heel gemakkelijk door hen in staat te stellen annotaties te gebruiken in plaats van implementatiedescriptors die in eerdere versies werden gebruikt. EJB3 bevat een bedrijfsinterface en een specifieke entiteitsbean die die bedrijfsinterface kan implementeren, waardoor het gebruik van thuis/externe interfaces en het ejb-jar.xml-bestand niet meer nodig is. De algehele prestaties van EJB3 zijn veel verbeterd in vergelijking met EJB2, en er is een aanzienlijke toename in configureerbaarheid, flexibiliteit en draagbaarheid in deze release van EJB.
Wat is het verschil tussen EJB2 en EJB3?
EJB3 heeft een merkbare verbetering in configuratie en prestatie ten opzichte van EJB2. Een reden voor deze prestatieverbetering is het gebruik van de POJO (Plain Old Java Object) met metadata en XML Deployment Descriptors door EJB3 in plaats van JNDI-lookups die in EJB2 worden gebruikt voor objectreferenties. De configuratie van EJB3 is veel eenvoudiger omdat de programmeur geen Home/Remote-interfaces en andere (bijv. SessionBean) hoeft te implementeren, waardoor het niet langer nodig is om containercallback-methoden te gebruiken (zoals ejbActivate en ejbStore).
Bovendien is EJB3 beter dan EJB2 op het gebied van flexibiliteit en draagbaarheid. Het is bijvoorbeeld eenvoudig om EJB3-entiteiten om te zetten naar DAO (Data Access Object) en vice versa omdat EJB3-entiteiten lichtgewicht zijn (in tegenstelling tot de zwaargewicht EJB2-entiteiten, die bovengenoemde interfaces implementeren). Databasequery's die in EJB3 zijn geschreven, zijn zeer flexibel omdat het een verfijnde EJB-QL gebruikt, in plaats van de oudere versie van EJB-QL, die verschillende beperkingen had. EJB3 verwijdert alle portabiliteitsproblemen van EJB2 (die entiteitbeans gebruikt voor databasetoegang) door meer algemene JPA te ondersteunen voor alle gegevenstransacties.
In tegenstelling tot EJB2, die een EJB-container nodig heeft om uit te voeren, kan EJB3 worden uitgevoerd in een onafhankelijke JVM (Java Virtual Machine) zonder containers te hoeven gebruiken (dit is mogelijk omdat het geen standaardinterfaces implementeert). In tegenstelling tot EJB2 kan EJB3 eenvoudig worden aangesloten op persistentieproviders die door derden worden aangeboden. Een ander belangrijk verschil tussen EJB3 en EJB2 is dat EJB3 op annotatie gebaseerde beveiliging kan gebruiken, terwijl EJB2 op deployment descriptors gebaseerde beveiliging kan gebruiken. Dit betekent dat configuratie- en instellingstaken veel eenvoudiger zijn in EJB3, en er is een aanzienlijke vermindering van prestatieoverheads in vergelijking met EJB2.