Définissez l'état initial d'un ObjectGrid avec le fichier XML de configuration de l'ObjectGrid. Vous pouvez utiliser l'attribut initialState sur ObjectGrid pour indiquer son état au démarrage. Normalement, lorsqu'un ObjectGrid termine son initialisation, il devient disponible pour le routage.
L'état peut ensuite être changé de manière à empêcher l'acheminement du trafic vers l'ObjectGrid. Si l'ObjectGrid doit être initialisé, mais pas immédiatement disponible, vous pouvez utiliser l'attribut initialState.
L'attribut initialState est défini dans le fichier XML de configuration de l'ObjectGrid. L'état par défaut est ONLINE. Les valeurs admises sont les suivantes :
- ONLINE (par défaut)
- PRELOAD
- OFFLINE
Voir Fichier XML du descripteur d'ObjectGrid pour plus d'informations sur l'attribut initialState.
Si l'attribut initialState est défini dans un ObjectGrid, l'état doit être explicitement ramené à Online, car sinon l'ObjectGrid reste indisponible. Une exception AvailabilityException se produit si l'ObjectGrid n'a pas l'état.
Voir la AvailabilityState documentation d'API pour plus d'informations.
Utilisation de l'attribut initialState pour le préchargement
Si l'ObjectGrid est préchargé avec des données, un laps de temps est susceptible de s'écouler entre le moment où il est disponible et le moment où il passe à l'état de préchargement permettant de bloquer le trafic client. Pour éviter ce laps de temps, l'état initial d'un ObjectGrid peut être défini comme PRELOAD. L'ObjectGrid effectue toujours l'initialisation requise, mais bloque le trafic jusqu'au changement d'état et permet au préchargement d'avoir lieu.
Les états PRELOAD et OFFLINE bloquent le trafic, mais seul l'état PRELOAD permet de lancer un préchargement.
Basculement et équilibrage
Si une grille de données de réplique est promue pour être une grille de données primaire, la réplique n'utilise pas le paramètre initialState.
Si la grille de données primaire est déplacée pour cause de rééquilibrage, le paramètre initialState n'est pas utilisé, car les données sont copiées vers le nouvel emplacement primaire avant la fin du transfert Si la réplication n'est pas configurée, le fragment primaire passe à l'état initialState en cas de basculement et un nouveau fragment primaire doit être placé.
Changez l'état de disponibilité avec l'interface StateManager. Utilisez l'interface de StateManager pour définir l'état de disponibilité d'un ObjectGrid. Pour définir l'état de disponibilité d'un ObjectGrid exécuté sur les serveurs, transmettez un client ObjectGrid correspondant à l'interface de StateManager. Le code suivant démontre comment changer l'état de disponibilité d'un ObjectGrid.
Client ClientClusterContext = ogManager.connect("localhost:2809", null, null);
ObjectGrid myObjectGrid = ogManager.getObjectGrid(client, "myObjectGrid");
StateManager stateManager = StateManagerFactory.getStateManager();
stateManager.setObjectGridState(AvailabilityState.OFFLINE, myObjectGrid);
Chaque fragment de l'ObjectGrid passe à l'état à appliquer lorsque la méthode
setObjectGridState est appelée sur l'interface de
StateManager. Lorsque la méthode est renvoyée, tous les fragments de l'ObjectGrid doivent être définis sur l'état adéquat.
Utilisez un plug-in ObjectGridEventListener pour changer l'état de disponibilité d'un ObjectGrid côté serveur. Changez l'état de disponibilité d'un ObjectGrid côté serveur seulement lorsque ce dernier présente une partition unique. Si l'ObjectGrid présente plusieurs partitions, la méthode shardActivated est appelée sur chaque partition principale, ce qui entraîne des appels superflus pour le changement d'état de l'ObjectGrid
public class OGListener implements ObjectGridEventListener,
ObjectGridEventGroup.ShardEvents {
public void shardActivated(ObjectGrid grid) {
StateManager stateManager = StateManagerFactory.getStateManager();
stateManager.setObjectGridState(AvailabilityState.PRELOAD, grid);
}
}
L'état QUIESCE étant transitionnel, vous ne pouvez pas utiliser l'interface de StateManager pour définir l'état d'un ObjectGrid sur QUIESCE. L'ObjectGrid passe par cet état avant d'être défini sur l'état OFFLINE.