Creación y borrado de entidades fantasma
Acerca de las entidades fantasma
Las entidades fantasma son representaciones en memoria de entidades que no se han podido crear debido a un error.
Las entidades fantasma solo se almacenan hasta el siguiente reinicio de ThingWorx.
Las entidades fallidas no se confirman en la base de datos.
Por lo general, las entidades fantasma son el resultado de un control inadecuado de excepciones en un servicio que llama a un servicio Create<Entity> mediante programación (por ejemplo, CreateUser o CreateThing).
Si se produce una excepción durante la ejecución de un servicio de ThingWorx personalizado, las entidades que se hayan creado no se confirmarán en la base de datos.
Cuando existe una entidad fantasma, no se pueden crear entidades del mismo tipo (cosa, usuario, grupo, etc.) y nombre.
No se pueden buscar las entidades fantasma mediante la búsqueda con Spotlight en Composer.
Las entidades fantasma solo se pueden encontrar mediante el uso de servicios de ThingWorx específicos.
No se puede interactuar con las entidades fantasma mediante Composer, excepto a través de unos pocos servicios de ThingWorx específicos.
Ejemplo de entidades fantasma
Las entidades fantasma son entidades de ThingWorx que existen en la memoria de la plataforma, pero no en la base de datos. No aparecen en Composer, pero si se intenta crear una entidad nueva con el mismo nombre y tipo, Composer muestra un error que indica que la entidad ya existe. Una vez reiniciada la plataforma, las entidades fantasma desaparecen.
Las entidades fantasma se crean cuando un servicio produce una excepción al crear esas entidades en el servicio. Cuando se produce la excepción, la transacción de la base de datos que ha guardado las entidades se retrocede, pero las entidades no se quitan de la memoria de la plataforma. El siguiente servicio de ejemplo puede crear una entidad fantasma:
var params = {
name: "GhostThing" /* STRING */,
description: "Ghost" /* STRING */,
thingTemplateName: "GenericThing" /* THINGTEMPLATENAME */
};
Resources["EntityServices"].CreateThing(params); var makeError;
makeError.notThere = 1
En el ejemplo anterior, se produce una excepción y la transacción que creó GhostThing se retrotrae porque la última línea hace referencia a una propiedad de 'makeError' que no existe. Sin embargo, GhostThing sigue existiendo en la memoria y se produce un error si se intenta crear una nueva entidad denominada "GhostThing", ya que la plataforma cree que ya existe.
* 
GhostThing no aparecerá en Composer.
Para evitar la creación de entidades fantasma, coloque una sentencia try/catch alrededor del código con potencial de producir una excepción, y recupere todo lo que se haya creado. El código anterior se puede actualizar de la siguiente manera para evitar la creación de la entidad fantasma:
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);
}
Servicios de entidad fantasma
Los siguientes servicios están disponibles en el Subsistema de plataforma para gestionar las entidades fantasma:
DeleteGhostEntities: permite borrar todas las entidades que no se han almacenado. Defina el parámetro deleteGhostEntitiesInAllInstances en falso para borrar las entidades fantasma de la instancia actual de ThingWorx o defínalo en verdadero para borrar las entidades fantasma de todas las instancias.
GetGhostEntities: se devuelve una lista de nombres de entidades fantasma que no se han almacenado en la instancia actual de ThingWorx. Para identificar las entidades, el extremo realiza una búsqueda con Spotlight y selecciona las entidades que no tienen un ID.
¿Fue esto útil?