Instantiating UcompOS Global (Continuum) Variables at Startup
In my post about UcompOS Shared Objects, I described how the UcompOS Portal furnishes a Shared Object Implementation that can be written to and read by any UcompOS entity in the UcompOS Continuum.
In a large-scale UcompOS Rich Portal Application, you very likely may find a need to share complex data across multiple UcompOS entities.
One effective approach to this challenge is to use the UcompOSGlobalManagerProxy class’s setSharedObject(), getSharedObject(), and getSharedObjects() methods.
These methods get/set shared objects on the UcompOS Portal at run-time.
But what if you want to populate the UcompOS Portal’s shared Object at start-up even before any UcompOS applications are launched?
As of the version 0.4.1 Milestone release of UcompOS RPF, there is a way to do this.
The key is a new <globalVariables/> element that can be added as a child element to the root <applications/> element in a dock manifest and as a child element to the root <application/> element in a UcompOS application manifest.
Below is a simple example of this in action in the dock manifest of my Educator 2 software application being built entirely on top of the UcompOS RPF:
<?xml version="1.0" encoding="utf-8"?> <applications> <globalVariables> <globalVariable> <key>_DOMAIN_</key> <value>applications.ucompass.com</value> </globalVariable> <globalVariable> <key>_PROTOCOL_</key> <value>http</value> </globalVariable> <globalVariable> <key>_GATEWAY_</key> <value>http://pilotfish2.ucompass.com/apps/gateway</value> </globalVariable> </globalVariables> <application background="true" default="true"> _PROTOCOL_://_DOMAIN_/Educator2PortalFoundation/manifest.xml </application> </applications>
Each global variable is wrapped in a <globalVariable/> element with child <key/> and <value/> elements.
All global variables in the dock manifest will automatically be added to the UcompOS Portal’s Shared Object implementation and will immediately be available to all UcompOS entities.
String Substitutions in Manifest Files
In the above example, notice I am instantiating global variable named _PROTOCOL and _DOMAIN_. And then notice that those strings appear in my <application/> element.
A string substitution will automatically take place here such that the <application/> value will be http://applications.ucompass.com/Educator2PortalFoundation/manifest.xml after the substitution.
As mentioned earlier, the <globalVariables> element is supported in both application manifests and dock manifests so you can also establish global variables in this fashion when launching a UcompOS application.
Typing Shared Objects
The <value/> element supports an optional type attribute such that you can articulate the data type of a Shared Object.
The best way to show how this is accomplished is with examples:
<globalVariable> <key>groceryList</key> <value type="Array"> <item>Bananas</item> <item>Cereal</item> <item>Diapers</item> </value> </globalVariable>
<globalVariable> <key>contacts</key> <value type="Object"> <item> <key>Joe</key> <value>555-1212</value> </item> <item> <key>Bob</key> <value>555-2121</value> </item> </value> </globalVariable>
The type attribute can also be of type uint, int, Boolean, Number and String. The default data type is String. Also, the <item/> element supports the type attribute for Arrays and Objects.
Also, nesting of complex data structures is supported, so you can implement an Array of Arrays, or an Array of Objects, etc.