Sie können die API EntityManager mit einem lokalen ObjectGrid oder in einer verteilten eXtreme-Scale-Umgebung verwenden. Der Hauptunterschied besteht darin, wie Sie die Verbindung zu dieser fernen Umgebung herstellen. Nach dem Aufbau einer Verbindung besteht kein Unterschied mehr zwischen der Verwendung eines Session-Objekts und der Verwendung der API "EntityManager".
Diese Dateien geben die Entitäten und BackingMaps an, die ein Server hostet.
Die Deskriptordatei für Entitätsmetadaten enthält eine Beschreibung der verwendeten Entitäten. Sie müssen mindestens die Entitätsklasse und den Entitätsnamen angeben. Wenn Sie in einer Umgebung mit Java Platform, Standard Edition 5 arbeiten, liest eXtreme Scale automatisch die Entitätsklasse und die zugehörigen Annotationen. Sie können weitere XML-Attribute definieren, wenn die Entitätsklasse keine Annotationen hat oder wenn Sie die Klassenattribute überschreiben müssen. Wenn Sie diese Entitäten klassenlos registrieren, geben Sie alle Entitätsinformationen ausschließlich in der XML-Datei an.
Sie können das folgende XML-Konfigurations-Snippet verwenden, um ein Datengrid mit Entitäten zu definieren. In diesem Snippet erstellt der Server ein ObjectGrid mit dem Namen bookstore und eine zugehörige BackingMap mit dem Namen order. Das Snippet aus der Datei objectgrid.xml verweist auf die Datei entity.xml. In diesem Fall enthält die Datei entity.xml eine Entität, die Entität "Order".
objectgrid.xml
<objectGridConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://ibm.com/ws/objectgrid/config ../objectGrid.xsd"
xmlns="http://ibm.com/ws/objectgrid/config">
<objectGrids>
<objectGrid name="bookstore" entityMetadataXMLFile="entity.xml">
<backingMap name="Order"/>
</objectGrid>
</objectGrids>
</objectGridConfig>
entity.xml
<entity-mappings xmlns="http://ibm.com/ws/projector/config/emd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://ibm.com/ws/projector/config/emd ./emd.xsd">
<entity class-name="com.ibm.websphere.tutorials.objectgrid.em.
distributed.step1.Order" name="Order"/>
</entity-mappings>
In diesem Beispiel wird davon ausgegangen, dass die Felder
orderNumber und desc in der Klasse "Order" ähnlich annotiert sind.Im Folgenden sehen Sie die entsprechende Datei entity.xml ohne Klassen:
classless entity.xml
<entity-mappings xmlns="http://ibm.com/ws/projector/config/emd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://ibm.com/ws/projector/config/emd ./emd.xsd">
<entity class-name="@Order " name="Order">
<description>"Entity named: Order"</description>
<attributes>
<id name="orderNumber" type="int"/>
<basic name="desc" type="java.lang.String"/>
</attributes>
</entity>
</entity-mappings>
String catalogEndpoints="localhost:2809";
URL clientOverrideURL= new URL("file:etc/emtutorial/distributed/step1/objectgrid.xml");
ClientClusterContext clusterCtx = ogMgr.connect(catalogEndpoints, null, clientOverrideURL);
ObjectGrid objectGrid=ogMgr.getObjectGrid(clusterCtx, "bookstore");
String catalogEndpoints="myHost:2809";
URL clientOverrideURL= new URL("file:etc/emtutorial/distributed/step1/objectgrid.xml");
ClientClusterContext clusterCtx = ogMgr.connect(catalogEndpoints, null, clientOverrideURL);
ObjectGrid objectGrid=ogMgr.getObjectGrid(clusterCtx, "bookstore");
String catalogEndpoints="myHost:2809";
ClientClusterContext clusterCtx = ogMgr.connect(catalogEndpoints, null, null);
ObjectGrid objectGrid=ogMgr.getObjectGrid(clusterCtx, "bookstore");
Die XML-Dateien waren erforderlich, unabhängig davon, ob Sie Teilentitäten auf der Clientseite verwenden möchten oder nicht. Diese Dateien sind nicht mehr erforderlich, um die vom Server definierten Entitäten zu verwenden. Übergeben Sie stattdessen null für den Parameter "overRideObjectGridXml" wie in Option 2 des vorherigen Schritts. Wenn die XML-Datei nicht in dem Pfad gefunden wird, der auf dem Server definiert wurde, verwendet der Client die Entitätskonfiguration auf dem Server.
Wenn Sie jedoch Teilentitäten auf dem Client verwenden, müssen Sie eine überschreibende ObjectGrid-XML wie in Option 1 bereitstellen.
@Entity
class ServerPerson
{
@Id String ssn;
String firstName;
String surname;
int age;
int salary;
}
@Entity(name="ServerPerson")
class ClientPerson
{
@Id @Basic(alias="ssn") String socialSecurityNumber;
String surname;
}
Die clientseitige XML-Entitätsdeskriptordatei ist erforderlich, wenn der Server mit klassenbasierten Entitäten ausgeführt wird, während auf der Clientseite klassenlose Entitäten ausgeführt werden, oder wenn der Server klassenlos ist und der Client klassenbasierte Entitäten verwendet. Im klassenlosen Clientmodus kann der client trotzdem Entitätsabfragen ausführen, ohne Zugriff auf die physischen Klassen zu haben. Davon ausgehend, dass der Server die vorherige Entität "ServerPerson" registriert habt, überschreibt der Client das Datengrid wie folgt mit einer Datei entity.xml:
<entity-mappings xmlns="http://ibm.com/ws/projector/config/emd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://ibm.com/ws/projector/config/emd ./emd.xsd">
<entity class-name="@ServerPerson" name="Order">
<description>"Entity named: Order"</description>
<attributes>
<id name="socialSecurityNumber" type="java.lang.String"/>
<basic name="surname" type="java.lang.String"/>
</attributes>
</entity>
</entity-mappings>
Mit dieser Datei wird eine entsprechende Teilentität auf dem Client erreicht, ohne dass der Client die eigentliche annotierte Klasse bereitstellen muss. Wenn der Server klassenlos ist und der Client nicht, stellt der Client eine überschreibende XML-Entitätsdeskriptordatei bereit. Diese XML-Entitätsdeskriptordatei enthält einen Korrekturwert für die Klassendateireferenz.
Ein lokales Datengrid benötigt keine XML-Dateien. Das Programm kann eine ObjectGrid-Referenz anfordern und die Methode ObjectGrid.registerEntities aufrufen, um eine Liste mit annotierten Klassen der Java SE Version 5 oder eine XML-Datei anzugeben.
Die Laufzeitumgebung verwendet die XML-Datei oder eine Liste mit annotierten Klassen, um Entitätsnamen, Attributnamen und -typen, Schlüsselfelder und -typen sowie Beziehungen zwischen Entitäten zu suchen. Wenn eXtreme Scale in einem Server oder im eigenständigen Modus ausgeführt wird, wird automatisch eine Map erstellt, die nach der jeweiligen Entität benannt wird. Diese Maps können über die Datei objectgrid.xml oder APIs, die von der Anwendung oder von Injektions-Frameworks wie Spring definiert werden, weiter angepasst werden.