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.
Anlegen der Entity Bean "KuchenNM"
Es wird eine neue Entity Bean angelegt.
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
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.
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.
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:
Die Tabelle ZUTATNM sieht so aus:
Die vom Container erzeugte Tabelle für die Abbildung der n:m-Relationship heißt "KUCHEN_ZUTAT" und sieht so aus:
Version 1.0.0.0, Stand 20.11.2005
Historie:
1.0.0.0 (20.11.2005): Erstellt