Software

AIOCJ

A choreography language for adaptive distributed systems

AIOCJ is a choreography programming language for developing adaptive systems. Distributed programs specified in AIOCJ are programmed from a global point of view and projected to singular entities that, distributed and run in parallel, enact the global behaviour. Programs written in AIOCJ are deadlock-free by construction and can adapt at runtime. A developer can specify which fragments of the global interaction can change. At runtime the projected entities can substitute (update) marked fragments with new ones provided by compliant repositories. AIOCJ programs always update in a coherent way, which preserves deadlock freedom. Since AIOCJ choreographies are projected to Jolie programs they can also make use of functions provided by external services.

Chor

The first language for choreographic programming

Chor is a new programming language for communicating systems, based on choreographies. Choreographies are global descriptions of system implementations, where the behaviour of all entities in a system is given in a single program. Choreographies enhance the quality of software, as they represent "formal blueprints" of how communicating systems should behave and offer a concise view of the message flows enacted by a system. In Chor, a choreography can then be projected (or compiled, if you like) onto a set of separate programs that can be run in a distributed system.

Choral

A (mainstream) choreographic programming language

Choral is a language for the programming of choreographies. A choreography is a multiparty protocol that defines how some roles (the proverbial Alice, Bob, etc.) should coordinate with each other to do something together. At the press of a button, the Choral compiler translates a choreography into a library for each role. Choral makes sure that the compiled libraries are compliant implementations of their source choreography, making developers more productive, and preventing them from writing incompatible implementations of communications.

Choral is currently interoperable with Java and it is compatible with Java in three ways:

  • its syntax is a direct extension of Java;
  • Choral programs can reuse Java libraries;
  • the libraries generated by Choral are in pure Java with APIs that users can control and can be used inside of Java projects directly.

HyVarRec

A reconfigurator tool for Software Product Line (SPL)

HyVarRec is a tool that allows to reconfigure an existing configuration for a given Software Product Line (SPL) when it is subject to contextual changes. It can be also used to analyze the correctness of the SPL find when it does not allow a configuration or if there are dead or false optional features. In case no configuration is possible, HyVarRec can provide also an explanation that can be later used by the SPL developers to solve the inconsistency. HyVarRec uses the SMT solver Z3 to solve the optimization problems involved in the reconfiguration and the maximization of the user preferences. HyVarRec can be deployed as a service by using the Docker container technology.

JIoT

Integrating IoT-related technologies into the Jolie language.

The JIoT project is aimed at integrating IoT-related technologies into the Jolie language. The Internet of Things (IoT) promotes the communication among heterogeneous entities, from small sensors to Cloud systems. However, this is realized using a wide range of communication media and data protocols, usually incompatible with each other. Thus, IoT systems tend to grow as homogeneous isolated platforms - usually referred as "IoT islands" -, which hardly interact. To achieve a higher degree of interoperability among disparate IoT platforms, the JIoT project investigates how abstractions suitable for service-oriented and microservice architectures can aid integrating disparate IoT islands. Jolie currently supports the main technologies from Service-Oriented Computing, such as TCP/IP, Bluetooth, and RMI at transport level, and HTTP and SOAP at application level. As first technical result of the project, we integrated in Jolie the two most adopted protocols for IoT communication, i.e., CoAP and MQTT. The integration of IoT-specific protocols into the service-oriented setting of Jolie poses some interesting challenges, the two main being i) the integration of unreliable channels (UDP/CoAP) and ii) bridging the simple request-response communication style of Jolie with the peculiarities of the Publish/Subscribe communication pattern.

JLibBig

An extensible Java library for Bigraphs and Bigraphical Reactive Systems.

Bigraphs and Bigraphical Reactive Systems are a modern, graphical calculus for the description of the syntax and semantics of systems in terms of the orthogonal notions of connectivity and locality. Since their introduction by Robin Milner, bigraphs have been succesfully applied to model complex, concurrent, context-dependent, or ubiquituous systems in a variety of fields beyond computer science like biology and databases.

Keywords: Rewriting systems

Jolie

A Service-Oriented Programming Language

Jolie is a general-purpose service-oriented programming language. It brings elegance, simplicity, and pragmatism in the development of modular, integrated, distributed, and concurrent applications. The development of the Jolie language is based on a positive loop between formal theory and practical requirements. One of the strongest values of Jolie is the freedom it gives when designing distributed solutions. Depending on the requirements and the constraints of a specific problem, a programmer can choose whether to build a basic, immediate, yet lightweight solution to integrate applications from different domains or to model the solution by exploiting the language's advanced composition primitives, forging an highly modular distributed system. Although young, the language is continuously maintained and enhanced, with the contribution of researchers from many universities (SDU, UniBO, ITU, DTU, Innopolis). Finally, Jolie programs strive for minimality, the same minimality predicated by the microservice architectural style.

SMAll

A microservice-based, federated platform for creating, publishing, and trading transportation services.

Key element of Mobility as a Service (MaaS) is that MaaS operators can aggregate solutions of multiple transport companies to deliver dynamic, transparent multi-modal travels to their users, who experience transportation as managed directly by a single operator. To enable MaaS, within the Smart Mobility for All EIT Project, we created SMAll, a platform (and its related wiki) where providers of transport solutions can trade their information as well as other services for mobility, like booking, payment, and travel assistance, on demand. SMAll includes the latests technologies in terms of provision, deployment, scaling, and maintenance of applications: microservices and containerisation. In addition, SMAll supports the creation of a federation-based MaaS market, where a SMAll instance is a hub for local (e.g., city-wide) transport operators and geographically sparse SMAll instances can federate to form a global market for MaaS. To test SMAll, we also implemented pilots within the platform, collaborating with the Department of Transportation of Regione Emilia-Romagna, Lepida S.p.A., and Foundazione Bruno Kessler.

Tquery

An in-language query framework for the Jolie language

The Tquery project is a query framework integrated in the Jolie language for the data handling/querying of Jolie trees. Tquery is based on a tree-based instantiation (language and semantics) of MQuery, a sound variant of the Aggregation Framework, the query language of the most popular document-oriented database: MongoDB. Tree-shaped documents are the main format in which data flows within modern digital systems — e.g., eHealth, the Internet-of-Things, and Edge Computing. Tquery is particularly suited to develop real-time, ephemeral scenarios, where data shall not persist in the system.

Keywords: Microservices

Zephyrus2

A configurator optimizer for distributed system.

Zephyrus2 is a tool that starting from a simple description of the software components that can be deploy, with their requirements and resources needs, it can compute what is the optimal deployment solution that satisfies all the user needs. Zephyrus2 relies on SMT or CP solvers for the exploration of the search space and provides a new declarative specification language to define the desired configuration and user preferences. It can be deployed as a service by using the Docker container technology.

sunny-cp

A Parallel Constraint Problem (CP) Portfolio Solver

sunny-cp is a parallel parallel portfolio solver that allows to solve a Constraint (Satisfaction/Optimization) Problem defined in the MiniZinc language. sunny-cp is built on top of state-of-the-art constraint solvers, including: Choco, Chuffed, G12/LazyFD, G12/FD, G12/Gurobi, G12/MIP, Gecode, HaifaCSP, JaCoP, MinisatID, OR-Tools, Picat that are used to provide a faster and better global solver. sunny-cp performed very well in the MiniZinc Challenge, the international solver competition for the evaluation of CP solvers, winning three goal medals in the editions of 2015, 2016, and 2017. sunny-cp can be deployed as a service by using the Docker container technology.