Wenn eine Anwendung eine Referenz auf eine ObjectGrid-Instanz oder eine Clientverbindung zu einem fernen Datengrid hat, können Sie auf die Daten in Ihrem Datengrid zugreifen und mit diesen interagieren. Mit der API ObjectGridManager können Sie eine lokale Instanz erstellen oder eine Clientverbindung zu einer verteilten Instanz herstellen. Zum Erstellen einer lokalen Instanz verwenden Sie eine der createObjectGrid-Methoden. Zum Herstellen einer Clientverbindung zu einem fernen Datengrid verwenden Sie die Methode getObjectGrid.
Ein Thread in einer Anwendung benötigt eine eigene Sitzung. Wenn Ihre Anwendung das ObjectGrid in einem Thread verwenden soll, rufen Sie eine der getSession-Methoden auf, um eine Sitzung anzufordern. Wenn die Anwendung die Sitzung nicht mehr benötigt, rufen Sie die Methode Session.close() auf. Diese Methode schließt die Sitzung, gibt sie an den Pool zurück und gibt die Ressourcen dieser Sitzung frei. Das Schließen einer Sitzung ist optional, verbessert aber die Leistung nachfolgender Aufrufe der Methode getSession(). Wenn die Anwendung ein Framework für Abhängigkeitsinjektion wie Spring verwendet, können Sie bei Bedarf eine Sitzung in eine Anwendungs-Bean injizieren.
Nach dem Erhalt der Sitzung kann die Anwendung auf die Daten zugreifen, die in Maps im ObjectGrid gespeichert sind. Wenn das ObjectGrid Entitäten verwendet, können Sie die Anwendungsprogrammierschnittstelle "EntityManager" verwenden, die Sie mit der Methode Session.getEntityManager abrufen können. Da sie näher an die Java-Spezifikationen angelehnt ist, ist die Schnittstelle "EntityManager" einfacher zu verwenden als die Map-basierte Anwendungsprogrammierschnittstelle. Die Anwendungsprogrammierschnittstelle "EntityManager" bringt jedoch Leistungseinbußen mit sich, weil sie Änderungen in Objekten verfolgt. Die Map-basierte Anwendungsprogrammierschnittstelle wird über die Methode "Session.getMap" abgerufen.
WebSphere eXtreme Scale verwendet Transaktionen. Wenn eine Anwendung mit einer Sitzung interagiert, muss sie im Kontext einer Transaktion enthalten sein. Eine Transaktion wird über die Methoden Session.begin, Session.commit und Session.rollback im Session-Objekt gestartet und festgeschrieben bzw. rückgängig gemacht. Anwendungen können auch im Modus für automatische Festschreibung ausgeführt werden. In diesem Modus startet und schreibt die Sitzung eine Transaktion automatisch fest, wenn die Anwendung mit Maps interagiert. Allerdings ist der Modus für automatische Festschreibung langsamer.
Sie können anpassen, wie viel Transaktionsunterstützung erforderlich ist. Ihre Anwendung kann die Rollback-Unterstützung und Sperren inaktivieren, aber dies geht zu Lasten der Anwendung. Die Anwendung muss das Fehlen dieser Features ausgleichen.
Beispiel: Eine Anwendung kann Sperren inaktivieren, indem Sie in der BackingMap die Einstellung für die Sperrstrategie auf NONE (Keine) setzt. Diese Strategie ist zwar schnell, ermöglicht aber, dass verschiedene Transaktionen dieselben Daten ungeschützt voreinander gleichzeitig ändern. Die Anwendung ist für alle Sperren und für die Datenkonsistenz zuständig, wenn NONE als Einstellung für die Sperrstrategie verwendet wird.
Eine Anwendung kann auch die Art und Weise ändern, in der Objekte beim Zugriff über die Transaktion kopiert werden. Die Anwendung kann festlegen, wie Objekte mit der Methode ObjectMap.setCopyMode kopiert werden. Mit dieser Methode können Sie die Einstellung "CopyMode" inaktivieren. Die Einstellung "CopyMode" wird normalerweise für Transaktionen inaktiviert, die im Lesezugriff arbeiten, wenn innerhalb einer Transaktion verschiedene Werte für dasselbe Objekt zurückgegeben werden können. Innerhalb einer Transaktion können verschiedene Werte für dasselbe Objekt zurückgegeben werden.
Wenn die Transaktion beispielsweise die Methode ObjectMap.get für das Objekt zum Zeitpunkt T1 aufruft, empfängt sie den Wert, der zu diesem Zeitpunkt gültig ist. Wenn sie die Methode get später zum Zeitpunkt T2 erneut aufruft, kann ein anderer Thread den Wert in der Zwischenzeit geändert haben. Da der Wert von einem anderen Thread geändert wurde, sieht die Anwendung einen anderen Wert. Wenn die Anwendung ein Objekt ändert, das mit dem CopyMode-Wert "NONE" abgerufen wurde, ändert sie die festgeschriebene Kopie dieses Objekts direkt. Ein Rollback der Transaktion hat in diesem Modus keine Bedeutung. Sie ändern die einzige Kopie im ObjectGrid. Obwohl die CopyMode-Einstellung "NONE" schnell ist, müssen Sie sich über die Konsequenzen, die diese Einstellung hat, genau im Klaren sein. Eine Anwendung, die die CopyMode-Einstellung "NONE" verwendet, darf die Transaktion nicht rückgängig machen. Wenn die Anwendung die Transaktion rückgängig macht, werden die Indizes nicht mit den Änderungen aktualisiert, und die Änderungen werden nicht repliziert, wenn die Replikation aktiviert ist. Die Standardwerte sind problemlos zu verwenden und weniger fehleranfällig. Wenn Sie die Leistung der Zuverlässigkeit von Daten vorziehen, muss die Anwendung wissen, was sie tut, um unbeabsichtigte Probleme zu vermeiden.
Nach dem Erhalt einer Sitzung können Sie das folgende Codefragment verwenden, um die Anwendungsprogrammierschnittstelle "Map" für das Einfügen von Daten zu verwenden.
Session session = ...;
ObjectMap personMap = session.getMap("PERSON");
session.begin();
Person p = new Person();
p.name = "John Doe";
personMap.insert(p.name, p);
session.commit();
Im Folgenden sehen Sie dasselbe Beispiel mit der Anwendungsprogrammierschnittstelle "EntityManager". In diesem Codemuster wird davon ausgegangen, dass das Person-Objekt einer Entität zugeordnet ist.
Session session = ...;
EntityManager em = session.getEntityManager();
session.begin();
Person p = new Person();
p.name = "John Doe";
em.persist(p);
session.commit();
Das Muster ist so konzipiert, dass es Referenzen auf die ObjectMaps für die Maps abruft, mit denen der Thread arbeitet, eine Transaktion startet, die Daten bearbeitet und dann die Transaktion festschreibt.
Die Schnittstelle "ObjectMap" enthält die typischen Map-Operationen, wie z. B. put, get und remove. Verwenden Sie jedoch spezifischere Operationsnamen, wie z. B. get, getForUpdate, insert, update und remove. Diese Methodennamen vermitteln die Absicht deutlicher als die traditionellen Map-APIs.
Sie können auch die flexible Indexierungsunterstützung verwenden.
Im Folgenden sehen Sie ein Beispiel für die Aktualisierung eines Objekts:
session.begin();
Person p = (Person)personMap.getForUpdate("John Doe");
p.name = "John Doe";
p.age = 30;
personMap.update(p.name, p);
session.commit();
Die Anwendung verwendet normalerweise die Methode getForUpdate an Stelle einer einfachen get-Methode, um den Datensatz zu sperren. Die update-Methode muss aufgerufen werden, um den aktualisierten Wert in der Map bereitzustellen. Wenn die update-Methode nicht aufgerufen wird, bleibt die Map unverändert. Im Folgenden sehen Sie dasselbe Fragment mit der Anwendungsprogrammierschnittstelle "EntityManager":
session.begin();
Person p = (Person)em.findForUpdate(Person.class, "John Doe");
p.age = 30;
session.commit();
Die Anwendungsprogrammierschnittstelle "EntityManager" ist einfacher als der Ansatz mit Map. In diesem Fall sucht eXtreme Scale die Entität und gibt ein verwaltetes Objekt an die Anwendung zurück. Die Anwendung ändert das Objekt und schreibt die Transaktion fest, und eXtreme Scale verfolgt die Änderungen an verwalteten Objekten automatisch während der Festschreibung und nimmt die erforderlichen Aktualisierungen vor.
Transaktionen von WebSphere eXtreme Scale können eine einzige Partition aktualisieren. Transaktionen eines Clients können in mehreren Partitionen lesen, aber nur eine einzige Partition aktualisieren. Wenn eine Anwendung versucht, zwei Partitionen zu aktualisieren, scheitert die Transaktion und wird rückgängig gemacht. Eine Transaktion, die ein integriertes ObjectGrid (Grid-Logik) verwendet, hat keine Routing-Funktionen und kann nur die Daten in der lokalen Partition sehen. Diese Geschäftslogik kann immer eine zweite Sitzung abrufen, die eine reine Clientsitzung ist, um auf andere Partitionen zuzugreifen. Diese Transaktion ist jedoch eine unabhängige Transaktion.
Wenn eine Transaktion bereits nach einer Entität gesucht hat, wird die Transaktion der Partition für diese Entität zugeordnet. Alle Abfragen, die in einer Transaktion ausgeführt werden, die einer Entität zugeordnet ist, werden an die zugeordnete Partition weitergeleitet.
Wenn eine Abfrage in einer Transaktion ausgeführt wird, bevor sie einer Partition zugeordnet wurde, müssen Sie die für die Abfrage zu verwendende Partitions-ID angeben. Die Partitions-ID ist ein ganzzahliger Wert. Die Abfrage wird dann an diese Partition weitergeleitet.
Abfragen suchen nur innerhalb einer einzigen Partition. Über die DataGrid-Anwendungsprogrammierschnittstellen können Sie dieselbe Abfrage jedoch parallel in allen Partitionen oder einem Teil der Partitionen ausführen. Verwenden Sie die DataGrid-Anwendungsprogrammierschnittstellen, um einen Eintrag zu suchen, der sich in jeder der Partitionen befinden könnte.
Der REST-Datenservice ermöglicht einem HTTP-Client den Zugriff auf ein Grid von WebSphere eXtreme Scale und ist mit WCF Data Services in Microsoft .NET Framework 3.5 SP1 kompatibel. Weitere Informationen finden Sie unter REST-Datenservices konfigurieren.
.