Beispiel: Bean Managed Persistence


Beispiel für zwei Entity Beans mit Bean Managed Persistence, die in einer (ebenfalls bean managed) 1:n-Beziehung stehen. Auf die Beans wird per Webclient zugegriffen wird.

Aufbau des Beispieles


Mittels einer Entity Bean werden Objekte vom Typ "Kuchen" abgebildet. Ein Kuchen besteht aus der Property "Name" und dem Primary Key "KuchenID".
Mittels einer zweiten Entity Bean werden Objekte vom Typ "KuchenZutatAutoPK" abgebildet. Ein Kuchen besteht aus 0 bis n Zutaten. Eine Zutat besteht aus den Properties "Name" und "Menge" sowie "ZutatID" (Primary Key) und "KuchenID" (Foreign Key auf die Bean KuchenBMP).


Bestandteile:
a) Entity-Bean-Klasse für ein Objekt "Kuchen" mit Local-Interfaces.
a) Entity-Bean-Klasse für ein Objekt "Zutat" mit Local-Interfaces.
c) Web Client.


Vorbereiten der Datenbank

Da wir hier mit Bean Managed Persistence arbeiten, müssen die Datenbanktabellen manuell angelegt werden. D.h. idealerweise öffnet man das Pointbase-Administrations-Tool und erzeugt zwei Tabellen mit folgender Struktur:
CREATE TABLE "PBPUBLIC"."KUCHENBMPBEAN" 
(
  kuchenid INTEGER  NOT NULL, 
  name VARCHAR ( 256),
  CONSTRAINT KuchenBMPBean_PK PRIMARY KEY ( kuchenid) 
);

CREATE TABLE "PBPUBLIC"."ZUTATBMPBEAN" 
(
  ZutatId INTEGER  NOT NULL, 
  ZutatName VARCHAR ( 256), 
  Menge VARCHAR ( 256),
  KuchenID INTEGER  NOT NULL,
  CONSTRAINT ZutatBMPBean_PK PRIMARY KEY ( ZutatId), 
  CONSTRAINT ZutatBMPBean_FK1 FOREIGN KEY ( KuchenID)  REFERENCES "PBPUBLIC"."KUCHENBMPBEAN"( KUCHENID) 
);
Wir sind sogar so mutig und legen einen Foreign Key von der Zutat zum Kuchen an, wobei wir ein Löschen eines Kuchens verbieten wollen, solange Zutaten existieren (d.h. die Methode "ejbRemove" der KuchenBMPBean muss zuerst die Zutaten löschen).

Deploy der Entity Bean "KuchenBMP"

Schritt 1: Einstellungen siehe Screenshot.
Kuchen Bean (Schritt 1)
Zu beachten: auch die Dateien der Zutat-Bean werden dem JAR zugefügt.
Schritt 2: Bean-Klasse sowie die Local-Interfaces auswählen.
Kuchen Bean (Schritt 2)
Schritt 3: Als "PersistenceManager" wird "Bean-Managed" gewählt. Wichtig ist, dass der Typ des Primary Keys angeben wird (Rückgabe der Methode "ejbFindByPrimaryKey", im Beispiel "java.lang.Long").
Kuchen Bean (Schritt 3)

Nachbearbeitung:
Da im Code die Datenbankverbindung unter einem JNDI-Namen referenziert wird, muss diese Verbindung konfiguriert werden. Auf der TabPage "ResourceRefs" einen Eintrag mit dem Namen "jdbc/KuchenZutatBMPDB" vom Typ "javax.sql.DataSource" zufügen. Diese referenziert eine im Container definierte Resource "jdbc/PointBase", also unsere gute alte Pointbase-Datenbank.
Kuchen Bean (Nachbearbeitung: Datenbank)

Die ZutatBean wird ebenfalls im Code referenziert, d.h. es muss eine EJB-Referenz auf sie zugefügt werden:
Kuchen Bean (Nachbearbeitung: EJB-Referenz)


Deploy der Entity Bean "ZutatBMP"

SChritt 1: Dem bestehenden JAR wird eine weitere Bean zugefügt, d.h. es sind keine weiteren Klassen zuzufügen.
Schritt 2: Bean-Klasse sowie die Local-Interfaces auswählen.
Zutat Bean (Schritt 2)
Schritt 3: Es wird wiederum "Bean Managed Persistence" gewählt, der Primary Key ist ebenfalls vom Typ "java.lang.Long".
Zutat Bean (Schritt 3)

Nachbearbeitung:
Hier muss die gleiche Datenbankreferenz zugefügt werden wie in der KuchenBean.
Die ZutatBean benötigt eine Referenz auf die KuchenBean.

Deploy des Web Clients

Schritt 1: Hinzufügen der Dateien: 4 JSP-Seiten und die Local-Interfaces der Beans.
Deploy des Web Clients
Anschließend hinzufügen der vier JSPs.

Nachbearbeitung:
Festlegen der Context-Root: kuchenzutatbmp
Folgende EJB-Referenzen hinzufügen:
"ejb/KuchenBMP" referenziert "com.knauf.ejb.kuchenzutatbmp.LocalKuchenBMPHome" und "com.knauf.ejb.kuchenzutatbmp.LocalKuchenBMP".
"ejb/ZutatBMP" referenziert "com.knauf.ejb.kuchenzutatbmp.LocalZutatBMPHome" und "com.knauf.ejb.kuchenzutatbmp.LocalZutatBMP".


Nachbearbeitung:
Auf dem Karteireiter "File Refs" unter "Welcome Files" die Datei "Kuchen.jsp" eintragen. Dadurch wird sie als Default-Seite für diesen Context angezeigt.