Enterprise-Beans entwickeln

In der Regel wird eines von zwei möglichen Szenario für die Entwicklung von Enterprise-Beans mit dem Produkt verwendet. Das erste Szenario ist die Befehlszeile mit Verwendung von Ant, Make, Maven oder ähnlichen Tools. Das zweite Szenario ist eine IDE-basierte Entwicklungs -und Erstellungsumgebung. Die Schritte in diesem Artikel beschreiben die Entwicklung ohne IDE.

Vorbereitende Schritte

Nur für Beans der Enterprise JavaBeans (EJB) Version 2.x: Entwerfen Sie eine J2EE-Anwendung und die dafür erforderlichen Enterprise-Beans.
  • Vor dem Entwickeln von Entity-Beans mit CMP (Container-managed Persistence) sollten Sie den Artikel "Parallelitätssteuerung" lesen.
Nur für Beans der EJB Version 3.x: Entwerfen Sie eine Java EE-Anwendung und die dafür erforderlichen Enterprise-Beans.
  • Vor dem Entwickeln von Entity-Beans mit über Container realisierter Transaktionspersistenz sollten Sie den Artikel "Parallelitätssteuerung" lesen. Beachten Sie, dass Module der EJB Version 3.x keine Entity-Beans unterstützen. Entity-Beans müssen weiterhin in Module der Version EJB 2.x eingefügt werden.

Informationen zu diesem Vorgang

Im Folgenden sind beiden Basismethoden für die Auswahl von Tools für die Entwicklung von Enterprise-Beans beschrieben:
  • Sie können eines der verfügbaren IDE-Tools verwenden, die automatisch große Teile des Enterprise-Bean-Codes generieren und integrierte Tools für das Packen und den Test der Enterprise-Beans enthalten. Die empfohlene IDE ist das Produkt Rational Application Developer.

    Fügen Sie dem Build-Pfad des IDE-Projekts die Datei "Installationsstammverzeichnis/dev/JavaEE/j2ee.jar" hinzu, um Kompilierungsabhängigkeiten von den neuen API-Klassen der EJB Version 3.x aufzulösen. Die Codeunterstützung funktioniert, wenn diese JAR-Datei dem Build-Pfad des Projekts hinzugefügt wird. Wenn Sie einen Server (siehe J2EE-Perspektive) definieren, geben Sie für den Server das Installationsverzeichnis des Produkts an. Wenn Sie ein Projekt mit Bezug zu Java™ EE in Rational Application Developer erstellen, fügt das Projekt automatisch die Datei Installationsstammverzeichnis/dev/JavaEE/j2ee.jar zum Buildpfad des Projekts hinzu.

  • Wenn Sie sich entschlossen haben, Enterprise-Beans ohne IDE zu entwickeln, benötigen Sie mindestens einen ASCII-Texteditor. Sie können auch ein Java-Entwicklungstool verwenden, das keine Enterprise-Bean-Entwicklung unterstützt. Sie können dann die im Java Software Development Kit (SDK) und in diesem Produkt verfügbaren Tools verwenden, um die Beans zu assemblieren, zu testen und einzusetzen.

    Wie das Assembliertool erfordert auch eine standardmäßig verwendete Java EE-Erstellungsumgebung unter Verwendung der Befehlszeile einige Änderungen, um Module der EJB Version 3.x zu nutzen. Wie in früheren Java EE-Anwendungsentwicklungsmustern muss die Datei j2ee.jar im Verzeichnis "Installationsstammverzeichnis/dev/JavaEE" in den Klassenpfad des Compilers aufgenommen werden. Ein Beispiel für eine Erstellungsumgebung unter Verwendung der Befehlszeile, die Ant verwendet, ist im Verzeichnis Installationsstammverzeichnis/samples/src/TechSamp enthalten.

Die folgenden Schritte gelten vorrangig für die erste Vorgehensweise, die Entwicklung ohne IDE.

Vorgehensweise

  1. Migrieren Sie bereits vorhandenen Code auf die erforderliche Version der EJB-Spezifikation, sofern dies erforderlich ist.

    Anwendungen, die gemäß der EJB-Spezifikation der Versionen 1.1, 2.0 und 2.1 geschrieben wurden, können im Container der EJB Version 3.x unverändert ausgeführt werden. Weitere Informationen finden Sie im Artikel "Enterprise-Bean-Code auf die unterstützte Spezifikation migrieren".

  2. Schreiben und kompilieren Sie die Komponenten der Enterprise-Bean.
    • Eine mit einer Spezifikation EJB 3.x entwickelte Session-Bean erfordert mindestens eine Bean-Klasse.
    • Eine EJB-1.1-Session-Bean erfordert mindestens eine Bean-Klasse, eine Home-Schnittstelle und eine ferne Schnittstelle. Eine EJB-1.1-Entity-Bean erfordert eine Bean-Klasse, eine Primärschlüsselklasse, eine Home-Schnittstelle und eine ferne Schnittstelle.
    • Eine EJB-2.x-Session-Bean erfordert mindestens eine Bean-Klasse, eine Home-Schnittstelle oder eine lokale Home-Schnittstelle sowie eine ferne oder eine lokale Schnittstelle. Eine EJB-2.x-Entity-Bean erfordert eine Bean-Klasse, eine Primärschlüsselklasse, eine ferne Home-Schnittstelle oder eine lokale Home-Schnittstelle und eine ferne oder lokale Schnittstelle. Die Schnittstellentypen bedingen sich wechselseitig: Wenn Sie eine lokale Schnittstelle implementieren, müssen Sie auch eine lokale Home-Schnittstelle definieren.
      Achtung: Die Primärschlüsselklasse kann unbekannt sein. Weitere Informationen finden Sie im Artikel "Unbekannte Primärschlüsselklasse".
    • Eine MDB erfordert nur eine Bean-Klasse.
  3. Führen Sie die erforderlichen Schritte aus, um jeder Entity-Bean die Ausführung von Persistenzoperationen zu ermöglichen.

    Für Module der EJB Version 3.x sollten Sie die Spezifikation Java Persistence API (JPA) verwenden, um persistente POJO-Entitäten (Plain Old Java Object) zu entwickeln. Nähere Informationen finden Sie im Artikel "Java Persistence API". Wenn Sie Entity-Beans auf der Basis früherer EJB-Spezifikationen entwickeln, gehen Sie wie folgt vor:

    • Erstellen Sie ein Datenbankschema für die persistenten Daten der Entity-Bean.
      • Für Entity-Beans mit CMP (Container-managed Persistence, über Container realisierte Transaktionspersistenz) müssen die persistenten Daten der Bean in einer der unterstützten Datenbanken gespeichert werden. Das Assembliertool generiert automatisch SQL-Code für das Erstellen der Datenbanktabellen für CMP-Entity-Beans. Wenn die CMP-Beans komplexe Datenbankzuordnungen erfordern, sollten Sie den Code für die Datenbanktabellen mit Rational Application Developer generieren. Weitere Informationen zur Verwendung der Assembliertools finden Sie im Information Center des jeweiligen Assembliertools.
      • Für Entity-Beans mit Bean-gesteuerter Persistenz kann die Datenbank und Datenbanktabelle unter Verwendung der Datenbanktools oder einer bestehenden Datenbank und Datenbanktabelle erstellt werden.

      Weitere Informationen zum Erstellen von Datenbanken und Datenbanktabellen finden Sie in der Datenbankdokumentation.

    • (Nur CMP-Entity-Beans für EJB 2.x)

      Definieren Sie Finder-Abfragen mit EJB Query Language (EJB QL).

      Mit EJB QL können Sie wie folgt Finder für CMP-Felder und containergesteuerte Beziehungen definieren:
      • Allgemein zugängliche Finder-Methoden sind in der Home-Schnittstelle der Bean sichtbar. Sie sind in die Bean-Klasse implementiert und geben nur ferne Schnittstellen und Collection-Typen zurück.
      • ePrivate Finder werden als SELECT-Anweisungen ausgedrückt und nur innerhalb der Bean-Klasse verwendet. Sie können lokale und ferne Schnittstellen, abhängige Werte, andere Arten von CMP-Feldern und Collection-Typen zurückgeben.
    • (Nur CMP-Entity-Beans der EJB Version 1.1 - eine IBM Erweiterung) Erstellen Sie für jede CMP-Entity-Bean mit speziellen Finder-Methoden (d. h. anderen Methoden als findByPrimaryKey) eine Finder-Helper-Schnittstelle.
      Für jede in der Home-Schnittstelle einer Entity-Bean mit CMP enthaltene Finder-Methode ist eine andere Logik als die Methode "findByPrimaryKey" erforderlich.
      • Die Logik muss in einer öffentlichen Schnittstelle mit dem Namen NameBeanFinderHelper definiert sein. Name steht hier für den Namen der Enterprise-Bean, z. B. AccountBeanFinderHelper.
      • Die Logik muss in einer Zeichenfolgekonstanten findMethodNameWhereClause enthalten sein. findMethodName steht hier für den Namen der Finder-Methode. Die Zeichenfolgekonstante kann null oder mehrere Fragezeichen (?) enthalten, die beim Aufruf der Finder-Methode von links nach rechts durch den Wert der Argumente der Methode ersetzt werden.

Beispiel: Schreibgeschützte Entity-Bean verwenden

Im Folgenden werden ein Einsatzszenario und ein Beispiel für das Schreiben einer EJB-Anwendung gezeigt, die eine schreibgeschützte Entity-Bean verwendet.

Einsatzszenario

Ein Kunde hat eine Datenbank mit Katalogpreisen und Versandtarifen, die täglich spätestens um 22:00 Ortszeit aktualisiert wird. Der Kunde möchte eine EJB-Anwendung schreiben, die auf diese Daten im Lesezugriff zugreift, d. h. die Anwendung soll die Datenbank nicht aktualisieren. Die Aktualisierung soll von einer anderen Anwendung durchgeführt werden.

Beispiel

Die lokale Schnittstelle der Entity-Bean des Kunden ist wie folgt definiert:

	public interface ItemCatalogData extends EJBLocalObject {
	 
	  	  public int getItemPrice();
	 
	  	  public int getShippingCost(int destinationCode);
	 
}

Der Code in der Methode der Stateless-Session-Bean (beispielsweise TxRequired), die diese Entity-Bean aufruft, um die Gesamtkosten inklusive Versand zu ermitteln, könnte wie folgt aussehen:

.....
	 	// Bis zu diesem Punkt finden einige transaktionsorientierte Schritte statt, z. B. Entfernen eines Artikels
  // aus dem Inventar usw.
  // Jetzt den Preis des Artikels abrufen und mit der Berechnung der Gesamtkosten für den Käufer beginnen
 
  ItemCatalogData theItemData = 
	    	    (ItemCatalogData) ItemCatalogDataHome.findByPrimaryKey(theCatalogNumber);
 
		int totalcost = theItemData.getItemPrice();
	 
		// ...     Dazwischen andere Verarbeitungsschritte durchführen
	// ...
	// ...
	 
		// Versandkosten hinzufügen
		totalcost = totalcost + theItemData.getShippingCost(theDestinationPostalCode);
Bei der Assemblierung der Anwendung setzt der Kunde die Parameter für das EJB-Caching für die Bean wie folgt fest:
  • ActivateAt = ONCE
  • LoadAt = DAILY
  • ReloadInterval = 2200
    Veraltetes Feature Veraltetes Feature: Die Attribute "reloadInterval" und "reloadingEnabled" der Erweiterungen für IBM Implementierungsdeskriptoren sind veraltet. Dies gilt sowohl für die Erweiterung für WAR-Dateien (WEB-INF/ibm-web-ext.xmi) als auch für die Anwendungserweiterung (META-INF/ibm-application-ext.xmi).depfeat

Beim ersten Aufruf der Methode "getItemPrice()" nach 22:00 Uhr lädt der EJB-Container die Preisinformationen erneut aus der Datenbank. Sollte dieser Zeitpunkt zwischen den Aufruf von "getItemPrice()" und "getShippingCost()" fallen, gibt die Methode "getShippingCost()" den Wert zurück, den sie vor der Aktualisierung der Datenbank ermittelt hatte, da der erste Methodenaufruf in dieser Transaktion vor 22:00 Uhr erfolgt ist. Damit bleiben die verwendeten Artikelpreise und Versandkosten synchron.

Nächste Schritte

Assemblieren Sie die Beans zu EJB-Modulen. Lesen Sie den Artikel "EJB-Module assemblieren" oder "EJB-Module der Version 3.x assemblieren", wenn Sie Beans der EJB Version 3.x verwenden.


Symbol, das den Typ des Artikels anzeigt. Taskartikel



Symbol für Zeitmarke Letzte Aktualisierung: 25.05.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tejb_dvdp
Dateiname:tejb_dvdp.html