Anfangsstatus eines ObjectGrids mit der ObjectGrid-XML-Konfigurationsdatei festlegen. Sie können das Attribut initialState in einem ObjectGrid verwenden, um dessen Anfangsstatus anzugeben.
Nach Abschluss der Initialisierung ist ein ObjectGrid normalerweise für Routing bereit.
Der Status kann später geändert werden, um zu verhindern, dass Datenverkehr an ein
ObjectGrid weitergeleitet wird. Wenn das ObjectGrid initialisiert werden muss, aber nicht sofort verfügbar ist, können Sie das Attribut
initialState verwenden.
Das Attribut "initialState" wird in der XML-Konfigurationsdatei des
ObjectGrids definiert.
Der Standardstatus ist ONLINE.
Die gültigen Werte sind:
- ONLINE (Standardeinstellung)
- PRELOAD
- OFFLINE
Weitere Informationen zum Attribut initialState finden Sie unter ObjectGrid-XML-Deskriptordatei.
Wenn das Attribut "initialState" in einem ObjectGrid definiert wird,
muss der Status explizit auf ONLINE zurückgesetzt werden, oder das ObjectGrid
bleibt nicht verfügbar. Es tritt eine Ausnahme des Typs "AvailabilityException" ein, wenn das
ObjectGrid nicht den Status ONLINE hat.
Weitere Informationen finden Sie in der Dokumentation zur API AvailabilityState.
Attribut "initialState" für das vorherige Laden verwenden
Wenn das ObjectGrid
vorher mit Daten geladen wird (Preload), kann es einen Zeitraum zwischen Verfügbarkeit des
ObjectGrids und Wechseln in einen Preload-Status geben, in dem Clientdatenverkehr blockiert werden kann.
Um diesen Zeitraum zu verhindern, kann der Anfangsstatus eines
ObjectGrids auf PRELOAD gesetzt werden. Das ObjectGrid setzt zwar die erforderlichen Initialisierungsprozesse fort,
blockiert den Datenverkehr aber so lange, bis sich der Status ändert und der Preload-Prozess durchgeführt werden kann.
Die Status PRELOAD und OFFLINE blockieren zwar beide den Datenverkehr, aber Sie müssen den Status
PRELOAD verwenden, wenn Sie einen Preload-Prozess einleiten möchten.
Verhalten beim Failover und Lastausgleich
Wenn ein Replikatdatengrid in ein primäres Datengrid hochgestuft wird, verwende das Replikat nicht die
initialState-Einstellung.
Wenn das primäre Shard zur Neuverteilung verschoben wird, wird die initialState-Einstellung nicht verwendet,
weil die Daten an die neue primäre Position kopiert werden, bevor der Verschiebevorgang durchgeführt wird.
Wenn keine Replikation konfiguriert ist, übernimmt das primäre Shard
den initialState-Wert, wenn ein Failover stattfindet und ein neues primäres Shards verteilt werden muss.
Verfügbarkeitsstatus mit der Schnittstelle StateManager ändern. Verwenden Sie die Schnittstelle
"StateManager", um den Verfügbarkeitsstatus eines
ObjectGrids festzulegen. Zum Festlegen des Verfügbarkeitsstatus eines auf den Servern
ausgeführten ObjectGrids übergeben Sie einen entsprechenden
ObjectGrid-Client an die Schnittstelle "StateManager".
Der folgende Code veranschaulicht, wie der Verfügbarkeitsstatus eines ObjectGrids geändert wird.
ClientClusterContext client = ogManager.connect("localhost:2809", null, null);
ObjectGrid myObjectGrid = ogManager.getObjectGrid(client, "myObjectGrid");
StateManager stateManager = StateManagerFactory.getStateManager();
stateManager.setObjectGridState(AvailabilityState.OFFLINE, myObjectGrid);
Jedes Shard
des ObjectGrids nimmt den gewünschten Status an, wenn die Methode
"
setObjectGridState" in der Schnittstelle "
StateManager" aufgerufen wird.
Wenn die Methode zurückkehrt, sollten alle Shards im ObjectGrid den richtigen Status haben.
Verwenden Sie ein ObjectGridEventListener-Plug-in, um den Verfügbarkeitsstatus
eines serverseitigen ObjectGrids zu ändern. Ändern Sie den Verfügbarkeitsstatus eines serverseitigen
ObjectGrids nur, wenn das ObjectGrid eine einzige Partition hat.
Falls das ObjectGrid mehrere Partitionen hat, wird die Methode "shardActivated"
für jedes primäre Shard aufgerufen, was zu überflüssigen Aufrufen zum Ändern des ObjectGrid-Status führt.
public class OGListener implements ObjectGridEventListener,
ObjectGridEventGroup.ShardEvents {
public void shardActivated(ObjectGrid grid) {
StateManager stateManager = StateManagerFactory.getStateManager();
stateManager.setObjectGridState(AvailabilityState.PRELOAD, grid);
}
}
Da der Status QUIESCE ein Übergangsstatus ist, können Sie die Schnittstelle
"StateManager" nicht verwenden, um ein ObjectGrid in den Status
QUIESCE zu versetzen. Ein ObjectGrid nimmt diesen Status auf seinem Weg zum Status OFFLINE vorübergehend an.