EJB2 vs EJB3
EJB (Enterprise JavaBeans) är ett Java API (Application Programming Interface) som finns inom Java EE-specifikationen (Java Platform, Enterprise Edition). EJB beskriver en arkitektonisk modell för utveckling av företagsapplikationer. Detta är en hanterad server-side-modell som kan fånga affärslogiken i företagsapplikationen. IBM är EJB:s ursprungliga skapare som utvecklade det 1997. Sun Microsystems antog det 1999.
Före introduktionen av EJB fann man att lösningar på problem som finns i back-end affärskod ofta omimplementerades av programmerarna. Som ett resultat introducerades EJB för att ta itu med dessa vanliga problem som persistens, transaktionsintegritet och säkerhet. EJB tillhandahåller standardsätt att hantera dessa backendproblem genom att specificera hur applikationsservern ska behandla transaktioner, integrera med JPA (Java Persistence API) tjänster, hantera samtidighetskontroll, hantera JMS (Java Message Service) Events, lösa namnproblem med JNDI (Java Naming and Directory Interface), utveckla säkra program med JCE (Java Cryptography Extension) och JAAS (Java Authentication and Authorization Service), distribuera komponenter, kommunicera på distans med RMI-IIOP (Java Remote Method Invocation-gränssnitt över Internet Inter-Orb Protocol), utveckla webbtjänster, anropa asynkrona metoder och använda Timer-tjänsten.
EJB2
EJB2 (EJB 2.0) släpptes den 22 augusti 2001. Den beskriver specifikationer för utveckling av distribuerade objektorienterade applikationer i Java genom att kombinera verktyg utvecklade av olika leverantörer. Ett av huvudmålen med EJB2 var att tillåta programmerare att utveckla företagsapplikationer lättare utan att behöva förstå detaljer på låg nivå, såsom multi-threading och anslutningspooling. Ett annat mål var att tillåta programmerare att skriva en "Bean" en gång och köra var som helst utan omkompilering (att följa sloganen "skriv en gång, kör var som helst" för programmeringsspråket Java). Dessutom avsåg EJB2 att tillåta komponenter som utvecklats av olika leverantörer att enkelt samverka, och tillåta leverantörer att skriva tillägg för sina produkter som kan stödja EJBs.
EJB3
EJB3 (EJB 3.0) släpptes den 11 maj 2006. EJB3 gjorde programmerares liv väldigt enkelt genom att tillåta dem att använda anteckningar istället för distributionsbeskrivningar som användes i tidigare versioner. EJB3 innehåller ett affärsgränssnitt och en specifik enhetsböna som kan implementera det affärsgränssnittet, vilket tar bort behovet av att använda hem-/fjärrgränssnitt och ejb-jar.xml-filen. Den övergripande prestandan för EJB3 är mycket förbättrad jämfört med EJB2, och det finns en avsevärd ökning av konfigurerbarhet, flexibilitet och portabilitet i den här utgåvan av EJB.
Vad är skillnaden mellan EJB2 och EJB3?
EJB3 har en märkbar förbättring i konfiguration och prestanda jämfört med EJB2. En anledning till denna prestandaförbättring är användningen av POJO (Plain Old Java Object) med metadata och XML Deployment Descriptors av EJB3 istället för JNDI-uppslagningar som används i EJB2 för objektreferenser. Konfigurationen av EJB3 är mycket enklare eftersom programmeraren inte behöver implementera Home/Remote-gränssnitt och andra (t.ex. SessionBean), vilket tar bort behovet av att använda containeråteruppringningsmetoder (som ejbActivate och ejbStore).
Dessutom är EJB3 bättre än EJB2 när det gäller flexibilitet och portabilitet. Till exempel är det lätt att konvertera EJB3-entiteter till DAO (Data Access Object) och vice versa eftersom EJB3-entiteter är lätta (till skillnad från de tunga EJB2-entiteterna, som implementerar ovan nämnda gränssnitt). Databasfrågor skrivna i EJB3 är mycket flexibla eftersom den använder en förfinad EJB-QL, istället för den äldre versionen av EJB-QL, som hade flera begränsningar. EJB3 tar bort alla portabilitetsproblem för EJB2 (som använder entitetsbönor för databasåtkomst) genom att stödja mer generaliserad JPA för alla datatransaktioner.
Till skillnad från EJB2, som behöver en EJB-behållare för att exekvera, kan EJB3 exekveras i en oberoende JVM (Java Virtual Machine) utan att behöva använda behållare (detta är möjligt eftersom den inte implementerar standardgränssnitt). Till skillnad från EJB2 är EJB3 lätt att plugga med persistensleverantörer som erbjuds av tredje part. En annan viktig skillnad mellan EJB3 och EJB2 är att EJB3 kan använda annoteringsbaserad säkerhet, medan EJB2 använde distributionsdeskriptorbaserad säkerhet. Detta innebär att konfigurations- och installationsuppgifter är mycket enklare i EJB3, och det finns en avsevärd minskning av prestandakostnader jämfört med EJB2.