STP/IM Component/STP Internal Model Discussion
This page aims to serve as a starting point for a discussion on the internal representation of artefacts in Eclipse STP. It is envisaged that several editors will be used separately or in coordination in order to create SOA entities and architectures. Examples of such editors include
- SCA Editor
- JBI Editor
- BPMN editor
- BPEL editor
Each editor uses its own internal (meta-)model corresponding to its underlying foundation (SCA, JBI etc). It is important that there be a consistent representation of the least common denominator of the different editors (rather of the architectural and functional information created with the different editors). This would ensure that if something is created with one editor, at least some of the data would be available to all other editors. The advantage stems from the fact that fewer transformations must be written. For n editors we will have a maximum of n transformations instead of a maximum of <math>n^2</math> transformations (see below for an illustration of this).
Internal Models (e.g. SCA and JBI)
This subsection presents a very simplified and limited subset of the (meta-)models for SCA and JBI.
In SCA, we have components that may be contained in composites. A component can have any number of services that it can offer. In addition, a component may depend on other components and this dependency is indicated by references. Each service and reference can have an interface and one or more bindings corresponding to the supported communication protocols. Note that in SCA, the focus is on a logical architecture, with concerns such as bindings being secondary. We can have SCA diagrams that contain components / composites, each exposing services and references, and we can add information about bindings later on in the design process.
On the contrary, as seen above, in JBI the focus is more on the technological aspects of the bus. The central entity is the JBI Component which can be of two types (Binding Component or Service Engine). Each such component can be installed on the bus. "Logical" artefacts such as services to be exposed on the bus will be packaged into service units and deployed onto the JBI components which will end up containing a collection of such artefacts. To make deployment easier and to facilitate the expression of dependencies, service units can be grouped together into service assemblies that can be deployed as a whole. Therefore in JBI, the focus is reversed from that in SCA, and it is centred on the "bindings" and the bus services, with the logical services coming secondary, in a way.
Consistent Representation in STP
It is desirable that there be a consistent representation of the main artefacts created or used in Eclipse STP. A Service for instance should be available to architects and developers using either editor / technology. In particular, a service appearing in the logical architecture designed with SCA should be rendered "accessible" in the JBI editor or indeed in the BPMN or BPEL editors. It should be "same service" that is used everywhere across STP. We should aim to have minimum redundancy in the design process.
There are several approaches that can be used to ensure inter-model consistency. They are outlined in the following sub-sections.
Each STP user designs / develops using their favourite editor. Transformation capabilities are offered for conversions between models as soon as a new editor is used. Several common concepts in SCA and JBI for instance can be mapped as illustrated in the figure below.
The smiley faces represent service clients. The top half of the figure illustrates a basic SCA diagram. Component A offers a service through a WS-type binding and requires a component of type B. Component B offers a service through its JMS binding. The wire between them illustrates that A calls B. The bottom half of the figure is an illustration of a JBI configuration. As mentioned in the discussion above, the roles are inverted, i.e. the focus is here on the bindings and how the services are "deployed" onto them. The fact that A calls be is something that in JBI cannot be easily expressed. There are ways to suggest this by expressing the dependency between these components but this is something that is not compulsory in JBI. Additionally, the dependency specification does not have the same semantics as the wire in SCA. It is more a way to express that "if A is deployed, B must be there too". Indeed, if more interactions with A and B (and maybe other components) are going to be described in SCA, we would not be able to see them by just looking at the JBI deployment descriptor. The only way to "see" the interactions described by wires in SCA is to observe the message exchanges on the JBI bus (DeliveryChannel / MessageExchange interceptors - this type of interception is illustrated with a red dotted line in the figure).
Common Service Repository
This would imply that all services, regardless of the editor they were first created with, are available throughout Eclipse STP via a repository explorer. All editors must therefore make sure they "add" the new service to the repository. A possible disadvantage of this solution is the service interactions (e.g. orchestrations) could be lost. [Oisin, do you want to add more info here?]
Common STP Model
This would be a hybrid approach in which a common meta-model is used to hold the information that is more or less common across editors / technologies. Transformations from all individual editor models must be performed to obtain this "intermediate" representation. This approach is also similar to the service-repository approach, however it allows the addition of more information to be stored.
The figure below is a simplification of this intermediate model, showing service orchestrations as well. File:Intermediate.png
I would go for the third option. --Adrian.mos.inria.fr 11:10, 21 June 2007 (EDT)