reader to mechanisms appropriate (and standardized)
for the given transport protocol, which helps to keep
the standard extensible. However, it makes the im-
plementation of working OCCI-enabled components
difficult, especially in a heterogeneous environment
where a certain level of interoperability is desirable.
This forces developers to implement complex fall-
back or discovery mechanisms, with wildly varying
levels of success.
Parts of the OCCI standard, especially the core
specification, are rather abstract and the mechanisms
described therein are difficult to implement. Develop-
ers are often left to their own devices, which leads to
further discrepancies in interpretation between imple-
mentations. One such part is the attribute model, lack-
ing detailed description and implementation guide-
lines.
Last but not least, effects or side-effects of particu-
lar operations or actions defined in various extensions
of the OCCI standard often have vague descriptions.
This makes aligning the behavior of implementations
across multiple platforms very difficult. A unified be-
havior is a strong requirement for the user.
2.2 The jOCCI Framework
The jOCCI framework is a set of Java libraries im-
plementing the OCCI standard. jOCCI currently con-
sists of two client-side components, jOCCI-core and
jOCCI-api, which together create a communication
layer for OCCI clients and servers alike (Kimle et al.,
2015).
jOCCI-core covers basic OCCI class hierarchy
from both OCCI Core and OCCI Infrastructure and
relations between them. Furthermore, jOCCI-core
provides methods for parsing and rendering plain-text
representations of OCCI classes. This functionality
is crucial for transporting data between the client and
the remote server via HTTP messages. In addition,
jOCCI-core also validates any OCCI request with re-
spect to the declared OCCI model. This helps identify
requests that would be rejected by server, even before
they are sent.
jOCCI-api is a Java library implementing the
transport layer functionality for rendered OCCI ob-
jects and queries. It is built on top of jOCCI-core and
currently provides only HTTP transport functionality
with a set of authentication methods and basic inter-
faces to simplify client-server communication.
The jOCCI library stack is currently used in the
jsaga-adaptor-jocci (Rocca, 2016) project de-
veloped primarily for the Catania Science Gateway
Framework (Fargetta, 2016). The aim of this project
is to develop JSAGA (Reynaud and Schwarz, 2016)
adaptor which will expose an interface for submitting
grid jobs into automatically provisioned virtual ma-
chines in OCCI-compliant clouds. Another project
utilizing jOCCI as the cloud-facing backend is the
Karamel (Hakimzadeh, 2016) orchestration frame-
work, heavily used in the bio-informatics commu-
nity (Bessani et al., 2015). The so-called OCCI
“launcher” adds support for the provisioning of on-
demand virtual machines in OCCI-compliant clouds.
The Karamel OCCI launcher is currently being devel-
oped and tested at CESNET.
As mentioned before, jOCCI is written in the Java
programming language. This language was selected
because of its popularity and demand by the commu-
nity. Since Java is a strongly typed language, some of
the concepts of the OCCI standard (e.g., mixins) were
somewhat challenging to implement. Nevertheless,
jOCCI’s API was designed to meet the requirements
of the OCCI standard whilst keeping Java’s best prac-
tices in mind. For details, see Figure 1.
jOCCI currently implements version 1.1 of the
OCCI standard. During the development of the li-
braries the authors encountered multiple caveats in
this version of the standard. One of the problems is
that the specification does not clearly state which at-
tributes are internal and which should be available in
rendering. Another problem comes from the plain text
rendering, which is lacking the expressive power of
other standard formats such as XML or JSON, mak-
ing it difficult to render complex data structures.
Both jOCCI-core and jOCCI-api are distributed
via Maven Central Repository utilizing well-known
dependency management practices common in the
Java developers community.
2.3 OpenStack OCCI Interface
ooi (L
´
opez Garc
´
ıa et al., 2016) is an implementation
of OCCI for the OpenStack Compute project, written
entirely in Python so as to make exhaustive usage and
profit from the already available OpenStack modules,
such as authentication. ooi was designed to be easily
integrated with the OpenStack core components, but
with the aim of being independent from any Open-
Stack version or release.
The main motivation for this recent development
stems from the need to overcome key architectural de-
sign issues found in the previous OCCI implemen-
tation, OCCI-OS (Metsch et al., 2016), namely the
fact of using the internal OpenStack APIs directly.
In contrast with the public APIs, the private ones are
not versioned and are subject to change at any time
in the development cycle, even between minor re-
leases. Instead, ooi interacts with OpenStack lever-
Evolution of the Open Cloud Computing Interface
341