Beispiel: Bean Managed Persistence (IBM WebSphere)


Beispiel für zwei Bean Managed Entity Beans, auf die per Webclient zugegriffen wird. Zwischen den beiden Beans besteht eine Bean Managed Relationship.
Dieses Beispiel entspricht weitgehend dem Beispiel "KuchenZutatBMP" für den SunAppServer. Die Deployanleitung bezieht sich auf IBM WebSphere.
Hier gibt es das WebSphere-Projekt zum Download (dies ist ein Project Interchange-Export, die Importanleitung findet man im Stateless-Beispiel): KuchenZutatBMPExport.zip

Inhalt:
Anlegen der Application
Anlegen der Entity Bean "Kuchen"
Anlegen der Entity Bean "Zutat"
Nachbearbeitung
Definition der Datenbank
Anlegen des Webclients

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 "KuchenZutatBMP" erstellen.
Zu erzeugende Module definieren. Dieses Beispiel benötigt ein EJB-Projekt und ein Webclientprojekt
Erzeugen einer Application (Module)


Anlegen der Entity Bean "Kuchen"

Es wird eine neue Entity Bean angelegt. Dazu im Project Explorer "EJB Projects" -> "KuchenZutatBMPEJB" -> "Deployment Descriptor: KuchenZutatBMPEJB" -> "Entity Beans" wählen und im Contextmenü den Punkt "New" -> "Entity Bean" auswählen.
Bean-Name und Package-Name müssen angegeben werden. Als Beantyp wählen wir "Entity bean with bean-managed persistence (BMP) fields".
Kuchen Bean (1)
Im nächsten Schritt wird festgelegt, dass wir hier ein Local Interface haben wollen. Die Primary Key-Klasse ändern wir auf java.lang.Long (wird vom WebSphere rot hinterlegt, als Zeichen dass die Klasse nicht generiert wird).
Kuchen Bean (2)
Damit haben wir das Erstellen der Bean abgeschlossen.


Anlegen der Entity Bean "Zutat"

Es wird eine neue Entity Bean namens "Zutat" angelegt.
Bean-Name und Package-Name müssen angegeben werden. Als Beantyp wieder "Entity bean with bean-managed persistence (BMP) fields" wählen.
Zutat Bean (1)
Im nächsten Schritt wird festgelegt, dass wir hier ein Local Interface haben wollen.
Die Key-Klasse legen wir wieder auf java.lang.Long fest.
Zutat Bean (2)
Damit haben wir das Erstellen der Bean abgeschlossen. Jetzt können wir uns an die Nachbearbeitung der Beans machen.

Nachbearbeitung

Den Code für die beiden Bean-Klassen einfügen und folgende Methoden auf die Local-Interfaces hochstufen:
KuchenBean:
-ejbHomeGetNextId
-ejbFindAll
-ejbCreateByName
-getZutatenListe
-addZutat
-setName / getName
-getId
Im HomeInterface die parameterlose create-Methode entfernen.

ZutatBean:
-ejbHomeGetNextId
-ejbCreateByNameMengeKuchenId
-ejbFindByKuchenId
-getKuchen
-setKuchenId / getKuchenId
-setMenge / getMenge
-setZutatName / getZutatName
-getId
Im HomeInterface die parameterlose create-Methode entfernen.


Definition der Datenbank

Als Datenbank verwende ich in diesem Beispiel die "KnaufDB". Allerdings können wir sie diesmal nicht manuell erzeugen sondern müssen sie und die Tabellen per Hand anlegen. Dazu CView öffnen und über "File" -> "New" -> "Database..." eine neue Datenbank erstellen lassen. Als Namen geben wir "KnaufDB" ein, die Datenbank wird automatisch im Verzeichnis "C:\Programme\IBM\Rational\SDP\6.0\runtimes\base_v6\cloudscape" angelegt.
Neue Datenbank erstellen
Anschließend die Tabellen erstellen:
CREATE TABLE KUCHENBMPBEAN
(
  kuchenid INTEGER  NOT NULL, 
  name VARCHAR ( 256),
  CONSTRAINT KuchenBMPBean_PK PRIMARY KEY ( kuchenid) 
);

CREATE TABLE 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 KUCHENBMPBEAN( KUCHENID) 
); 


Jetzt deklarieren wir eine JDBC-Datenquelle im WebSphere. Dazu den Deployment Deskriptor der Enterprise Application öffnen ("Enterprise Applications" -> "KuchenZutatBMP" -> "Deployment Deskriptor: KuchenZutatBMP"). Auf der Karteikarte "Deployment" in der Gruppe "Data Sources" in der "JDBC Provider List" den "Cloudscape JDBC Provider (XA)" auswählen.
Deployment Deskriptor: DataSource (1)
Eine neue DataSource zufügen.
Als "JDBC Provider" wird "Cloudscape JDBC Provider (XA)" gewählt.
Deployment Deskriptor: DataSource (2)
Wir geben ihr einen sinnvollen Namen und einen JNDI-Namen (der nichts mit dem eigentlichen Datenbanknamen zu tun haben muss).
Deployment Deskriptor: DataSource (3)
Im letzten Schritt verknüpfen wir die Datenbankdefinition mit der tatsächlichen Datenbank, indem wir für die Property "databaseName" den Wert "KnaufDB" eintragen. Die anderen Properties können wir ignorieren.
Deployment Deskriptor: DataSource (4)


Jetzt gehen wir in den Deployment Deskriptor des EJB-Projekts.
Wie bisher legen wir EJB-Referenzen für KuchenBMPBean (auf ZutatBMPBean) und ZutatBMPBean (auf KuchenBMPBean) an.
An gleicher Stelle können wir auch Resourcen-Referenzen zufügen.
Resourcen-Referenz (1)
Hier tragen wir den Namen ein unter dem die Beans die Resource im JNDI suchen (jdbc/KuchenZutatBMPDB), und als Resourcen-Typ javax.sql.DataSource. Die Authentifizierung übernimmt der Container (wir haben keine Login-Informationen der Datenbank geändert).
Resourcen-Referenz (2)
Nach dem Klick auf "Finish" müssen wir die Verknüpfung zur "echten" Datenquelle anlegen. Dazu in den WebSphere Bindings unter "JNDI name" den Namen unserer Datenquelle (jdbc/KnaufDB) eintragen.
Resourcen-Referenz (3)
Das gleiche wiederholen wir für die ZutatBMPBean.

Anlegen des Webclients

Hier gibt es keine Unterschiede zum vorherigen Beispiel mit Container Managed Relationship: Referenz auf das EJB-Projekt zufügen, Local References ejb/KuchenBMP auf KuchenBMP und ejb/ZutatBMP auf ZutatBMP anlegen und die vier JSP-Seiten aus dem letzten Beispiel einfügen. Nur die Namen der Beans müssen leicht geändert werden.
Fertig.



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