Java Reference
In-Depth Information
Wie in Listing 13.2 zu sehen ist, ist die Klasse mit @Stateful annotiert. Ich habe die Erfah-
rung gemacht, dass ohne Angabe von mappedName sich unterschiedliche Server-Imple-
mentierungen unterschiedlich verhalten. Bei JBoss 6 wird in einem solchen Fall auto-
matisch der Name „StatefulCounterImpl/remote“ erzeugt, unter dem das Bean über den
Namensdienst erreichbar ist. Bei Glassfi sh funktioniert es aber mit diesem Namen nicht.
Um vom Server unabhängig zu sein, ist es deshalb ratsam, den Namen, unter dem die Bean-
Klasse im Namensdienst eingetragen wird, explizit anzugeben. Die Methode bye hat keine
Funktion. Sie ist jedoch mit der Annotation @Remove versehen. Werden derart annotierte
Methoden aufgerufen, dann zeigt der Client damit an, dass er die Session beenden möchte.
Man kann in diesem Beispiel gerne mal ausprobieren, was passiert, wenn der Client nach
dem Aufruf von bye nochmals reset oder increment aufru . Dies führt dann zu einer Aus-
nahme. Die Klasse enthält dann noch zwei weitere Methoden, die nicht Teil der implemen-
tierten Schnittstelle sind. Sie sind mit @PostConstruct und @PreDestroy markiert. Wie die
Namen der Annotationen andeuten, werden solche Methoden vom EJB-Container aufgeru-
fen, nachdem er ein Objekt dieser Klasse erzeugt hat bzw. bevor er ein Objekt löscht. Man
kann so auf der Console des Servers verfolgen, wann Objekte erzeugt und wann welche
ge löscht werden.
Die beiden anderen Klassen unterscheiden sich (neben ihrem Klassennamen) nur in der
Annotation vor der Klasse (Annotationen @Stateless und @Singleton mit einem jeweils
anderen Wert für mappedName). Der Rest des Programmcodes ist exakt identisch. Das State-
less Bean muss übrigens auch nicht synchronisiert werden, weil wie beim Stateful Bean
niemals zwei Aufrufe parallel auf dasselbe Objekt ausgeführt werden (vgl. Abschnitt 13.4.2).
Dasselbe gilt für das Singleton Bean, aber mit einer anderen Begründung. Auf ein Objekt
einer Singleton-Klasse, wovon es ja nur ein einziges gibt, könnte im Prinzip durchaus parallel
zugegriff en werden. Wenn man aber bei einem Singleton Bean keine Angaben bezüglich der
Synchronisation macht, so gilt Container-Managed Concurrency mit einer Schreibsperre
für alle Methoden, wodurch für alle Methoden ein gegenseitiger Ausschluss realisiert wird
(vgl. Abschnitt 13.4.3).
Die Class-Dateien für die Schnittstelle und die drei Bean-Klassen werden in eine Jar-Datei
gepackt und auf einem Server installiert. Über eine Administrationsschnittstelle des Ser-
vers lässt sich überprüfen, ob die Komponente erfolgreich installiert wurde.
1 3 .6 .2 Client-Seite
Der Client führt zwei Lookups aus und erhält damit zwei unterschiedliche Referenzen in
Form von Stubs. Über beide Referenzen wird jeweils 10 Mal increment durchgeführt. Die
Rückgabewerte werden ausgegeben. Der Client-Code ist in Listing 13.3 zu sehen.
Listing 13.3 Counter-Client
package javacomp.ejb.counter.client;
import javacomp.ejb.counter.server.*;
import javax.naming.*;
public class CounterClient
 
Search WWH ::




Custom Search