Enterprise JavaBeansDe Enterprise JavaBeans-specificatie is een van de Java-API's in de J2EE-standaard. EJB's zijn bedoeld om in een meerlagenmodel de zogenaamde businesslogica van een applicatie te bevatten. EJBs bieden de volgende mogelijkheden:
Verder definieert de EJB-specificatie de rollen die de EJB-container en de EJB's spelen. Ook wordt beschreven hoe EJB's in gebruik worden genomen in de container. De plaats van EJB in de gelaagde J2EE-architectuur is als volgt: Typen EJB'sEr zijn drie typen beans:
Eerdere versies van Enterprise JavaBeans bevatten ook een entity bean. Dit waren objecten met een persistente status. Deze status kon door de bean zelf (Bean Managed Persistency of BMP) of door de container (Container Managed Persistency) worden vastgelegd. De Bean Managed Persistent Entity Bean was minder gebruikelijk. Vanaf Enterprise JavaBeans 3.0 heeft men de entity beans vervangen door de Java Persistence API. Stateless session beanEen stateless session bean is een gedistribueerd object dat geen status bijhoudt en dus door meerdere clients gebruikt kan worden. Stateful session beanEen stateful session bean is een gedistribueerd object dat de status van de client bijhoudt tussen aanroepen. De EJB-container associeert een instantie van stateful session bean met één bepaalde cliënt. Voor elke cliënt die gebruikmaakt van de J2EE-applicatie wordt dus een stateful session bean geïnstantieerd op het moment dat deze nodig is. Message-driven beansEen message driven bean is een object dat boodschappen ('messages') van een boodschappenrij ('message queue') verwerkt. EJB-techniekEJB's worden gebruikt in een EJB-container in een applicatieserver. De EJB-specificatie beschrijft hoe een EJB samenwerkt met een container en hoe een cliënt met de combinatie van de EJB-container en de EJB samenwerkt. Elke EJB bestaat uit een Java-implementatie-class en twee interfaces. De EJB-container instantieert objecten van de implementatie class om de EJB-implementatie te leveren. De twee interfaces worden gebruikt door de cliënt die de EJB aanroept. Dit kan een 'echte' cliënt zijn, maar ook een andere EJB. De twee interfaces, de home- en de remote-interface, specificeren de methodes van de EJB die aanroepbaar zijn door de client. Deze methodes worden verdeeld in twee groepen:
Omdat deze twee interfaces alleen maar interfaces zijn en dus zelf geen implementatie bevatten moet de EJB-container-implementatie classes genereren die als proxy in de client kunnen worden gebruikt. De cliëntcode roept een methode op de proxy aan die vervolgens de argumenten naar de EJB server stuurt. Deze proxy's gebruiken Java RMI om met de EJB-server te communiceren. De server roept vervolgens een methode aan op een instantie van een EJB in de container. Deze methode komt overeen met de methode die op de proxy werd aangeroepen. Home InterfaceZoals hierboven opgemerkt bevat de home-interface de methoden die de clients in staat stellen om bepaalde class-methoden aan te roepen, dat wil zeggen methoden die niet geassocieerd zijn met een bepaalde instantie van een class. De EJB-standaard beperkte de functionaliteit van deze methodes tot het creëren van een EJB of het vinden van een EJB als deze een entity bean is. Sinds de EJB 2.0-specificatie is er meer functionaliteit toegestaan dan creëren, verwijderen en vinden. Remote InterfaceDe remote-interface definieert de methodes die op een instantie van een EJB kunnen worden aangeroepen. Over het algemeen zullen dit de methodes zijn die de echte functionaliteit van een EJB implementeren. EJB-implementatieklasseDe implementatieklasse wordt door de programmeur geschreven. Deze klasse implementeert de businesslogica (of bevat data ten behoeve van businesslogica in andere classes). Deze klasse implementeert altijd de methodes van de remote-interface en mogelijk methodes van de home-interface. Overeenkomsten tussen interfacemethodes en implementatiemethodesDe aanroep van een methode van de home-interface wordt door de EJB-container doorgestuurd naar een corresponderende methode op de implementatieklasse, voorafgegaan door een 'ejb'-voorvoegsel. De eerste letter van de home-interface-methode wordt hierbij in een hoofdletter vertaald (dit is in overeenstemming met de richtlijnen voor namen van methods zoals die door Sun worden beschreven). Uiteraard moet de implementatiemethode exact dezelfde argumenten accepteren als de methode van de home-interface. Aanroepen van methodes op de remote-interface worden door de EJB-container doorgegeven aan de corresponderende implementatie-methode, waarbij de naam en argumenten precies hetzelfde zijn. Communicatie met andere componentenDe EJB-specificatie eist dat EJB-containers toegang tot EJB's mogelijk maken via RMI-IIOP. Dit maakt EJB's toegankelijk vanuit elke CORBA-applicatie. PersistentieEJB-containers moeten zowel CMP (Container Managed Persistency) als BMP (Bean Managed Persistency) ondersteunen. TransactiesEJB-containers moeten container en bean managed transactions ondersteunen. Container managed transactions worden beschreven in een declaratieve syntaxis in de deployment descriptor. BoodschappenJava Message Services (JMS) worden gebruikt om asynchroon boodschappen uit te wisselen tussen componenten. Dit maakt het ook mogelijk om een J2EE-applicatie via een message queue (bijvoorbeeld IBM MQSeries of Oracle Advanced Queueing) te communiceren met andere applicaties. BeveiligingDe EJB-container moet ervoor zorgen dat EJB's alleen kunnen worden aangeroepen door clients die hiervoor geautoriseerd zijn. EJB's in gebruik nemen (deployment)De EJB-specificatie beschrijft ook het mechanisme dat het mogelijk maakt om EJB's in gebruik te nemen op een standaard manier, ongeacht welke J2EE-applicatieserver er gebruikt wordt. Informatie over hoe de EJB moet worden gebruikt zoals de namen van de remote en de home interfaces, of en hoe de bean in een database moet worden opgeslagen wordt beschreven in de deployment descriptor. Dit XML-document heeft een voorgeschreven opbouw met een beschrijving voor elke EJB die in gebruik genomen moet worden. Deze beschrijving bevat de volgende informatie voor elke EJB:
Er moet wel worden opgemerkt dat veel EJB-containers extra beschrijvingen gebruiken om EJB's in gebruik te nemen. Deze informatie moet dan worden vastgelegd in een extra file of in een ander formaat. De meeste leveranciers van EJB-containers leveren ook gereedschappen die deze extra informatie gebruiken en mogelijk ook de home en remote interfaces genereren aan de hand van deze extra informatie. |