sabato 31 marzo 2012

Installing the library and some explaination about primitives of the algebra

To use the Cabac Library, we must includes all necessary dependencies. You can find all the necessaries files in this page: http://code.google.com/p/otf-connector/downloads/list. You must download two file: the latest version of Cabac Library (now 1.1) and the dependencies.zip file. Once downloaded, decompress the zip file. Now open your favourite IDE; create a new Java Project and includes as external jars all decompressed files plus the cabac library.

As we said in a previous post, the connector algebra introduces a set of 'primitives' that models basic mismatch situation. These primitives are related to the mediator pattern introduced by the Go4. We have six basic primitives (explaination extracted from Towards Connector Algebra Paper):

  1. Extra send. This first mismatch considers a component that generates a redundant message a. Such a mismatch may be resolved by introducing a consumer that swallows the superfluous message. We model this by a parameterised primitive Cons(a).
  2. Missing send. This mismatch describes the case in which a component expects a message a that is not sent by another component. A mismatch of this type may be resolved by introducing a producer that generates the required message. This may be modelled by a parameterised primitive Prod(a).
  3. Signature mismatch. There are occasions when a message to be exchanged between two components is functionally compatible yet syntactically inconsistent. In the case of Connect, the functional equivalence of the messages a and b is assumed to be specified in an ontology. Such a mismatch may be resolved by means of a translating primitive T rans(a, b) that accepts message a as input and produces message b as output.
  4. Split message mismatch. A component may expect to receive a message a as a sequence of fragments of a. If message a can be decomposed into a1 , . . . , an , then the mismatch may be resolved with a primitive Split(a, [a1 , . . . , an ]) which accepts message a as input and offers a1 , . . . , an as output in that order.
  5. Merge message mismatch. Similar to the previous case, some components expect to receive a single message a in place of a fragmented version of a. If messages a1 , . . . , an can be composed into a, then the mismatch may be resolved with a primitive M erge([a1 , . . . , an ], a) which accepts messages a1 , . . . , an as input in that order, and generates a as output.
  6. Ordering mismatch. A component can expect to receive messages in an order different from the order used by the sending component. The mismatch can be resolved by introducing an ordering primitive Order([a1 , . . . , an ], π, [a1 , . . . , an ]), where π is a permutation of {1, . . . , n}.The primitive accepts inputs from one component in the order a1 , . . . , an , and produces outputs for the other in the order aπ(1) , . . . , aπ(n) . 

The implementation of these concepts is slightly different. For example, the Trans class of the CABAC library implements signature mismatch primitive.This mismatch is semantically identical to message  translator pattern included in EIP. Apache Camel supports the Message Translator (http://camel.apache.org/message-translator.html) from the EIP patterns by using an arbitrary Processor in the routing logic: in our case, we simply use the DSL (transform() method)  into route definition. When you want to define a translator, you must includes the endpoints (through) and type interested in the communication. Later we see how create a simple mediator ;)

venerdì 30 marzo 2012

Welcome to my Blog


Hi all!!

My name is Giacomo and welcome to my first blog. I'm studing Computer Science at the University of L'Aquila and few days ago i received the bachelor degree ;) During my bachelor thesis i developed a simple library that tries to implements concept related to software connector. This implementation is based on existing theory called Connector Algebra [Marco Autili, Chris Chilton, Paola Inverardi, Marta Kwiatkowska and Massimo Tivoli, Towards a Connector Algebra, in: 4th International Symposium on Leveraging Applications (ISoLA 2010) of Formal Methods, Verification and Validation, pages 278-292, LNCS] provided  by my supervisors, Doct. Marco Autili and Doct. Massimo Tivoli and other collegues: this theory attempts to structure the concept of software connector, treating it like a mediator, by defining a set of rules that are formalised through an algebra. 

Suppose that we have two or more application that wish to exchange information. These applications most often not talk in the same way. For example the sender application sends a single big message, while the receivers expects a set of related submessage. If we don't have the intention to change these applications, we can use a mediator that sit between these application. For example in our case we need a simple splitter that manage the incoming messages and relying on a splitting logic splits the message and sends these messages to receivers.
This algebra contains a set of base item, such as a splitter, called primitives: these primitives are related to mediator pattern introduce the first time in Design Patterns: Elements of Reusable Object-Oriented Software, Addison Wesley, 1995ISBN 0-201-63361-2

During this work we noticed that the connector Algebra is strongly related  to the Enterprise Integration Pattern [http://www.eaipatterns.com/]: this algebra defines terms already introduced in this book. For example, the split term of the Connector Algebra theory has the same meaning of the Splitter introduced in EIP.

As the Eip are directly implemented in the Apache Camel project [http://camel.apache.org/], we builded a library based on this framework: the main goal is express the existing concepts present in Camel and re-expose under the structure of the algebra. The library is called CABAC (Connector Algebra Based on Apache Camel), and you can find it on googlecode: http://code.google.com/p/otf-connector/.

The main goal of this blog is show how to work with this library, and model (i hope together) some real scenario. Let me say if you're interested on this project and.. stay tuned :)