In such systems, it may be useful to have the ability to dynamically extend and re-configure the system. For example, in a collaborative system, different users may be interested in getting notification of different events that may not be known to the system designer a-priori necessitating dynamic extension while the system is in execution. Our goal is to build a system that enables the scripting of such event-driven applications. Like a mailbox, messages may be sent asynchronously to the MStream and are consumed in the same order in which they were sent. An MStream has a globally unique name and may be located on any machine that runs an execution environment for it and allows it to be moved there.
Handlers operate in an atomic fashion.
Handlers may append messages to other MStreams - triggering Handler executions at the target MStream when the message is delivered. An Agent may specify a portion of its global state as being in its briefcase indicating to the system that this state needs to be re-located to the new location when an MStream is moved. Using the mechanism we have just described, an entire distributed system can be scripted and deployed from a single point of control and dynamically extended and re-configured while it is in execution. To set up such a system, the controller simply defines MStreams, associates handlers with the MStreams and moves the MStreams to the desired locations. To allow this we have incorporated a resource-control mechanism.