-
Key: MARTE-86
-
Legacy Issue Number: 11839
-
Status: closed
-
Source: THALES ( Sebastien Demathieu)
-
Summary:
Subject: the GCM chapter should define a causality model for flows. Details: the GCM chapter introduces the notion of flow port as a structural feature of a structured class. However, the specification does not states what happens when a flow comes into / get out of a flow port. There should be a reference to behaviors owned by this structured class. Proposed resolution: enhance the GCM chapter.
-
Reported: MARTE 1.0b1 — Thu, 20 Dec 2007 05:00 GMT
-
Disposition: Resolved — MARTE 1.0b2
-
Disposition Summary:
This issue concerns the semantics of FlowPorts and indeed its underlying causality model.
Indeed, the issue 11840 is also clearly related to this issue. Issue 11840 summary is following:
“Subject: Support for flows in activities. Details: The current specification provides a limited
support for flow in activity diagrams. The GCM chapter introduces the FlowSendAction
stereotype. However, there is no way to indicate the pins used to define the data to send. At the
same time, there is no action (such as FlowReceiveAction) to indicate how to receive a flow. It
seems that activity parameters are an interesing alternative to specify incoming and outgoing
flows in activity diagrams (SysML follows this approach). Proposed resolution: Remove the
FlowSendAction stereotype and provide a support for BOTH incoming and outgoing flows through
activity parameters (maybe a stereotype would need to be defined here).” Both issues are treated
in this document."
As stated by Conrad Bock in [Conrad Bock: “UML 2 Activity and Action Models Part 4: Object
Nodes”, Journal of Object Technology, vol.3, no.1, pp.27-41], there are traditionally two ways for
considering dataflow communications:- a “pull” semantics with the following characteristics:
o Passive: the arrival of data in the data store does not trigger behaviors per se. It
is indeed additional actions, for example time-triggered actions, that when
needed pull the data from the data store. o Non-depleting: the use of data in the store does not remove it from the store - a “push” form of data flow and storage, with the following characteristics:
o Active: the arrival of data in the data store triggers execution of some behavior.
o Depleting: the data arriving on the port is not store locally. Data is indeed
conveyed to the triggered behavior.
The objective of this resolution is to enable GCM's users to address both forms of data flow. For
that purpose, we are making the following proposal: - Data sending:
o The «SendFlowAction» stereotype is removed (NOTE: in this case, one resolves
in the same time the issue 12286. This latter was then set to Duplicate/Merged
and refer this resolution). Indeed, the standard UML SendObjectAction is already
well suited to express a data emission. The execution of a SendObjectAction
results in the emission of a message encapsulating the sent object (which can be
an instance of any classifier). Note that, SendObjectAction inherits from
InvocationAction and as defined in the composite structure package, this action
already enables to specify a target port for the action (see, UML2 spec., section
9.3.9 on p. 182).
o In addition to specify the flowProperty on which a SendObjectAction is applied (or
more generally to specify the feature of a non-atomic FlowPort or
ClientServerPort on which an InvocationAction is applied), one introduces the
«GCMInvocationAction» stereotype which extends InvocationAction (from
InvocationActions). In this case, the stereotyped invocation action targets a nonatomic
flow FlowPort or a featureBased ClientServerPort (i.e. a ClientServerPort
which have been specified using a ClientServerSpecification. Cf resolution 11820
for a precise definition of these concepts), and one of its features. For example, if
a non-atomic output flowport has two flow properties (i.e. it is typed by a
FlowSpecification with two out flow properties), the ‘onPort’ property of
SendObjectAction enables to specify that this flow port is used as a target of the
send. In addition, the ‘onFeature’ property of «GCMInvocationAction» enables to
specify which of the two flow properties the target of the send is. - Data reception events: Once we have dealt with data sending, it is also required to be able to deal with
data receipt. For that purpose, we introduce the «DataEvent» stereotype. This
latter extends the UML's AnyReceiveEvent metaclass. This metaclass is the
most generic kind of concrete MessageEvent. DataEvents are raised when data
(which have been sent as a consequence of a SendObjectAction) are received
on a behavioral FlowPort. In the case of a non-behavioral FlowPort, data are
propagated along associated delegation connectors, and no event is raised at all
(just as for standard UML Ports). DataEvents raised as a consequence of data
receptions on behavioral ports are then stored in the event pool of the owning
object just like any other kind of UML events would be. It implies that the UML
semantic variation points related to event management also applies to
«DataEvent» (and typically concerning the way events are ordered in and
extracted from the event pool). This is however fully in line with the philosophy of
the GCM which aims to be as generic as possible. Particular semantic
interpretation on the way DataEvent are dispatched and consumed would thus
require a specialization of the GCM, such as the one proposed in the HLAM subprofile
of MARTE. The definition of «DataEvent» mimics the definition of the UML
SignalEvent metaclass, in the sense that it is possible to attach a classifier to the
event in order to characterize it (just as it is possible to attach a Signal to a
SignalEvent). More precisely, the classifier that can be attached to the event
must be a classifier that can be used to type flow ports or flow properties (i.e.,
DataType and Class). In order to avoid confusion with SignalEvent, a constraint
imposes that the classifier associated with the DataEvent cannot be a Signal.
DataEvents can then be exploited by triggers of transitions within a
StateMachine, or by triggers of AcceptEventActions within an Activity. Hence, it is
possible to specify reactions to reception of data of a particular type (i.e., data
which are typed by a classifier compatible with the classifier associated with the
DataEvent). Note that such triggers can natively be related to particular ports i.e.,
the ports from which the DataEvent have been raised.
o UML Triggers can natively be related to a particular port. Additionally, in MARTE,
we introduce the possibility to specify more precisely the origin of a trigger. The
«GCMTrigger» stereotype is defined for that purpose. It extends the UML Trigger
metaclass and it owns a property that enables to specify which feature of the
FlowSpecification of a FlowPort or ClientServerSpecification of a
ClientServerPort (cf. resolution 11820 for details on ClientServerPort) is the
origin of the trigger. It is thus possible to specify reactions that are, for example,
related to the occurrence of a given DataEvent on a non-atomic FlowPort, and for a particular FlowProperty. Of course this advanced mechanism is mainly
interesting for non-atomic port, because in other cases, there are no possible
ambiguities.
The concepts denoted below were defined to support the “push” semantic of MARTE's ports
(including flow and client-server ports), and they are well aligned with the standard event model.
The “active” characteristic of the «push» semantics is covered because the reception of a data on
a behavioral FlowPort raises a DataEvent, which can be used as a trigger in a behavior. The
“depleting” characteristics of the "push" semantics is covered because, according to the standard
UML semantics, once an event has been consumed by a behavior, it is no longer available in the
event pool to trigger other behaviors.
Concerning the “pull” semantics of MARTE's FlowPorts, no particular extensions are required. A
simple modeling pattern (suggested by SysML and Conrad Bock’s article, respectively for the
usage of delegation connectors and the usage of properties for persistent data storage and nondepleting
data use) is indeed sufficient as explained next.
According to the UML 2 superstructure, a non-behavioral port should have delegation connectors,
so that incoming requests can be propagated along these connectors to parts of the composite
structure owning the port (in other case as said previously and as it is defined in the UML2
specification, messages are lost). Then there are two possibilities for the parts connected to the
ports: either they delegate also the requests to some of their parts, or they deal directly with the
request triggering the execution of one of their behaviors. This case fits also with the MARTE's
client-server port and it is thus reasonable to have a similar mechanism for MARTE's flow ports.
At the end of the delegation chain, a non-behavioral input atomic flow port should have at least
one delegation connector targeting a part which is type-compatible with the port (if there is no
delegation connector, the data is simply lost). When a data is received on such a port and then
delegated through the connector, no DataEvent is raised (which is in line with the “passive”
aspect of the “pull” form of data flow). In this case, the semantics says that the data is written in
the part targeted by the delegation connector, replacing any existing value. The data stored on
the targeted properti can then be used when needed by the behavior of the component, typically
via a ReadStructuralFeatureAction (which has no depleting effect on the value of the property).
For more complex storage policies, we propose to introduce the « DataPool » stereotype. Two
default storage and selection policies are defined: LIFO and FIFO. « DataPool » can also be
associated with user-defined policies, via its ‘insertion’ and ‘selection’ properties. These
properties explicitly reference UML Behaviors, respectively describing how a data is to be
inserted in the property, and how a set of data is to be selected from the property. When a data is
received on a FlowPort with a delegation connector targeting a property stereotyped with
«DataPool», the semantics says that the data is inserted in the pool following the description provided by ‘insertion’ behavior (Concerning the usage of the ‘selection’ behavior, see the
following description concerning the usage of connectors between properties and behavior
parameters).
This rule can be extended for non-atomic flow ports, where each flow property should be
associated with a delegation connector (by convention, when one of the flow properties is not
associated with a delegation connector, the FlowPort should be behavioral, and data received on
this FlowPort and related to this FlowProperty will raise a DataEvent).
Finally, issue 11840 proposes the possibility of an explicit “binding” between flow ports of a
component and parameters of the component behaviors. This additional proposition is an
alternative solution to the mechanisms described below. Moreover, let's notice that SysML is
relying on this mechanism, but SysML is lacking two points: firstly, SysML does not define indeed
clearly how that works (i.e., either by name matching between ports and parameters, or
(probably) by using a BindingConnector), and secondly SysML does define also it’s the clear
meaning of this mechanism. Hence, we provide next a clear semantics for this mechanism
aligned (i.e., compatible) with the “pull” and “push” semantics we have considered until now: - “pull” semantics: A standard UML connector is expressed between a property (which
used to be the target of a delegation connector, but does not need to be) of the
component and an IN or INOUT parameter of a behavior or operation (which would
typically belong to the owner of the port, but does not need to be). It means that the
values passed to the parameters of the behavior (or operation) when the behavior is
called are actually the values of the connected properties. The connectors just prevent
from the usage of an explicit ReadStructuralFeatureAction to get the value associated
with the properties. Note that this usage of connectors is compatible with the abstract
syntax of UML, since both Property and Parameter are ConnectableElements. In the
case where the connected property is stereotyped with « DataPool », its ‘selection’
Behavior is used to compute the values to be selected (from the property) and to be
passed to the parameter. - “push” semantics: Connectors are directly expressed between input non-behavioral flow
ports (respectively the output flow ports) and input parameters (respectively the output
flow ports) of the classifierBehavior Activity of the composite structure owning the ports.
The idea is that each incoming data received on a flow port will be propagated to a
parameter of the classifier behavior. The data associated with the input message will be
handled as a token on an ActivityParameterNode corresponding to the parameter. The
token will then enter the chain of computation described by the set of object flows and
actions of the activity (with respect to the token propagation semantics of UML activities). At the end of the computation chain, tokens will be propagated to
ActivityParameterNodes corresponding to output parameters of the Activity. If a
delegation connector is modeled between such a parameter and an output flow port of
the composite structure, a message containing the produced data will be emitted through
the flow port (just as if SendObjectAction with this value would have been applied on the
flow port). The standard semantics of UML activities implies that tokens related to
required input parameters must be available for the called activity to start, and that token
corresponding to output parameters will be made available on corresponding output pins
once the activity is finished. Note that if one wants the activity modeling the classifierbehavior
to be able to accept inputs (on its input parameters) and produce outputs (on its
output parameters) while it is executing, input and output parameters of the activity
should typically be specified as streaming parameters. Examples are provided in the
revised text.
- a “pull” semantics with the following characteristics:
-
Updated: Fri, 6 Mar 2015 20:58 GMT
MARTE — the GCM chapter should define a causality model for flows
- Key: MARTE-86
- OMG Task Force: UML Profile for MARTE FTF