Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

The lifecycle of models consists of several the following stages:

Definition: a model is developed using Thing Definition Language.

Compilation: a model is deployed to TQLEngine A-Stack and the definition is compiled

Instantiation: model instance(s) are created when model attribute values are provided (by Create/Save queries). Model instance data is always persisted in the storage (but workflow instances remain in the memory)

Update: 

Delete

Explain the lifecycle of models (ThingModel, AppModel, DataModel). From definition, to instantiation, to updates/modification, or delete, to triggering of actions.

Updated: changes to the model instance attributes will result in updates of the model instance data in the storage. Updates can happen in two ways:

(1) modifying the attribute's value. Attribute values can be modified by queries (Update or Save queries). This type of update will in turn activate the associated action and workflow if the attribute is an actionable attribute.

(2) modifying the attribute's known (known value).This type of modifications happen when the output of an action/workflow is used to update the Attribute. These updates will NOT activate any action.

Deleted: the model instance is removed. This is done by a DeleteAll query.

In ThingModels and AppModels, model lifecycle is closely linked to the workflow lifecycle (DataModels do not have Actions or workflows).


Gliffy
nameModel Lifecycle

Models are defined by using ThingModel, AppModel or DataModel typescan be "partially" instantiated. That is, if some, but not all attribute values are given, then model instance(s) will still be created with the attributes which have value. The other attribute values can be provided later as model instance updates.

Example of a Create query to instantiate a TempSensor model.

Code Block
languagexmlpy
titleThingModelModel Instantiation
linenumberstrue
<ThingModel#
NameCreate(format="TempSensor" combines="TempFacetSerial">
       <Sid Name="sensorId" />
</ThingModel>

 

 

...

version,current"):
# This will create
	TempSensor:
	peripheral: serial
	baudrate: 115200
	interfacePort: "/dev/cu.usbserial-AL01C0ME"
	interface: serial
	format: ascii
	operation: receive
	uniqueId: 76522
	payload: $Null()
	tempValue: $Null()

For update and delete, see common CRUD operations on models.

Model instance data

A-Stack maintains model instances data in the storage (TQLCache) based on the model definition (the model definition itself is not stored, but held in memory). The model instance data storage type is defined in the deployment script. For example, the the deployment script below, the <Process> points to the [:ModelFile:], which will be replaced by the model definition file name at the time of deployment. The Type="Sqlsff" defines that storage type is the SFF unstructured SQL database.

Note

Model instance data may also be stored in external databases (SQL or NoSQL) by providing the connecting string to the <Storage>.


Code Block
languagexml
titleModel Deployment
linenumberstrue
<NewFacetInstance#
NewFacetInstance(fid=: "[:FacetIDName:]",         Name=Name: "[:FacetInstanceName:]", Type=: "SffTqlFacet">):
  OnActivate:
     <OnActivate>
            <NewFacetInstance name=NewFacetInstance(name: "tqlwf", type=: "SffWdlFacet"):
/>      TopicFacet: TQLGenericTopic
     <TopicFacet>?TQLGenericTopic</TopicFacet>   Process:
         <Process>
                <Storage Name= Storage(Name: "[:TQLCacheName:]"
                    Type=, Type: "SqlSff"
                    Comment=, Comment: "[:TQLCacheName:] Database SFF Unstructured SQL database"):
/>          Namespace:
      <Namespace>                     <Include>	Include: [:ModelFile:]</Include> <!-- ModelFile  #ModelFile contains the definition for the model -->
                </Namespace>
            </Process>
        </OnActivate>
        ...

 

...

the

...

Code Block
languagexml
titleModel Instantiation
linenumberstrue
<Create format="version,current"> <!-- This will create -->
   <TempSensor>
            <peripheral>serial</peripheral>
            <baudrate>115200</baudrate>
            <interfacePort>/dev/cu.usbserial-AL01C0ME</interfacePort>
            <interface>serial</interface>
            <format>ascii</format>
            <operation>receive</operation>
            <uniqueId>76522</uniqueId>
            <payload>$Null()</payload>
            <tempValue>$Null()</tempValue>
    </TempSensor>
</Save>

 

In data centeric world, sometimes partioning between model and instances can be grey. In purety, model is something, where every essential attribute is not defined yet.  In other words, any instance can be defined with only partial attributes of the model, as long as model declares it legal. In TQLEngine, instances are created only through create or save query.

Clarify the relationship/dependencies between model lifecycle and workflow lifecycle (if a workflow is defined within a action in the model)

...

model

...

 

...