Enterprise JavaBeans

Uit Wikipedia, de vrije encyclopedie
Ga naar: navigatie, zoeken
Portal.svg Portaal Javaplatform
Simpele EJB2 Architectuur

De Enterprise JavaBeans-specificatie is één van de Java-APIs 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:

  • communicatie met andere componenten via CORBA
  • persistentie
  • transacties
  • parallelle uitvoering
  • gebruikmaken van Java Messaging Service
  • gebruik van naming en directory services (JNDI)
  • beveiliging
  • in gebruik nemen van componenten in een EJB-container in een J2EE-applicatieserver

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:

cliënt-laag: webbrowser/HTML-pagina's
web-laag: Servlets/JSPs
businesslogica: EJB

Typen EJB's[bewerken]

Er zijn drie typen beans:

  • Stateless Session beans
  • Stateful Session beans
  • Message-driven 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 bean[bewerken]

Een stateless session bean is een gedistribueerd object dat geen status bijhoudt en dus door meerdere clients gebruikt kan worden.

Stateful session bean[bewerken]

Een stateful session bean is een gedistribueerd object dat 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 gebruik maakt van de J2EE-applicatie wordt dus een stateful session bean geïnstantieerd op het moment dat deze nodig is.

Message-driven beans[bewerken]

Een message driven bean is een object dat boodschappen ('messages') van een boodschappenrij ('message queue') verwerkt.

EJB-techniek[bewerken]

EJB's worden gebruikt in een EJB container in een applicatie server. 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 cliënt.

Deze methodes worden verdeeld in twee groepen:

  • methodes die niet gekoppeld zijn aan een specifieke instantie van de EJB, bijvoorbeeld de methodes om een EJB te creëren of om een bestaande EJB te vinden. Deze worden gedefinieerd in de home interface.
  • methodes voor een specifieke instantie van een EJB. Deze worden in de remote interface geplaatst.

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 cliënt kunnen worden gebruikt. De cliëntcode roept een methode op de proxy aan die vervolgens de argumenten naar de EJB server stuurt. Deze proxies 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 Interface[bewerken]

Zoals hierboven opgemerkt bevat de home interface de methoden die de cliënts 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 Interface[bewerken]

De 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-implementatieklasse[bewerken]

De 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 implementatiemethodes[bewerken]

De 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 implementatie methode 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 method, waarbij de naam en argumenten precies hetzelfde zijn.

Communicatie met andere componenten[bewerken]

De EJB-specificatie eist dat EJB-containers toegang tot EJB's mogelijk maken via RMI-IIOP. Dit maakt EJB's toegankelijk vanuit elke CORBA-applicatie.

Persistentie[bewerken]

EJB-containers moeten zowel CMP (Container Managed Persistency) als BMP (Bean Managed Persistency) ondersteunen.

Transacties[bewerken]

EJB-containers moeten container en bean managed transactions ondersteunen. Container managed transactions worden beschreven in een declaratieve syntaxis in de deployment descriptor.

Boodschappen[bewerken]

Java 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.

Beveiliging[bewerken]

De EJB-container moet er voor zorgen dat EJBs alleen kunnen worden aangeroepen door cliënts die hiervoor geautoriseerd zijn.

EJB's in gebruik nemen (deployment)[bewerken]

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:

  • Naam van de home interface
  • Java class van de EJB
  • Java interface voor de home interface
  • Java interface voor het object
  • Een beschrijving van eventuele persistente opslag
  • Een beschrijving van rollen en permissies voor toegangscontrole.

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.