This specification is used to describe the composition of the final application in term of component that should be instantiated in which isolate of which node.
Composition
{
// Composition's name
"name" : "composition-name" ,
// Top composite
"root" : { /* see 'composite' */ }
}
Composite
{
// Name of composite
"name" : "composite1" ,
// List of components
"components" : [ /* see 'components' */ ],
// List of sub-composites
"composites" : [
{
"name" : "subcomposite" ,
"components" : [ /* ... */ ]
// this composite hasn't sub-composites.
}
]
}
Components
{
// Name of the component
"name" : "aggregator-UI" ,
// Name of its Component Factory
"factory" : "demo-sensor-aggregator-ui-factory" ,
// Indication on the implementation language
"language" : "python" ,
// Location on a precise isolate
"isolate" : "aggregator.ui" ,
// Location on a precise node
"node" : "central"
// Initial configuration of the component
"properties" : {
"servlet.path" : "/sensors"
},
// Wiring with another component named 'aggregtor'
// which can be found in any composite of this composition
"wires" : {
"_aggregator" : "aggregator"
},
"filters" : {
"_handler" : "(ready=1)"
}
}
import-files
base.js
{
"root" : "root" ,
"imported" : {
"top-value" : "top" ,
"answer" : 42 ,
// Import from another file
"import-files" : [ "imported.js" ]
}
}
imported.js
{
// New property
"hello" : "World" ,
// This value will be overloaded by the high level property's value
"answer" : 51
}
Obtained result :
{
"root" : "root" ,
"imported" : {
// Non modified value
"top-value" : "top" ,
// Conserved value
"answer" : 42 ,
// New property
"hello" : "world"
}
}
Complete example
{
"name" : "hello-world" ,
"root" : {
"name" : "hello-worldd-composition" ,
"components" : [
{
"name" : "Hello_Components" ,
"factory" : "hello_components_factory" ,
"node" : "node1" ,
"isolate" : "web"
}, {
"name" : "A_component" ,
"factory" : "component_a_factory" ,
"node" : "node1"
}, {
"name" : "B_component" ,
"factory" : "component_b_factory" ,
"node" : "node1"
}, {
"name" : "E_component" ,
"factory" : "component_e_factory" ,
"node" : "node1"
}, {
"name" : "C_component" ,
"factory" : "component_c_factory" ,
"node" : "node2"
}, {
"name" : "D_component" ,
"factory" : "component_d_factory" ,
"node" : "node2"
}
]
}
}