Création et suppression d'entités fantômes
A propos des entités fantômes
Les entités fantômes sont des représentations en mémoire d'entités qui n'ont pas pu être créées en raison d'une erreur.
Les entités fantômes sont conservées jusqu'au prochain redémarrage de ThingWorx.
Les entités en échec ne sont pas committées dans la base de données.
En général, les entités fantômes sont le résultat d'une gestion incorrecte des exceptions dans un service qui appelle un service Create<Entity> programmatiquement (par exemple, CreateUser ou CreateThing).
Si une exception est générée lors de l'exécution d'un service ThingWorx personnalisé, toutes les entités créées ne sont pas committées dans la base de données.
Lorsqu'une entité fantôme existe, les entités du même type (objet, utilisateur, groupe, etc.) et du même nom ne peuvent pas être créées.
Les entités fantômes ne peuvent pas être recherchées à l'aide de la recherche Spotlight dans Composer.
Elles ne peuvent être trouvées qu'à l'aide de services ThingWorx spécifiques.
Il est impossible d'interagir avec les entités fantômes via Composer, sauf dans quelques services ThingWorx spécifiques.
Exemple d'entités fantômes
Les entités fantômes sont des entités de ThingWorx qui existent dans la mémoire de la plateforme, mais pas dans la base de données. Elles n'apparaissent pas dans Composer, mais si vous tentez de créer une nouvelle entité portant le même nom et du même type, Composer affiche un message d'erreur indiquant que l'entité existe déjà. Une fois la plateforme redémarrée, les entités fantômes disparaissent.
Des entités fantômes sont générées lors de la création d'entités dans un service qui lève une exception. Lorsque l'exception se produit, la transaction de base de données qui a enregistré les entités est annulée, mais ces dernières ne sont pas supprimées de la mémoire de la plateforme. Voici un exemple de service susceptible de créer une entité fantôme :
var params = {
name: "GhostThing" /* STRING */,
description: "Ghost" /* STRING */,
thingTemplateName: "GenericThing" /* THINGTEMPLATENAME */
};
Resources["EntityServices"].CreateThing(params); var makeError;
makeError.notThere = 1
Dans l'exemple ci-dessus, une exception se produit et la transaction qui a créé l'entité GhostThing est annulée, car la dernière ligne fait référence à une propriété dans "makeError" qui n'existe pas. Toutefois, l'entité GhostThing existe toujours dans la mémoire et une erreur se produit si vous tentez de créer une nouvelle entité nommée "GhostThing", car la plateforme pense qu'elle existe déjà.
* 
GhostThing n'apparaîtra pas dans Composer.
Pour empêcher la création d'entités fantômes, placez une instruction try/catch autour du code qui risque de générer une exception, puis rattrapez tout élément ayant pu être créé. Le code ci-dessus peut être mis à jour comme suit pour empêcher la création de l'entité fantôme :
try {
let params = {
name: "GhostThing" /* STRING */,
description: "Ghost" /* STRING */,
thingTemplateName: "GenericThing" /* THINGTEMPLATENAME */
};
Resources["EntityServices"].CreateThing(params);
var makeError;
makeError.notThere = 1;
} catch (err) {
let params = {
name: "GhostThing" /* THINGNAME */
};
Resources["EntityServices"].DeleteThing(params);
}
Services de gestion d'entités fantômes
Les services suivants sont disponibles dans le Sous-système de plateforme pour gérer les entités fantômes :
DeleteGhostEntities : supprime toutes les entités qui n'ont pas été rendues persistantes. Définissez le paramètre deleteGhostEntitiesInAllInstances sur "faux" pour supprimer les entités fantômes dans l'instance de ThingWorx actuelle ou sur "true" pour les supprimer de toutes les instances.
GetGhostEntities : renvoie une liste de noms d'entités fantômes qui n'ont pas été rendues persistantes dans l'instance de ThingWorx actuelle. Pour identifier les entités, le point de terminaison effectue une recherche Spotlight et sélectionne les entités qui n'ont pas d'ID.
Est-ce que cela a été utile ?