I was reading Towards Architecture-based Self-Healing Systems, and came upon the term
first-class connectors
. What are they?
Searching some more finds this paper Systematic Construction of Software Architecture Supported by
Enhanced First-Class Connectors, which looks like it might have an answer, and I might read it in detail later, but regardless, it would be useful to have the question up here with an answer shorter than that paper. 🙂
An example of why having a connector being first class might also be relevant.
8
I feel I must be missing something in the question, since a pretty good answer looks like it appears in the first paper linked in the question (Towards Architecture-based Self-Healing Systems). Still, I’ll try to answer here…
Short version: a “connector” is a communications channel between “components”, where “components” are independently-deployable parts of an application. A “first-class connector” is a connector that can be easily manipulated by a tool, such as an architecture manipulation engine. An application where “first-class connectors” might be useful is, to choose an example perhaps not quite at random, let’s say, an Architecture-based Self-Healing System.
I’ll get into the details below. First, you asked:
What is a first-class connector?
I think this is best answered in two parts:
- What is a connector?
- What does it mean for the connector to be “first-class”?
What is a connector?
A “connector”, in this case, is a communications channel between system “components”, where a “component” is an independently deploy-able part of the system that communicates with other components via connectors. To put that another way, if you consider that you can break down an application into independently deploy-able entities, which can communicate via some mechanisms, then the independently deploy-able entities can be called “components”, while the communications mechanisms would be “connectors”.
This is a bit outside of my comfort zone (I work in embedded systems), so I have a hard time going into detail in presenting examples, but consider EJB. Every “bean” is independently deployable, and can be considered a “component”. If two beans communicate via CORBA, then CORBA would be considered a connector.
What does it mean for the connector to be “first-class”?
First of all, something can be considered first-class only in the context of some (broadly-defined) tool. In other words, the entities that are considered first-class are a function of the tool that works with those entities. When these authors suggest defining first-class connectors, they are actually advocating the creation or use of tools specifically designed to enable manipulating connectors. (If it unnatural to manipulate connectors with the tool, then connectors would not be “first-class” entities for that tool.)
I think this will become more clear when we address the next part of your question:
Why would first-class connectors be useful?
For example, you may want to insert a tap between two components connected by a uni-directional channel. A first-class connector could facilitate this by allowing you to identify the end-points of the existing connector, create one new connector from the old connector’s source port to the tap’s input port, another new connector from the tap’s output port to the old connector’s destination port, and destroy the old connector. A tool designed to support operations like this could be said to have first-class connectors.
An Architecture-based Self-Healing System might require that connectors be first class in order to perform actions like:
- Analyze the data flowing through certain connectors, to ensure that some level of service is being met;
- Replace connections to failing components with their redundant back-ups;
- Test the load that a component can handle, by adjusting the rate of comms through the connector;
- Identify communications bottlenecks;
- Et cetera.
I haven’t read through either paper, entirely, and this is a bit outside of my wheelhouse, so take this with some caution. Still, I hope it’s helpful.