Java Reference
In-Depth Information
bei jedem Aufruf von sayHello wiederholt, sondern nur einmal bei der Initialisierung durch-
führt, die Referenz auf das Counter-Objekt in einem Attribut speichert und dann bei jedem
Aufruf von sayHello dasselbe Counter-Objekt verwendet (s. Listing 13.11).
Listing 13.11 Implementierung der Hello-Schnittstelle mit Lookup (Variante 2)
package javacomp.ejb.hello.server;
import javacomp.ejb.counterprovider.server.*;
import javax.naming.*;
import javax.annotation.PostConstruct;
import javax.ejb.*;
@Stateless(mappedName="Hello")
public class HelloImpl implements Hello
{
private Counter counter;
public String sayHello(String name)
{
return "Hallo " + name + " (Aufruf Nr. " +
counter.increment() + ")";
}
@PostConstruct
public void init()
{
try
{
Context context = new InitialContext();
CounterProvider cp =
(CounterProvider)context.lookup("CounterProvider");
counter = cp.getCounter();
}
catch(NamingException e)
{
}
}
}
Oberfl ächliche Tests zeigen scheinbar, dass nun alles in Ordnung ist. Wenn man aber die
Belastung des Servers durch mehrere Clients etwas erhöht, kann man zum Beispiel fol-
gende Ausgabe sehen:
Hallo Welt (Aufruf Nr. 622)
Hallo Welt (Aufruf Nr. 1)
Hallo Welt (Aufruf Nr. 627)
Hallo Welt (Aufruf Nr. 3)
Hier kommt das Zählen off enbar durcheinander. Der Grund liegt darin, dass unser Hello-
Bean ein Stateless Bean ist. Das heißt, dass bei entsprechendem Bedarf mehrere Objekte
vom EJB-Container erzeugt werden. Jedes Bean-Objekt hat dann aber seinen eigenen Zähler.
Man kann an der Ausgabe erkennen, dass nach einer größeren Zahl von Aufrufen ein wei-
teres Bean-Objekt zum Einsatz gelangte und die Zählung wieder bei 1 begann. Dass die
folgenden Nummern weder 623 noch 2 waren, liegt daran, dass parallel ein weiterer Hello-
Client zur Erhöhung der Belastung des EJB-Containers lief, bei dem diese Zahlen vorkamen.
 
Search WWH ::




Custom Search