Java Reference
In-Depth Information
Wenn man also nicht die Aufrufe der Methode sayHello zählen wollte, sondern die Aufrufe
pro Bean-Objekt, dann wäre die gezeigte Lösung aus Listing 13.11 in Ordnung. Natürlich
könnte man diesen Eff ekt durch ein einfaches Attribut des Typs int wesentlich einfacher
erreichen, aber es geht hier um die Nutzung eines Beans durch ein anderes.
Selbstverständlich sollte man bei einem ernstha en Programm auch die Möglichkeit
berücksichtigen, dass die andere Komponente, die man über lookup kontaktiert, nicht vor-
handen ist. Ein wesentliches Merkmal von Komponentensystemen ist ja gerade, dass die
Komponenten weitgehend unabhängig voneinander installiert und deinstalliert werden
können. Deshalb sollte man bei der Programmierung immer von der Möglichkeit ausgehen,
dass eine andere Komponente nicht verfügbar ist, und geeignet darauf reagieren. Die Null-
PointerException, die in Listing 13.11 aus einem solchen Fall resultieren würde, sollte abge-
fangen werden. Um Codezeilen zu sparen, wurde das im Beispielcode weggelassen.
Aber abgesehen von diesen Unzulänglichkeiten kann diese Komponente durchaus als ein
Beispiel dafür dienen, wie eine EJB-Komponente eine andere benutzt:
! Der Kontakt kann wie bei einem Client über einen Context und den Aufruf der Methode
lookup hergestellt werden.
! Genutzte Klassen der anderen Komponente müssen auch in die Jar-Datei der nutzenden
Komponente aufgenommen werden.
Damit ist eine lose Kopplung von EJB-Komponenten möglich, wobei die einzelnen Kompo-
nenten unabhängig voneinander installiert und deinstalliert werden können.
1 3 .9 .2 Gemeinsame Ear-Datei mit Dependency Injection
Der EJB-Container bietet für die So ware-Entwicklung einen gewissen Komfort in Form
einer Dependency Injection an. Wenn man wie im letzten Beispiel in einer EJB-Komponente
eine andere Komponente nutzen möchte, muss man die Kontaktaufnahme nicht selbst aus-
programmieren, sondern es genügt, wenn man ein Attribut mit der Annotation @EJB in
seine Klasse aufnimmt. Der Typ des Attributs muss die von der anderen Bean implemen-
tierte Schnittstelle sein. Das Programm aus Listing 13.11 vereinfacht sich dadurch zu dem
aus Listing 13.12.
Listing 13.12 Implementierung der Hello-Schnittstelle mit Dependency Injection
package javacomp.ejb.hello.server;
import javacomp.ejb.counterprovider.server.*;
import javax.annotation.PostConstruct;
import javax.ejb.*;
@Stateless(mappedName="Hello")
public class HelloImpl implements Hello
{
@EJB
private CounterProvider cp;
private Counter counter;
public String sayHello(String name)
 
Search WWH ::




Custom Search