• Shuffle
    Toggle On
    Toggle Off
  • Alphabetize
    Toggle On
    Toggle Off
  • Front First
    Toggle On
    Toggle Off
  • Both Sides
    Toggle On
    Toggle Off
  • Read
    Toggle On
    Toggle Off
Reading...
Front

Card Range To Study

through

image

Play button

image

Play button

image

Progress

1/77

Click to flip

Use LEFT and RIGHT arrow keys to navigate between flashcards;

Use UP and DOWN arrow keys to flip the card;

H to show hint;

A reads text to speech;

77 Cards in this Set

  • Front
  • Back

Wie sieht die 6-Schichten-Architektur mit allen im Kurs besprochenen Themen aus?

Was ist eine EJB?

eine spezielle Javaklasse, deren Methoden Anwendungslogik implementieren

Sie zusätzlichen Möglichkeiten bieten EJBs gegenüber gewöhnlichen Javaklassen?

- wahlweise synchroner oder asynchroner Zugriff
- Client-spezifischer Zustand
- Verteilung mit transparentem1
Remote-Zugriff und Lastausgleich
- konfigurierbares automatisches Transaktionsmanagement
- Sicherheitsmanagement

Welche Arten von EJBs gibt es?

Session Beans und Message-Driven Beans.

Was sind Session Beans?

Vor der EJB Version 3.1 unterstützten Session Beans ausschließlich synchrone Methodenaufrufe: der aufrufende Thread
wartet bis zur Abarbeitung der aufgerufenen Methode und bekommt nach deren Terminierung ggf. den Rückgabewert übermittelt.


-Seit der EJB Version 3.1 unterstützen Session Beans auch asynchrone Methodenaufrufe: der
Aufrufer muss nicht warten, bis die Session Bean die Methode abgearbeitet hat, sondern
erhält direkt die Ablaufkontrolle zurück.

Was sind Message Driven Beans?

- unterstützen ausschließlich asynchrone Methodenaufrufe und werden stets bei einer Nachrichtenwarteschlange angemeldet.


- Über einen vom Application Server bereitgestellten Nachrichtendienst kann ein Client so Nachrichten an die
Message-Driven Bean senden, welche darauf mit der Ausführung von Anwendungslogik reagiert.


- Diese Reaktion erfolgt asynchron, d.h. der Aufrufer sendet lediglich seine Nachricht und arbeitet dann parallel weiter, ohne auf eine Rückmeldung der Bean zu warten.

Wann sind asynchrone Aufrufe sinnvoll?

- insbesondere für langwierige Abläufe, während derer der aufrufende Thread nicht blockiert bleiben soll.


-Bei Web-Anwendungen kann so z.B. ein langes Warten des Browsers auf die Response vermieden werden

Welche Arten von SessionBeans gibt es?

- Stateless Session Beans


- Stateful Session Beans

Was ist eine Stateless Session Bean?

- Eine Instanz einer Stateless Session Bean wird einem Client lediglich zur Ausführung
einer Methode zugeordnet.


- Nach der Abarbeitung der Methode wird diese Zuordnung zum Client wieder gelöst


- die Instanz verbleibt in einem Pool, bis sie wieder zur Bearbeitung der Anfrage irgendeines Clients benötigt oder zur Freigabe von Ressourcen zerstört wird.


- Eine solche Stateless Session Bean könnte zwar, wie jedes Java-Objekt, einen Zustand haben.


- Dies ist jedoch in der Regel nicht empfehlenswert, da mehrere parallel existierende Instanzen einer sonst derartigen Session Bean unterschiedliche
Zustände annehmen könnten, ohne fest einem Client zugeordnet zu sein.


- Folglich wird man in einer Stateless Session Bean im Normalfall lediglich Methoden, jedoch keine Attribute implementieren

Was ist eine Stateful Session Bean?

- Eine Instanz einer Stateful Session Bean ist immer exklusiv einem bestimmten Client zugeordnet


- für jeden neuen Client wird eine neue Instanz erzeugt und bleibt bis zu ihrer Zerstörung diesem Client zugeordnet.


- Falls die Bean-Klasse Attribute besitzt,
ihre Instanzen also einen Zustand haben, so ist auf diese Weise sichergestellt, dass zu
jedem Client ein spezifischer Zustand, auch als Conversational State bezeichnet, nachgehalten wird.

Wann sollten Session Beans als stateful und wann als stateless realisiert werden?

- Eine Session Bean sollte nur dann als stateful realisiert werden, wenn das Speichern eines Client-spezifischen Zustands auch tatsächlich benötigt wird.


- Beans ohne Zustand sollten dagegen stets stateless sein, da durch die Wiederverwendung der Instanzen für mehrere Clients deutliche Ressourcen-Einsparungen erzielt werden können.


- Das Pooling von gerade nicht benötigten Instanzen von Stateless Beans reduziert darüber hinaus den ansonsten durch Zerstören und Neu-Erzeugen von Instanzen verursachten Aufwand, was sich positiv auf die Performanz auswirkt.

Was ist ein Pool?

eine Menge von Ressourcen (z.B. Instanzen von Klassen), die jederzeit einsatzbereit sind und bei Bedarf verwendet werden können. Nach der Verwendung werden sie nicht zerstört, sondern in den Pool zurückgelegt.

Ist eine Message Driven Bean grundsätzlich stateless oder stateful?

grundsätzlich stateless: Alle Nachrichten in der Warteschlange werden an die angemeldeten Instanzen der Bean-Klasse verteilt, dabei findet
keine Client-spezifische Zuordnung statt

Aus welchen Gründen können EJBs auf verschiedene Server verteilt werden?

- Ausfallsicherheit


- Verteilen der Rechenlast

Wie wird der Zugriff auf Beans, die auf verschiedenen Server gespeichert sind, geregelt?

- der EJB-Container regelt die transparente Zuteilung von Anfragen der Clients an Instanzen passender EJBs auf erreichbaren, möglichst niedrig ausgelasteten Servern.


-Ein Client fordert lediglich eine EJB-Instanz an, deren Anwendungslogik er anschließend ausführt (bzw. er sendet eine Nachricht).


- Und selbst wenn (zunächst) die
EJBs nur auf einem Server installiert werden, so ist das System skalierbar durch die Möglichkeit, im Falle steigender Auslastung nachträglich eine Verteilung vorzunehmen.

Inwiefern wird bei Session Beans zwischen lokalem und entferntem Zugriff unterschieden?

- Eine Session Bean musste vor der EJB Version 3.1 ihre Routinen für die Anwendungslogik grundsätzlich über eine Schnittstelle, das so genannte Business Interface, anbieten.


- Das heißt, jede Session Bean musste zwangsläufig entweder ein Local Interface (für einen lokalen Zugriff) oder ein Remote Interface (für einen Remote-Zugriff) implementieren und dadurch die Anwendungslogik-Methoden exportieren.

Welchen Vorteil hat es, wenn ein Client eine Session Bean über ein Remote Interface anspricht?

Zugriff auf Beans wird möglich, die auf anderen Servern installiert sind

Welchen Nachteil hat es, wenn ein Client eine Session Bean über ein Remote Interface anspricht?

- alle Parameter müssen serialisiert werden


- Parameter werden als Kopie übergeben


- Referenzübergabe ist nicht möglich


- Dadurch fällt ein Aufwand an, der sich nur lohnt, wenn Bean tatsächlich auf einem anderen Server liegt, sonst ist lokaler Zugriff effizienter

Warum ist ein lokaler Zugrif effizienter?

- Keine Kommunikation über Netzwerk


- normale Java-Methodenaufrufe

Was bedeutet no-interface-view?

- Für lokale Zugriffe sind keine Interfaces mehr notwendig (seit EJB 3.1)


- Dem Client stehen alle öffentlichen Methoden der Bean zur Verfügung, und die Bean kann direkt, anstatt über ein Interface, angesprochen bzw. referenziert werden.

Was ist eine Transaktion?

eine Folge von Ausführungsschritten, die eine logische Einheit bilden.

Was sind die ACID-Eigenschaften einer Transaktion?

- A: Atomarität - eine Transaktion wird entweder ganz oder gar nicht ausgeführt und ist somit nicht teilbar


- C: Konsistenz - eine Transaktion überführt eine Datenbank von einem konsistenten Zustand in einen anderen konsistenten Zustand


- I: Isolation - Transaktionen sind voneinander isoliert und somit dürfen sich zwei Transaktionen nicht gegenseitig beeinflussen


- D: Dauerhaftigkeit - Daten müssen nach erfolgreicher Durchführung der Transaktion dauerhaft gespeichert sein

Was ist das automatische Transaktionsmanagement des EJB-Containers?

Container startet eine Transaktion, wenn eine EJB-Methode von einem Client aufgerufen wird und beendet die Transaktion beim Beenden der Methode wieder (implizites Transaktionsmanagement)

Was ist explizites Transaktionsmanagement?

Das Verhalten des Transaktionsmanagements kann konfiguriert werden

Was sind Platform Roles?

Rollen im Prozess der Entwicklung der Plattform selbst, der Werkzeugentwic klung, der Anwendungsentwicklung für die Plattform und für den Anwendungsbetrieb

Welche Platform Roles gibt es bei JavaEE und welche Aufgaben haben sie?

- Enterprise Bean Provider: Erstellung einer oder mehrerer Java Enterprise Beans. Bereitstellung der Enterprise Java Beans für
den Application Assembler


- Application Assembler: Zusammenstellung einer Enterprise Application aus einzelnen Anwendungskomponenten. Bereitstellung für den Deployer


- Deployer: Installation von Web-Anwendungen und EJBs in
einem Container. Konfiguration.


- System Administrator: Einrichtung, Betrieb, Überwachung des Systems.

Welche Vorteile hat die Verwendung von Annotationen zur Konfiguration?

- einfacher und konfortabler, da die Meta-Annotationen direkt an die entsprechenden Quellcodeteile geheftet werden


- Damit ist der Bezug zu den Programmteilen direkt vorhanden, was bei einer externen Datei erst noch hergestellt werden müsste

Welche Vorteile hat die Verwendung einer xml-Datei zur Konfiguration?

Änderung der Konfiguration ohne Neuübersetzung möglich

Haben Annotationen oder der xml-Deskriptor Vorrang und warum?

- xml-Desktripor


- Das soll insbesondere dem Application


Assembler bzw. dem Deployer ermöglichen, bei Bedarf die vom Komponenten-Entwickler per Annotationen vorgenommenen Voreinstellungen einfach über Deskriptoren zu modifizieren.

Was ist das Business Interface?

- ein gewöhnliches Java-Interface, das über eine Annotation als Business Interface ausgezeichnet wird


- lokales Interface: javax.ejb.Local


- entferntes Interface: javax.ejb.Remote

Wann kann die Local-Annotation entfallen?

wenn z.B. die EJB-Klasse nur ein einziges Interface implementiert und dieses keine der beiden Annotationen aufweist, wird es automatisch als Local Interface interpretiert


- Es ist jedoch besserer Programmierstil, immer
eine explizite Auszeichnung vorzunehmen – schon aus Gründen der Lesbarkeit

Wie sieht die grundlegende Syntax eines EJB-Interfaces aus?

@Local


public interface MyEjbInterface { }

Welche Einschränkungen gibt es bei Business-Methoden?

- die Methodenbezeichner dürfen nicht mit ejb beginnen, da es dabei zu Konflikten mit internen Methoden kommen könnte


- BusinessMethoden dürfen nicht statisch sein,


- alle Methoden müssen als public und dürfen nicht als final deklariert sein


- die Parameter von Business-Methoden eines Remote Interface müssen serialisierbar sein.

Mit welcher Annotation werden Beans als stateful oder stateless markiert?

- javax.ejb.Stateful


- javax.ejb.Stateless

Was besagt die Namens-Konvention von Oracle bzgl. Bean-Klassen?

Bezeichner enden mit dem Zusatz Bean

Woran erkennt das Framework Beanklassen?

Beanklassen müssen seit EJB 3.0 nicht von einer abstrakten Klasse abgeleitet werden o.ä., sondern das Framework erkennt die Klassen an der Annotation und nicht am Typ

Mit Hilfe welcher Mechanismen können nicht mehr benötigt Beans wieder zerstört werden?

- Timeout Mechanismus


- Remove-Methode

Wie funktioniert der Timeout-Mechanismus?

jede für eine gewisse Mindestzeitspanne nicht mehr von ihrem Client benutzte Stateful Session
Bean wird automatisch entsorgt.

Wie funktioniert die Remove-Methode?

- Ressourcenverbrauch durch schon längst nicht mehr benötigte Instanzen soll so weit wie
möglich vermieden werden, indem man dem Client die Möglichkeit gibt, sich abzumelden
und somit seine Stateful Session Bean zum sofortigen Zerstören freizugeben


- Methode wird mit folgender Annotation versehen: javax.ejb.Remove


- Nach Ausführung dieser Methode wird die Instanz durch Container zerstört


- Im Standardfall findet die Zerstörung unabhängig davon statt, ob die Ausführung der Remove-Methode fehlerfrei verlief.


- Über den optionalen BooleanParameter retainIfException des Remove-Annotationstyps kann eingestellt werden, dass der Container die Instanz nur zerstören darf, wenn beim Aufruf der Remove-Methode kein Fehler (Exception) aufgetreten ist, andernfalls wird die Instanz behalten

Was ist eine Callback-Methode?

- wird nicht vom Client, sondern vom Container beim Auftreten eines gewissen Ereignisses im Lebenszyklus der Bean aufgerufen, so dass die Bean auf dieses Ereignis reagieren kann.


- Die EJB-Spezifikation bezeichnet dies als Lifecyle Event Callback.


- Ein Ereignis, über das der EJB-Container die Bean durch einen solchen Callback informieren kann, wird als Callback-Ereignis bezeichnet


- Eine Rückruffunktion ist eine Funktion, die einer anderen Funktion als Parameter übergeben wird. Von dieser wird sie dann unter bestimmten Bedingungen aufgerufen.

Welche Zustände kennt eine Stateless Session Bean?

- nur den Zustand bereit


- sie wartet auf Aufrufe ihrer Business-Methoden

Wie sieht der Lebenszyklus einer Stateful Session Bean aus?

zwei Callback-Ereignisse: das Eintreten in den Bereit-Zustand nach Konstruktion (PostConstruct) und das Verlassen des Bereit-Zustands vor Zerstörung (PreDestroy).

zwei Callback-Ereignisse: das Eintreten in den Bereit-Zustand nach Konstruktion (PostConstruct) und das Verlassen des Bereit-Zustands vor Zerstörung (PreDestroy).

Wie sieht der Lebenszyklus einer Stateless Session Bean aus?

- hat auch einen Bereit-Zustand, in dem sie direkt Anwendungslogik ausführen kann


- auch hier gilt, dass bei der Instanziierung zunächst die Dependency Injection und danach der PostConstruct-Callback ausgeführt werden.


- Bei ihrer Zerstörung findet ebenfalls ein PreDestroy-Callback statt.


- Da für jeden Client eine eigene Instanz der Stateful Session Bean angelegt wird und
sich durch lange Timeout-Intervalle mitunter recht viele Karteileichen unter den Instanzen finden, kann die Situation eintreten, dass die Systemressourcen eines Servers nicht
für alle zu haltenden EJB-Instanzen ausreichen.


- In diesem Fall kann der EJB Container
einige – typischerweise nach dem LRU-Schema (Least Recently Used) ausgewählte – Stateful Session Beans passivieren, d.h. in einen Sekundärspeicher auslagern


- Ruft der Client einer passivierten Bean eine Business-Methode auf, so wird die Bean zunächst vom Container wieder aktiviert, und anschließend wird die Business-Methode ausgeführt

Welche Callback-Ereignisse hat eine Stateless Bean zusätzlich?

Ein PrePassivate-Callback findet statt, bevor die Passivierung eingeleitet wird, ein PostActivate-Callback wird nach Abschluss der Reaktivierung ausgelöst, aber noch vor der Ausführung der Business-Methode, deren Aufruf
die Reaktivierung veranlasst hat.

Was geschieht bei der Passivierung einer Bean?

dann findet eine Serialisierung und Auslagerung des gesamten Conversational State der Stateful Session Bean statt

Wann kann es sinnvoll sein, die Callback-Methoden für die Passivierung zu implementieren?

- Wenn im Conversational State gehaltene so genannte open resources wie z.B. offene Socketverbindungen zur TCP/IP-Kommunikation nicht passiviert werden können.


- Sie werden später wieder hergestellt


- Eine solche Verbindung muss vielmehr vor der Passivierung geschlossen und kann nach der Reaktivierung wieder geöffnet werden.

Was geschieht, wenn der Zustand einer zu passivierenden Bean nicht serialisierbar ist?

Der Container darf sie zerstören statt sie zu passivieren

Was sind Interceptors?

- Objekte, die einen Methodenaufruf abfangen und vor / nach Ausführung der Methode bestimmte Aktionen durchführen


- Einfache Java-Klassen


- Zur Laufzeit wird automatisch eine Instanz
dieser Klasse erzeugt.


- Dieses Interceptor-Objekt muss über eine (oder mehrere) Methoden verfügen, die an die Business-Methoden von EJBs angehängt oder ihnen vorangestellt werden.

Wann ist der Einsatz von Interceptoren sinnvoll?

- redundanter Code kann vermieden werden, wenn er sonst für mehrere Methoden aufgerufen werden müsste


- Es kann verhindert werden, dass die Geschäftsmethoden Code enthalten, der gar nicht zur eigentlichen Aufgabe gehört

Welche Alternative gibt es zur Implementierung einer Interceptor-Klasse?

- Anstatt eine Interceptor-Klasse zu implementieren, ist es ebenso möglich eine Interceptor-Methode direkt in eine EJB-Klasse zu integrieren.


- Eine solche Methode wird dann
jeden Aufruf einer beliebigen Business-Methode dieser EJB-Klasse abfangen

Wie muss eine Interceptor-Methode aussehen?

- markiert durch javax.Annotation.AroundInvoke


- erhält als Übergabe ein Objekt vom Typ javax.interceptor.InvocationContext


- darf beliebigen Zugriffsmodifikator tragen


- darf nicht static oder final sein


- Damit die so erstellte Interceptor-Methode nicht anstelle einer Business-Methode, sondern, um sie herum“ ausgeführt wird, muss die Stelle im Code der Interceptor-Methode, an der die Business-Methode eingeschoben werden soll, durch einen Aufruf der Methode proceed() des als Parameter übergebenen InvocationContext-Objekts markiert werden.


- Alle Anweisungen der Interceptor-Methode, die vor diesem proceed-Aufruf stehen, werden also vor der Anwendungslogik eingeschoben, alle Anweisungen nach dem proceed-Aufruf danach.


- Da die eingeschobene Business-Methode ein Funktionsergebnis zurückgeben könnte, gibt die proceed-Methode ein Object aus, das seinerseits von der Interceptor-Methode zurückzugeben ist

Welchen Vorteil haben Interceptor-Klassen?

Sie können von mehr als einer EJB-Klasse verwendet werden

Wie erhält der Client eine Instanz einer EJB?

- er darf new nicht selbst aufrufen


- er muss eine Instanz vom EJB-Container anfordern


- Implementiert die Bean ein Business Interface, wird dabei keine direkte Referenz auf die Bean-Instanz erworben (was bei entfernten EJBs auf anderen Servern auch gar nicht möglich wäre).
- Vielmehr bekommt der Client eine Referenz auf ein lokales Stub-Objekt dessen Klasse
ebenfalls das Business Interface implementiert und das z.B. für den Aufruf der Interceptor-Methoden oder bei Remote Interfaces für die Serialisierung der Parameter und die
Weiterleitung des Aufrufs an die eigentliche Bean-Klasse sorgt.


- Dieser ganze Mechanismus wird vom EJB-Container bereitgestellt und ist für den Client transparent: Aus seiner Sicht wird ein Objekt vom Typ des Business Interfaces bezogen, auf welchem die Business-Methoden aufgerufen werden können

Was ist ein Stub?

Ein Stub bezeichnet Programmcode, der einen anderen Programmcode ersetzt, z.B. wenn sich dieser Programmcode auf einem anderen Computer befindet. Unter einem Stub Objekt versteht man einen (Client-seitigen) Stellvertreter für ein entferntes Objekt, das auf einem Server
liegt, mit dem der Client kommuniziert

Welche Möglichkeiten gibt es für einen Client, eine EJB vom Container anzufordern?

- Dependency Injection


- Lookup-Anweisungen

Was ist Dependency Injection?

- Client enthält ein Attribut vom Typs des Business Interfaces oder der zu beziehenden Klasse


- Das Attribut wird mit einer Annotation des Typs javax.ejb.EJB


- Wird ein Business Interface verwendet, bestimmt dessen Art (Local oder Remote) die Zugriffsart.


- Falls zu einer Session Bean sowohl
ein Remote als auch ein Local Interface existiert, wird über die Typdeklaration dieses
Attributs bestimmt, welche der beiden angebotenen Zugriffsarten zu verwenden ist


- Der Container sorgt dann zur Laufzeit
dafür, dass rechtzeitig vor einem Zugriff des Clients auf dieses Attribut eine Instanz der
EJB erzeugt oder aus einem Pool ungenutzter Instanzen entnommen wird und eine Referenz darauf in das Attribut eingetragen wird


- Damit die Dependency Injection funktionieren kann, muss der Client in einem Java EEContainer ausgeführt werden, der seine Komponenten introspiziert und dabei nach solchen EJB-Annotationen sucht

Welche Container introspizieren ihre Komponenten?

- Webcontainer


- EJB Container


- Client Container

Was ist Introspektion?

- Programm kennt seine eigene Struktur


- In der objektorientierten Programmierung erlaubt Introspektion die Sammlung von Info rmationen über Klassen oder deren Instanzen zur Laufzeit des Programms

Was ist JNDI?

- Java Naming and Directory Interface


- ein server-übergreifend arbeitender Namens- und Verzeichnisdienst zur Referenzierung von Ressourcen, die über mehrere Server verteilt sind


- Ressourcen werden unter einem JNDI-Namen verzeichnet und können anhand dieses Namens über einen Lookup lokalisiert werden


- Namenszuordnungen werden in
Kontexten organisiert

Was ist ein Kontext?

- eine Menge von Paaren aus jeweils einem Namen und einer an diesen Namen gebundenen Ressource.


- Dabei kann eine solche Ressource wieder ein Kontext (Subkontext) sein, d.h. die Kontexte können hierarchisch organisiert werden.

Was ist der InitialContext?

Ausgangspunkt für JNDI-Lookups

Wann wird zu Remote Interface im Glassfish ein JDNI-Eintrag angelegt?

- Automatisch bei deren Deployment


- qualifizierter Klassenname wird als JNDI-Name verwendet, sodass der Client sie darüber direkt mit einem Lookup ansprechen kann

Wie arbeitet der Container beim Verwenden einer Session Bean über ein Local Interface?

- er legt nicht automatisch einen JNDI-Namen an


- Client muss eine – beim Deployment durch seinen Container ausgewertete – Deklaration vornehmen, welche EJB-Klasse er benötigt und unter welchem JNDI-Namen er sie im Namensverzeichnis erwartet

Wie kann der Client angeben, unter welchem Namen er welche EJB-Klassen erwartet?

- Falls Teile des Clients introspiziert werden (bei einer Web-Anwendung z.B.
Servlets oder Managed Beans), kann dort die EJB per Dependency Injection bezogen werden. Dabei kann in der EJB-Annotation über den Parameter name ein JNDI-Name festgelegt werden, über den sich die so bezogene Bean dann auch von anderen, nicht introspizierten Teilen per Lookup beziehen lässt.


- Bei einer Web-Anwendung kann ein Eintrag im Deployment Decriptor web.xml angelegt werden, der insbesondere die EJB-Klasse und den gewünschten JNDI-Namen spezifiziert

Wie wird eine Message Driven Bean angesprochen?

- verfügt nicht über ein Business Interface


- wird angesprochen über einen Nachrichtendienst


- wird dazu bei einer Nachrichtenwarteschlange als Nachrichtenempfänger registriert


- JavaEE bietet als Nachrichtendienst Java Message Server (JMS) an


- Die Implementierung der Message Driven Bean ist vom Nachrichtendienst abhängig

Welche Klassen können als Nachrichtenempfänger fungieren?

- alle Klassen, die das Interface
javax.jms.MessageListener implementieren


- Dieses Interface exportiert eine einzige Methode, die von der Empfängerklasse zu implementieren ist und zur Übergabe der
Nachricht durch den Nachrichtendienst dient. Sie hat folgende Signatur: void onMessage(javax.jms.Message)


- In dieser Methode ist die Reaktion auf die Nachricht zu implementieren.


- Natürlich darf die Empfängerklasse zusätzlich weitere Methoden implementieren, die ihrerseits durch die Methode onMessage aufgerufen werden können.

Wie wird ein Nachrichtenempfänger zu einer Message Driven Bean?

durch Annotation des Typs javax.ejb.MessageDriven

Wie wird eine Message Driven Bean an einer Nachrichtenwarteschlange angemeldet?

- Diese Aufgabe gehört laut EJB-Spezifikation zwar in den Verantwortungsbereich des Deployers und nicht des die Bean implementierenden und bereitstellenden Bean Providers.


- Jedoch kann der Bean Provider Vorschläge unterbreiten, und ein Application Server kann (muss jedoch nicht) in der Lage sein, diese Vorschläge auszuwerten und umzusetzen, so lange der Deployer sie nicht überstimmt.


- Der Bean Provider kann im optionalen Parameter mappedName des MessageDrivenAnnotationstyps den JNDI-Namen der Warteschlange angeben, von der die Bean mit Nachrichten versorgt werden soll


- dies ist jedoch produktspezifische Notation ist, die nicht von jedem Application Server unterstützt wird

Welche Methodenaufrufe werden bei Message Driven Beans durch den AroundInvoke-Interceptor abgefangen?

nur die Aufrufe der onMessage-Methode, nicht die durch onMessage ausgelösten Sub-Aufrufe von Methoden

Wie wird eine Message Driven Bean angesprochen und zur Ausführung von Anwendungslogik veranlasst?

- eine Nachricht wird an Warteschlange gesendet


- Dabei ist es für den Client irrelevant, ob es sich bei dem Nachrichtenempfänger überhaupt um eine EJB handelt oder um irgendeinen anderen Nachric htenempfänger.


- Falls eine Message-Driven Bean immer dieselbe Aktion ausführen soll und dazu auch
keine Eingabeparameter erwartet, genügt eine einfache leere Nachricht, um diese Aktion auszulösen.


- Erwartet sie jedoch Eingaben oder soll sie gar mehrere alternative Aktionen anbieten, so müssen alle benötigten Informationen als Nachrichteninhalt übermittelt werden.


- Der vom Empfänger erwartete Aufbau einer Nachricht, also seine Eingabeschnittstelle, sollte gut dokumentiert werden

Welche Inhalte hat eine Nachricht?

- Message Body als Nachrichteninhalt


- Weitere Message Properties, die jeweils
ein Tripel aus einem Namen, einem Datentyp (Basisdatentyp oder String) und einem
Wert dieses Typs darstellen

Wie wird eine Verbindung zur Nachrichtenwarteschlange hergestellt?

- zwei Ressourcen werden benötigt


- Die Warteschlange selbst sowie eine zur Herstellung der Verbindung zu dieser
Warteschlange benötigte Connection Factory

Welche Rückmeldung erhält ein Client direkt nach dem Senden einer Nachricht?

- sie informiert ihn darüber, ob der Nachrichtenversand an die Message Queue funktioniert hat (falls nicht, wird eine Exception ausgelöst).


- Danach arbeitet der Client parallel weiter, während die Nachricht letztendlich von der Queue an die Message-Driven Bean
zugestellt und von dieser verarbeitet wird.


- Es existiert also kein direkter Rückkanal von
der Bean zum Client – das ist der Preis für die asynchrone Ausführung der Anwendungslogik.

Wie kann der Client ausführlichere Rückmeldungen nach dem Senden einer Nachricht erhalten?

- Über Einträge in Logdateien


- Überwachung eines Datenbankstatus


- Beans schreiben Rückmeldungen in ein temporäres Verzeichnis, aus dem der Client dieses dann auslesen kann

Was ist beim Hinterlegen von Informationen für Clients zu beachten?

- mehrere Instanzen einer Message-Driven Bean können parallel für verschiedene Clients arbeiten


- somit können Informationen für mehrere Clients gesammelt werden.


- Es wird daher ein Mechanismus benötigt, der einem Client ermöglicht, genau die für ihn bestimmten Rückmeldungen abzurufen.

Wie funktioniert der optimistische Zeitstempel-Mechanismus?

- aktueller Zeitstempel wird beim Senden einer Nachricht im Client gespeichert und in die Nachricht integriert


- Die Message-Driven Bean, die auf die Nachricht reagieren soll, erstellt ein
Ergebnis-Objekt ihrer Berechnung, das den erhaltenen Zeitstempel enthält.


- Nun kann der Client anhand des Zeitstempels eines Ergebnis-Objektes überprüfen, ob es sich um das Ergebnis-Objekt seiner Berechnungs-Anfrage handelt.


- Dieser Mechanismus ist sehr optimistisch, da es passieren kann, dass zwei Clients den gleichen Zeitstempel verwenden.

Warum ist es in Webanwendungen nicht möglich, dass die Message Driven Bean Nachrichten an eine Warteschlange sendet, die auf der Clientseite durch einen Nachrichtenempfänger abgefangen wird?

- Der Client einer Message-Driven Bean ist eine Web-Komponente


- diese kann lediglich auf Requests des Web-Clients reagieren.


- Hat sie einmal ihre Response an den Web-Client zurückgeschickt, kann sie mit
nachträglich asynchron eintreffenden Informationen der Message-Driven Bean nichts anfangen


- sie kann nicht ihrerseits asynchron den Web-Client nachträglich kontaktieren.


- Vielmehr erfolgt die Kommunikation zwischen Web-Client und Web-Server ausschließlich synchron und Client-gesteuert.


- Die einzige Möglichkeit des Web-Clients, nachträglich Informationen zu einem früher asynchron gestarteten Vorgang zu bekommen, ist das so genannte Polling, d.h. regelmäßiges aktives Nachfragen, ob inzwischen Ergebnisse (z.B. im Log, einer Datenbank oder einem wie oben beschriebenen Rückmeldungsverzeichnis) vorliegen.