Beispiel: Container Managed N:M-Relationship zweier Entity Beans (IBM WebSphere)


Inhalt:


Anlegen der Application
Anlegen der Entity Bean "KuchenNM"
Anlegen der Entity Bean "ZutatNM"
Nachbearbeitung der Beans
Erstellen der n:m-Relationship
Anlegen des Webclients
Ein Blick in die Datenbank

Beispiel für zwei Container Managed Entity Bean, auf die per Webclient zugegriffen wird. Zwischen den beiden Beans besteht eine Container Managed Relationship.
Änderung im Vergleich zu den vorherigen Beispielen: Kuchen und Zutat werden im Webclient separat eingegeben, die n:m-Verknüpfung ist eine Zuordnung von Kuchen zu Zutat. Die Information "Menge" entfällt, da wir ansonsten die Relationship um weitere Fehler erweitern müßten und dafür wahrscheinlich eine eigene Zuordnungs-Bean nötig wäre.
Hier gibt es das WebSphere-Projekt zum Download (dies ist ein Project Interchange-Export, die Importanleitung findet man im Stateless-Beispiel): KuchenZutatNMExport.zip
Die verwendete Datenbank heißt hier "KnaufDB"

Aufbau des Beispieles


a) Entity Bean-Klasse für Kuchen mit Local-Interfaces.
b) Entity Bean-Klasse für Zutat mit Local-Interfaces.
c) Webclient


Anlegen der Application

Ein Unternehmensanwendungsprojekt mit dem Namen "KuchenZutatNM" erstellen.
Zu erzeugende Module definieren. Dieses Beispiel benötigt ein EJB-Projekt und ein Webprojekt.
Erzeugen einer Application (Module)


Anlegen der Entity Bean "KuchenNM"

Es wird eine neue Entity Bean angelegt.
KuchenNM Bean (1)
Im nächsten Schritt wird festgelegt, dass wir hier ein Local Interface haben wollen. In der unteren Liste fügen wir die Container Managed Attribute zu: "id" als Primary Key-Feld und "name" als java.lang.String
KuchenNM Bean (2)


Anlegen der Entity Bean "ZutatNM"

Es wird eine neue Entity Bean namens "ZutatNM" angelegt.
An Feldern hat sie hier nur das Primary-Key-Feld "id" sowie "zutatName", der Name der Zutat.
ZutatNM Bean
Damit haben wir das Erstellen der Bean abgeschlossen. Jetzt können wir uns an die Nachbearbeitung der Beans machen.


Nachbearbeitung der Beans

Das Anlegen der Finder und das Erzeugen der ID entspricht den Schritten im Beispiel KuchenZutat (Nachbearbeitung KuchenNM: hier, Nachbearbeitung ZutatNM: hier). Deshalb hier keine weitere Beschreibung. Zu beachten ist dass in den Findern und Select-Methoden die Bean-Namen angepaßt werden.


Erstellen der n:m-Relationship

Im EJB-Deploymentdeskriptor wählt man die KuchenNMBean, geht zu "Relationships" und klickt auf "Add..."
Im etwas verwirrenden Assistenten wählen wir links die KuchenNMBean aus, rechts die ZutatNMBean.
Bei der ZutatNMBean ändern wir den Rollennamen von "zutat" auf "zutaten" (so soll unsere abstrakte Property heißen), bei der KuchenNMBean wird der Rollenname auf "Kuchen" gesetzt.
Wir wählen als "Multiplicity" auf beiden Seiten "0..*". Die Checkboxen "Cascade delete" werden nicht gesetzt da eine Zutat auch ohne Kuchen existieren soll.
N:M-Relationship
Es werden automatisch in der KuchenNM-Bean die Methoden "getZutaten" und "setZutaten" angelegt. In der ZutatNMBean werden "getKuchen" und "setKuchen" angelegt.
Der WebSphere-Bug, der uns bei der 1:n-Relationship geärgert hat schlägt hier zum Glück nicht zu.

Nachbearbeitung:
In der KuchenBean werden die beiden Methoden "addZutat" und "getZutatenListe" (umwandeln der Zutaten-Collection aus "getZutaten" in eine ArrayList, damit Clients sie verwenden können) zugefügt. Beide Methoden müssen auf das Local Interface hochgestuft werden.


Webclient

Der Webclient muss die EJB-JARs referenzieren. Dazu in die Eigenschaften des Dynamic Web Projects "KuchenZutatWeb" wechseln und unter "Java JAR Dependencies" das EJB-JAR wählen.
EJB-Verweise festlegen:
Im Webimplementierungsdeskriptor auf die Registerkarte "References" wechseln und lokale Verweise "ejb/KuchenNM" und "ejb/ZutatNM" auf KuchenNM bzw. ZutatNM zufügen.
Es müssen vier JSP-Seiten "index.jsp", "KuchenEdit.jsp", "ZutatEdit.jsp" und "KuchenZutaten.jsp" zugefügt werden.

Die Anwendung ist unter
http://localhost:9080/KuchenZutatNMWeb/index.jsp zu erreichen.


Ein Blick in die Datenbank

Mittels des Tools CView können wir einen Blick in die Datenbank werfen.
Die Tabelle KUCHENNM sieht so aus:
Tabelle KUCHENNM
Die Tabelle ZUTATNM sieht so aus:
Tabelle ZUTATNM
Die vom Container erzeugte Tabelle für die Abbildung der n:m-Relationship heißt "KUCHEN_ZUTAT" und sieht so aus:
Tabelle KUCHEN_ZUTAT



Version 1.0.0.0, Stand 20.11.2005
Historie:
1.0.0.0 (20.11.2005): Erstellt