DataGraph-Schema
Vom EJB Mediator erstelltes DataGraph-Schema
Das vom Mediator erstellte Schema für eine Abfrage enthält für jede Abfrageanweisung eine Eclass. Der Name der Eclass ist der Abstract Schema Name (ASN) der Enterprise JavaBeans (EJB). Die Eattributes der Eclass entsprechen den CMP-Feldern oder Ausdrücken, die von der Abfrageanweisung zurückgegeben werden.
Für statische DataObjects kann der Eclass-Name abweichen, sofern das Argument Map im Aufruf createMediator verwendet wird.
Für jede EJB-Beziehung, die in der FROM- oder XREL-Klausel angegeben ist, wird dem Schema eine Ereference hinzugefügt. EJB-Beziehungen können unidirektional oder bidirektional sein. Alle Ereferences werden jedoch als bidirektional definiert, da dies bei einer Aktualisierung für eine effiziente Navigation im DataGraph erforderlich ist. Bei einer unidirektionalen EJB-Beziehung wird ein Name für die Umkehrbeziehung generiert. Ein generierter Name hat das Format <ASName-Quelle><ASName-Ziel>. Wenn die ASNames beispielsweise EmpBean und DeptBean lauteten, und eine unidirektionale Beziehung dept ausgehend von EmpBean zu DeptBean besteht, ist der generierte Umkehrname DeptBeanEmpBean.
- Die Eclass-Namen von DataObjects sind die entsprechenden EJB-ASNs (abstrakte Schemanamen).
- Die Attributnamen und -typen von DataObjects sind die Erweiterungsnamen und -typen in den SELECT-Klauseln der Abfrage.
- Die Referenznamen und -typen von DataObjects stammen aus den in den FROM-Klauseln referenzierten EJB-Beziehungen.
Außerdem wird ein Pseudo-DataObject mit dem Eclass-Namen DataGraphRoot erstellt, das eine Containment-Referenz auf alle DataObjects enthält. Die Referenz besteht aus mehreren Werten und verwendet den EJB-ASN.
DataObject root = m.getGraph( parms );
root.getType().getName(); // gibt die Zeichenfolge "DataGraphRoot" zurück
List depts = (List) root.get("DeptBean");
// Liste aller DeptBean-SDOs im DataGraph
List emps = (List) root.get("EmpBean");
// Liste aller EmpBean-SDOs im DataGraph
DataGraph-Containment-Muster
Referenzen von SDOs (Service Data Objects) können als Containment-Referenzen definiert werden. Wenn dann ein SDO gelöscht wird, erstreckt sich diese Operation auf alle enthaltenen SDOs. Beim Serialisieren des DataGraph als XML-Dokument werden die enthaltenen SDO innerhalb des übergeordneten SDO verschachtelt. Nicht eingeschlossene Referenzen werden im XML-Dokument als Pfadausdrücke angegeben.
Das Containment muss im DataGraph-Schema definiert werden. Wenn der Mediator das Schema definiert, enthält das Ausgangs-SDO (DataGraphRoot) alle anderen SDOs. EJB-Beziehungen werden als nicht eingeschlossene SDO-Referenzen definiert.
- ROOT_CONTAINS_ALL
- In diesem Muster gibt ein Pseudo-SDO, das das Stammelement darstellt. Es ist insofern ein Pseudo-SDO, als es keiner EJB entspricht. Es dient als Container für alle anderen SDOs. Wenn der Mediator das Schema für den Graphen erstellt, hat das Pseudostammelement den Klassennamen DataGraphRoot und enthält Referenzen, deren Namen den EJB-ASNs entsprechen. Wenn der Aufrufende ein statisches Schema verwendet, kann das Stammelement einen beliebigen Namen hzaben. Die Eclass des Stammelements wird an den createMediator-Aufruf übergeben.
- ROOT_CONTAINS_SOME
- Dieses Muster ist nur für statische Schemata gültig. Auch hier gibt ein Pseudo-SDO, das das Stammelement des Graphen darstellt. Andere SDOs muss entweder in der Ereference, die der in der Abfrageanweisung verwendeten EJB-Beziehung entspricht, oder im Pseudoelelement enthalten sein.
- NO_DUMMY ROOT
- Dieses Muster ist nur für statische Schemata gültig. Es gibt kein Pseudostammelement. Das Stamm-SDO entspricht der ersten Abfrageanweisung, die nur eine Instanz zurückgeben muss. Andere SDOs müssen in der Ereference enthalten sein, die der in der Abfrageanweisung verwendeten EJB-Beziehung entspricht.