Int. J. Communications, Network and System Sciences, 2012, 5, 579-592
http://dx.doi.org/10.4236/ijcns.2012.529068 Published Online September 2012 (http://www.SciRP.org/journal/ijcns)
Unified Mogramming with Var-Oriented Modeling and
Exertion-Oriented Programming Languages
Michael Sobolewski1,2, Raymond Kolonay1
1Air Force Research Laboratory, WPAFB, USA
2Polish Japanese Institute of IT, Warsaw, Poland
Email: sobol@sorcersoft.org
Received June 26, 2012; revised July 21, 2012; accepted August 2, 2012
ABSTRACT
The Service ORiented Computing EnviRonment (SORCER) targets service abstractions for transdisciplinary complex-
ity with support for heterogeneous service-oriented (SO) computing. SORCER’s models are expressed in a top-down
Var-oriented Modeling Language (VML) unified with programs in a bottoms-up Exertion-Oriented Language (EOL). In
this paper the introduction to mogramming (modeling and programing), which uses both languages, is described. First,
the emphasis is on modeling with service variables that allow for computational fidelity within VML. Then, seven types
of service providers, both local and distributed, are described to form collaborative federations described in EOL. Fi-
nally, the unified hybrid of SO modeling and SO programming is presented. Fourteen simple mogramming examples
illustrate the syntax and usage of both VML and EOL.
Keywords: Metacomputing; Service-Oriented Mogramming; Var-Oriented-Modeling; Exertion-Oriented Programming;
SOA; SORCER
1. Introduction
A transdisciplinary computational model requires exten-
sive computational resources to study the behavior of a
complex system by computer simulation. The large sys-
tem under study that consists of thousands or millions of
variables is often a complex nonlinear system for which
simple, intuitive analytical solutions are not readily
available. Usually experimentation with the model is
done by adjusting the parameters of the system in the
computer. The experimentation, for example aerospace
models with multi-fidelity, involves the best of the breed
applications, tools, and utilities considered as heteroge-
neous services of the model. The modeling services are
used in local/distributed concurrent federations to calcu-
late and/or optimize the model across multiple disciplines
fusing their domain-specific services running on laptops,
workstations, clusters, and supercomputers.
Services are autonomous (acting independently), local
or distributed units of functionality. Elementary services
have no calls to each other embedded in them. Com-
pound services are compositions of elementary and other
compound services. Each service implements multiple
actions of a cohesive (well integrated) service type, usu-
ally defined by an interface type. A service provider can
implement multiple service types, and thus can provide
multiple services. Its service type and operation com-
plemented by its QoS parameters (service signature) are
used to specify functionality of a provider. Instances of a
service provider are equivalent units of functionality
identified by the same signature.
In transdisciplinary computing systems each local or
distributed service provider in the collaborative federa-
tion performs its services in an orchestrated workflow.
Once the collaboration is complete, the federation dis-
solves and the providers disperse and seek other federa-
tions to join. The approach is service centric in which a
service provider is defined as an independent self-sus-
taining entity performing a specific local or network ac-
tivity. These service providers have to be managed by a
relevant service-centric operating system with commands
for executing interactions of providers in dynamic virtual
federations [1].
The reality at present, however, is that metacomputing
environments [2] are still very difficult for most users to
access, and that detailed and low-level programming
must be carried out by the user through command line
and script execution to carefully tailor static interactions
on each end to the distributed resources on which they
will run, or for the data structure that they will access.
This produces frustration on the part of the user, delays
in the adoption of service-oriented (SO) techniques, and
a multiplicity of specialized “server/cluster/grid/cloud-
aware” tools [3-5] that are not, in fact, aware of each
C
opyright © 2012 SciRes. IJCNS
M. SOBOLEWSKI, R. KOLONAY
580
other which defeats the basic purpose of the metacom-
puting.
Both computing an d metacomputing platforms that al-
low software to run on the computer require a processor,
operating system, and programming environment with
related runtime libraries and user agents. We consider a
SO model or program (mogram) as the process expres-
sion of hierarchically organized services executed by an
aggregation of service providers—the virtual SO proc-
essor. Its SO Operating System (SOOS) makes decisions
about where, when, and how to run these service provid-
ers. The specification of the service collaboration is a SO
mogram that manipulates other executable codes (appli-
cations, tools, and utilities) locally or remotely as its data.
Three types of mograms are considered in the paper:
var-models, exertions and hybrid mograms that use both
of them.
Instead of moving executable files around the com-
puter network we can autonomically provision [6,7] the
corresponding computational components (executable
codes) as uniform services (metainstructions) of the vir-
tual SO processor. Now we can invoke a SO mogram as
a command of the SOOS that exerts its dynamic federa-
tions of service providers and related resources, and en-
ables the collaboration of the required service providers
according to the SO moogram definition with its own
data and control strategy.
One of the first SO platforms developed under the
sponsorship of the National Institute for Standards and
Technology (NIST) was the Federated Intelligent Prod-
uct Environment (FIPER) [8]. The goal of FIPER was to
form a federation of distributed service objects that pro-
vide engineering data, applications, and tools on a net-
work. A highly flexible software architecture had been
developed for transdisciplinary computing (1999-2003),
in which engineering tools like computer-aided design
(CAD), computer-aided engineering (CAE), product data
management (PDM), optimization, cost modeling, etc.,
act as both service providers and service requestors.
The SORCER environment [5,6,9-11] builds on the
top of FIPER to introduce a SOOS with all system ser-
vices necessary, including service management (rendez-
vous services), a federated file system, and autonomic
resource management, to support service-object oriented
programming. It provides a SOOS for complex network-
centric applications that require multiple solutions across
multiple disciplines combined at runtime into a transdis-
ciplinary collaboration of service providers in the global
network. The SORCER environment adds two entirely
new layers of abstraction to the practice of SO comput-
ing—SO models expressed in a Var-oriented Modeling
Language (VML) in concert with SO programs expressed
in an Exertion-Oriented Language (EOL) verified and
validated in projects at the General Electric Global Re-
search Center, GE Aviation, Air Force Research Lab,
SORCER Lab at TTU [12].
The remainder of this paper is organized as follows
Section 2 describes briefly var-oriented modeling; Sec-
tion 3 describes exertion-oriented programming; Section
4 describes var-oriented programming and var-oriented
modeling for design optimization; Section 5 introduces
the SORCER SOOS; finally Section 6 concludes with
final remarks and comments. The basic concepts of ser-
vice-oriented mogramming [13] (modeling and pro-
gramming) are illustrated with simple and easy to follow
examples.
2. Var-Oriented Modeling
A computation is a relation between a set of inputs and a
set of potential outputs. There are many ways to describe
or represent a computation and a composition of them.
Two types of computations are considered in this paper:
var-oriented and exertion-oriented. A service is the work
performed in which a service provider exerts acquired
abilities to execute a computation. A service variable,
called a var and an exertion are expressions of a service
in the Var-Oriented Language (VOL) and the Var-Ori-
ented Modelin g La ng u age (VML), respectively.
The first one is drawn primarily from the semantics of
a variable the second one from the semantics of a routine.
Either one can be mixed with another depending on the
direction of the problem being solved: top down or bot-
tom up. The top down approach usually starts with var-
oriented modeling in the beginning focused on relation-
ships of vars in the model with no need to associate them
to services. Later the var-model may incorporate relevant
services (evaluators) including exertions. In var-oriented
modeling three types of models can be defined (response,
parametric, and optimization) and in exertion-oriented
programming seven different types of elementary exer-
tions (tasks) and two types of compositional exertions
(jobs) are defined.
The fundamental principle of functional programming
is that a computation can be realized by composing func-
tions. Functional programming languages consider func-
tions to be data, avoid states, and mutable values in the
evaluation process in contrast to the imperative pro-
gramming style, which emphasizes changes in state val-
ues. Thus, one can write a function that takes other func-
tions as parameters, returning yet another function. Ex-
perience suggests that functional programs are more ro-
bust and easier to test than imperative ones. Not all op-
erations are mathematical functions. In nonfunctional
programming languages, “functions” are subroutines that
return values while in a mathematical sense a function is
a unique mapping from input values to output values. In
SORCER a var allows one to use functions, subroutines,
Copyright © 2012 SciRes. IJCNS
M. SOBOLEWSKI, R. KOLONAY 581
or coroutines in the same way. A value of a var can be
associated with a mathematical function, subroutine, co-
routine, object, or any local or distributed data. The func-
tional composition notation has been used for the Var-
Oriented Language (VOL) and the Var-Oriented Model-
ing Language (VML) that are usually complemented
with the Java object-oriented syntax. The concept of vars
and exertions as expression of services combines the
three languages VOL, VML, and EOL into a uniform SO
programming model.
2.1. Var-Orientd Programing (VOP)
In every computing process variables represent data
elements and the number of variables increases with the
increased complexity of problems being solved. The va-
lue of a computing variable is not necessarily part of an
equation or formula as in mathematics. In computing, a
variable may be employed in a repetitive process: as-
signed a value in one place, then used elsewhere, then
reassigned a new value and used again in the same way.
Handling large sets of interconnected variables for trans-
disciplinary computing requires adequate programming
methodologies.
A service variable (var) is a structure defined by the
triplet <value, {evaluator}, {filter}>. VOP is a pro-
gramming paradigm that uses service variables to design
var-oriented multifidelity compositions. An evaluator-
filter pair is called a var fidelity. It is based on dataflow
principles where changing the value of any argument var
should automatically force recalculation of the var’s
value. VOP promotes values defined by an evaluator-
filter pairs in the var and its dependency chain of argu-
ment vars to become the main concept behind any proc-
essing.
The semantics of a variable depends on the process
expression formalism [14]:
1) A variable in mathematics is a symbol that repre-
sents a quantity in a mathematical expression.
2) A variable in programming is a symbolic name as-
sociated with a value.
3) A variable in object-oriented programming is a set
of an object’s attributes accessible via operations called
getters.
4) A service variable is a triplet: <value, {evaluator},
{filter}>, where:
a) a filter is a getter operation;
an evaluator is a service with the argument vars that de-
fine the var dependency chain; and
b) a value is a quantity filtered out from the output of
the current evaluator; the value is invalid when the cur-
rent evaluator or its filter is changed, current evaluator’s
arguments change, or the value is undefined.
VOP is the programming paradigm that treats any
computation as the VFE triplet: value, filter (pipeline of
filters), and evaluator as illustrated in Figure 1. Evalua-
tors and filters can be executed locally or remotely. An
evaluator may use a differentiator to calculate the rates at
which the var quantities change with respect to the ar-
gument vars. Multiple associations of an evaluator-filter
pair can be used with the same var allowing var’s fidelity.
The VFE paradigm emphasizes the usage of multiple
pairs of evaluator-filter (called var fidelities) to define
the value of var. The semantics of the value, whether the
var represents a mathematical function, subroutine, co-
routine, or data, depends on the evaluator and filter cur-
rently used by the var.
A service in VOP is the work performed by a var’s
evaluator-filter pair. Evaluators and filters of the var de-
fine:
1) the var arguments and their dependency chain
(composition);
2) multiple processing services (output multifidelity);
3) multiple differentiation services (differentiation mul-
tifidelity);
4) evaluators can execute any type of local or distrib-
uted processing (connectivity and net heterogeneity); and
5) filters provide postprocessing (interoperability).
Thus, in the same process various forms of services
(local and distributed) can be mixed within the same
uniform process expression. Also, the fidelity of vars can
be changed at runtime as it depends on the currently se-
lected evaluator-filter pair.
The variable evaluation strategy is defined as follows:
the var value is returned if it is valid, otherwise the cur-
rent evaluator determines the variable’s raw value (not
processed or subjected to analysis), and the current pipe-
line of filters returns the output value from the evaluator
result and makes that var’s value valid. The evaluator’s
Figure 1. The var structure: <value, {evaluator}, {filter}>.
Vars are indicated in blue color. The basic var y1 , z = y1 (x1,
x2, x3), depends on its argument vars and derivative vars in
differentiators.
Copyright © 2012 SciRes. IJCNS
M. SOBOLEWSKI, R. KOLONAY
582
raw value may depend on other var arguments and those
arguments in turn can depend on other var arguments and
so on. This var dependency chaining provides the inte-
gration framework for all possible kinds of computations
represented by various types of evaluators including ex-
ertions described in Section 3. To illustrate the basic
VOL syntax a few simple examples will be given. First,
using VOL the output var y is created with four argument
vars x1, x2, x3, and x4 and then is evaluated.
Example 1. “Hello Arithmetic” y = (x1 * x2) (x3 +
x4)
The argument vars:
Var x1 = var ("x1", 10.0); Var x2 = var("x2", 50.0),
Var x3 = var ("x3", 20.0), Var x4 = var ("x4", 80.0);
The output var y with an expression evaluator is de-
fined as follows:
Var y = var("y",
expr("(x1 * x2) - (x3 + x4)",
args(x1, x2, x3, x4)));
Evaluate (value) and test (assertEquals) the var y:
assertEquals (value(y), 400.0);
A var with its referencing environment (substitution)
for the free argument vars, evaluators, and filters is called
a var closure. A variable is a free if its value is not de-
fined.
The var y with free x1, x2, x3, and x4 can be defined in
VOL as follows:
Example 2. Closing y over x1, x2, x3, and x4
Var y = var("y",
expr("(x1 * x2) - (x3 + x4)",
args("x1", "x2", "x3", "x4")));
Closing y over x1, x2, x3, and x4 can be done as fol-
lows:
Object val = value(y,
entry("x1", 10.0), entry("x2", 50.0),
entry("x3", 20.0), entry("x4", 80.0));
assertEquals(val, 400.0);
The example below illustrates two var closures of z
over x1, x2 and one of its evaluators.
Example 3. Closing over var fidelities
Var z = var("z", evaluators(
expr("e1", "x1 * x2", args("x1", "x2")),
expr("e2", "x1 * x2 + 0.1", args("x1", "x2"))));
assertEquals(value(z,
entry("x1", 10.0), entry("x2", 50.0), eFi("e1")), 500.0)
assertEquals(value(z,
entry("x1",10.0), entry("x2",50.0), eFi("e2")), 500.1);
where the operator eFi stands for evaluator fidelity; eFi
selects the evaluator by a given name.
2.2. Var-Orientd Modeling (VOM)
Var-Oriented Modeling is a modeling paradigm using
vars in a specific way to define heterogeneous var-ori-
ented models, in particular large-scale multidisciplinary
models including response, parametric, and optimization
models. The programming style of VOM is declarative;
models describe the desired results of the output vars,
without explicitly listing instructions or steps that need to
be carried out to achieve the results. VOM focuses on
how vars connect (compose) in the scope of the model,
unlike imperative programming, which focuses on how
evaluators calculate. VOM represents models as a series
of interdependent var connections, with the evaluators/
filters between the connections being of secondary im-
portance.
A var-oriented model or simply var-model is an ag-
gregation of related vars. A var-model defines the lexical
scope for var unique names in the model. Three types of
models: response, parametric, and optimization have
been studied to date [15,16]. These models are declared
in VML using the functional composition syntax with
VOL and possibly with EOL and the Java API to config-
ure the vars.
The in put var is typically the variable representing the
value being manipulated or changed and the output var is
the observed result of the input vars being manipulated.
If there is a relation specifying output in terms of given
inputs, then output is known as an “output var” and the
var’s inputs are “argument vars”. Argument vars can be
either output or input vars.
Returning to the “Hello Arithmetic” example used to
illustrate SO concepts in this paper, we will define a
function composition subtract(multiply(x1, x2), add(x3,
x4) instead of subtract(x1, x2, x3, x4) defined as var y in
Example 1. Thus, we are decomposing y(x1, x2, x3, x4)
to f3(f4(x1, x2), f5(x3, x4)). In reality, the arithmetic
functions corresponding to operators: multiply (f4), add
(f5), and subtract (f3), can be replaced by any type of
domain-specific services.
Example 4. “Hello Arithmetic” Model
VarModel vm = model("Hello Arithmetic",
inputs(
var("x1"), var("x2"),
var("x3", 20.0), var("x4", 80.0)),
outputs(
var("f4", expression("x1 * x2",
args( "x1", "x2"))),
var("f5", expression("x3 + x4",
args("x3", "x4"))),
var("f3", expression("f4 - f5",
args("f4", "f5")))));
Take into account that two output vars f4 and f5 are
free arguments with respect to f3, and two input vars x1
and x2 are free arguments with respect to f4. Closing the
var f3 in the model vm over x1, x2, and subsequently
over f4 and f5 can be stated as follows:
assertEquals(value(var(put(vm,
Copyright © 2012 SciRes. IJCNS
M. SOBOLEWSKI, R. KOLONAY 583
entry("x1", 10.0), entry("x2", 50.0)), "f3"), 400.0);
where the operator put makes a substitution in the model
vm for given entries and returns the initialized model.
The modularity of the VFE framework, composition of
argument vars, reuse of evaluators and filters in defining
var-models is the key feature of VOM. The same evalua-
tor with different filters can be associated with many vars
in the same var-model. VOM integrates var-oriented
modeling with other types of computing via various
types of evaluators. In particular, evaluators in var-mod-
els can be associated with commands (executables), mes-
sages (objects), and services (exertions).
3. Exertion-Oriented Programming
In language engineering—the art of creating languages
—a metamodel [13] is a model to specify a language.
EOL is a metamodel to model connectionist process ex-
pressions that model behavioral phenomena as the emer-
gent processes of interconnected federations of service
providers. The central exertion principle is that a compu-
tation can be expressed and actualized [14] by the inter-
connected federation of simple, often uniform, and effi-
cient service providers that compete with one another to
be exerted for their services in the dynamically created
federation. Each service provider implements multiple
actions of a cohesive (well integrated) service type, usu-
ally defined by an interface type. A service provider im-
plementing multiple service type provides multiple ser-
vices. Its service type complemented by its QoS parame-
ters can identify functionality of a provider. In EOL an
exertion can be used as a closure over free variables in
the exertion’s data and control contexts.
Exertion-oriented programming (EOP) is a SO pro-
gramming paradigm using service providers and service
commands. Service commands are executed by the net-
work shell nsh of the SORCER Operating System (SOS).
In particular, the shell interprets exertion scripts called
netlets. There is a helper Java class called ExertShell that
has a few methods for running exertions and vars with
the Java runtime. In SOS, an exertion is the expression of
a structure that consists of a data context, a control con-
text, and component exertions to design hybrid (distrib-
uted/local) service collaborations. Conceptually a control
context comprises of a control strategy and multiple ser-
vice signatures, which define the service invocations on
federated providers. The signature usually includes the
service type, operation within the service type, and ex-
pected quality of service (QoS) [15]. An exertion’s sig-
natures identify the required providers, but the control
strategy for the SOS defines how and when the signature
operations are applied to the data context in the federated
collaboration. Please note that the service type is the
classifier of service providers with respect to their be-
havior (interface), but the signature is the classifier of
service provider instances with respect to the invocation
and its service quality defined by its QoS.
From the SOS point of view a netlet is the interpreted
exertion (script) but from EOL point o view the exertion
is an expression of a process that specifies for the SOS
how service collaboration is actualized by a collection of
providers playing specific roles used in a particular way
[17]. The collaboration specifies a collection of cooper-
ating providers identified by the exertion’s signatures.
Exertions encapsulate explicitly data, operations, and a
control strategy for the collaboration. The SOS dynami-
cally binds the signatures to corresponding service pro-
viders—members of the exerted federation. The exerted
members in the federation collaborate transparently ac-
cording to the exertion’s control strategy managed by the
SOS. The SOS invocation model is based on the Triple
Command Pattern [10] that defines the federated method
invocation (FMI).
Herein the service-oriented computing philosophy de-
fines an exertion as a mapping with the property that a
single service input context is related to exactly one out-
put context. A context is a dictionary composed of
path-value pairs—associations—such that each path re-
ferring to its value appears at most once in the context.
Everything, which has an independent existence, is ex-
pressed in EOL as an association, and relationships be-
tween them are modeled as data contexts. Additional
attributes with a context path can be specified giving
more specific meaning to the value referred by its path.
The context attributes form a taxonomic tree, similar to
the relationship between directories in file systems. Paths
in the taxonomic tree are names of implicit exertion’s
arguments (context free variables). Each exertion has a
single data context as the explicit argument. Paths of the
data context form implicit domain specific inputs and
outputs used by services providers. Context input asso-
ciations are used by the providers to compute output as-
sociations that are returned in the output context.
The context mapping is defined by an exertion signa-
ture that includes at least the name of operation (selector)
and the service type defining the service provider. Addi-
tionally, the signature may also specify the exertion’s
return path, the type of returned value, and QoS. Seven
signature types are distinguished and are created with the
sig operator as follows:
1) sig(<selector>, <code>) command sig
2) sig(<selector>, Class|Object) object sig
3) sig(<selector>, <service type>) net sig
4) sig(Evaluation) evaluator sig
5) sig([<selector>,] Filter) filter sig
6) sig(Fidelity, Var) var sig
7) sig(<selector>, Modeling) model sig
where keywords with the first letter capitalized are Java
Copyright © 2012 SciRes. IJCNS
M. SOBOLEWSKI, R. KOLONAY
584
interfaces or classes.
A selector of a signature may take the expanded form
to indicate its data context scope by appending a context
prefix after the proper selector with the preceding #
character. The part of the selector after the # character is
a prefix of context paths specifying the subset of input
and output paths for the prefixed signature.
The operator provider returns a service provider de-
fined by a service signature:
provider(Signature):Object
An exertion specifies the collection of service provid-
ers including dynamically federated providers in the
network. Its primary service provider is defined by the
primary signature marked by the SRV type. An exertion
can be used as a closure with its context containing free
variables (for example free paths). An upvalue is a path
that has been bound (closed over) with an exertion. The
exertion is said to “close over” its upvalues by exerting
service providers. The exertion’s context binds the free
paths to the corresponding paths in a scope at the time
the exertion is executed, additionally extending their life-
time to at least as long as the lifetime of the exertion it-
self. When the exertion is entered at a later time, possibly
from a different scope, the exertion is evaluated with its
free paths referring to the ones captured by the closure.
There are two types of exertions: service exertions and
control flow exertions. Two types of service exertions are
distinguished: tasks and jobs. The srv operator defines
service exertions as follows:
srv(<name> {, <signature> } , <context>
{, <exertion> }):T <T extends Exertion>
For convenience tasks and jobs are also defined with
the task and job operators as follows:
task(<name>, { <signature> }, <context>):Task
job(<name> [, <signature> ], <context>, <exertion>
{, <exertion> }):Job
A job is an exertion with a single input context and a
nested composition of component exertions each with its
own input context. Tasks do not have component exer-
tions but may have multiple signatures, unlike jobs that
have at least one component exertion and a signature is
optional. There are eight interaction operators defining
control flow exertions. An interaction operator could be
one of: alt (alternatives), opt (option), loop (iteration),
break, par (parallel), seq (sequential), pull (asynchronous
execution), push (synchronous). The interaction opera-
tors opt, alt, loop, break have similar control flow se-
mantics as those defined in UML sequence diagrams for
combined fragments. A job represents a mapping that
describes how input associations of job’s context and
component contexts relate, or interact, with output asso-
ciations of those contexts.
A task is an exertion with a single input context as its
parameter and returns the calculated output context. It
may be defined with a single signature or multiple sig-
natures (batch). A batch task represents a concatenation
of tasks sequentially processing the same-shared context.
Processing the context is defined by signatures of PRE
type executed first, then the only one SRV signature, and
at the end POST signatures if any. The provider defined
by the task’s SRV signature manages the coordination of
exerting the other batch providers. When multiple signa-
tures exist with no type specified, by default all are of the
PRE type except the last one being of the SRV type. The
task mapping can represent a function, a collection of
functions, or relations actualized by collaborating service
providers determined by the task signatures.
There are two ways to execute exertions, by exerting
the service providers or evaluating the exertion. Exerted
service federation returns the exertion with output data
context and execution trace available from collaborating
providers:
exert(Exertion {, entry(path, Object }) : Exertion
where entries define a substitution for the exertion clo-
sure.
Alternatively, an exertion when evaluated returns its
output context or result corresponding to the specified
result path either in the exertion’s SRV signature or in its
data context:
value(Exertion {, entry(path, Object) } ) : Object
The following getters return an exertion’s signature
and context:
sig(Exertion):Signature
context(Exertion):Context
A context of the exertion or its component exertion is
returned by the context operator:
context(Exertion [, path ] )
where path specifies the component exertion. The value
at the context path or subcontext is returned by the get
operator:
get(Context, path {, path}) :Object
or assigned with the put operator:
put(Context {, entry(path, Object) }):Context
As an example consider the following object and net
tasks.
Example 5 Exertion net task
task("net- multiply ",
sig("multiply", Multiplier.class, result("result/y")),
context(
in("arg/x1", 10.0),
in("arg/x2", 50.0));
Example 6. Exertion object task
task("obj-multiply",
sig("multiply", MultiplierImpl.class,
result("result/y")),
context(
in("arg/x1", 10.0),
in("arg/x2", 50.0));
Copyright © 2012 SciRes. IJCNS
M. SOBOLEWSKI, R. KOLONAY 585
Replacing the service type in the task signature from
interface Multiplier.class (Example 5) to its implementa-
tion MultiplierImpl.class (Example 6) changes task exe-
cution from local to remote. For component services, free
signatures in exertion closures allow for reconfiguration
of networking (local/distributed) at runtime. As an addi-
tional example consider another version of “Hello Arith-
metic” with multiple signatures.
Example 7. “Hello Arithmetic” batch task
task("Hello Arithmetic",
sig("multiply", Multiplier.class,
result("subtract/arg/x1")),
sig("add", Adder.class,
result("subtract/arg/x2", Direction.IN)),
sig("subtract", Subtractor.class,
result("result/y", Direction.IN)),
context(in("multiply/arg/x1", 10.0),
in("multiply/arg/x2", 50.0),
in("add/arg/x1", 20.0), in("add/arg/x2", 80.0)));
In the above batch task its common context defines a
scope for each signature by the path prefix being its se-
lector name. This way the service providers can select
their inputs or outputs paths in the shared context ac-
cordingly. That restriction does not apply to an exertion
job as its component exertions have their own data con-
texts.
An exertion can be described through its relationship
with other exertions. Another important operation de-
fined on exertions is exertion composition, where the
output from one exertion becomes the input to another
exertion. By analogy with our arithmetic subtraction
composition, it is possible to define a compound exertion.
The “Hello Arithmetic” job by analogy to the “Hello
Arithmetic” batch task can be described in EOL by three
services:
f3 = x5 – x6; f4 = x1 * x2; and f5 = x3 + x4
that implement three interfaces: Subtractor, Multiplier,
and Adder, respectively. We want to program a distrib-
uted service that mimics a function composition:
f3(f4(x1, x2), f5(x3, x4))
and calculate: f3(f4(10.0, 50.0), f5(20.0, 80.0))
Example 8. “Hello Arithmetic” exertion net job
Task f4 = task("f4", sig("multiply", Multiplier.class),
context("multiply",
in("super/arg/x1"), in("arg/x2", 50.0),
out("result/y")));
Task f5 = task("f5", sig("add", Adder.class),
context("add", in("arg/x3", 20.0), in("arg/x4", 80.0),
out("result/y")));
Task f3 = task("f3", sig("subtract", Subtractor.class),
context("subtract", in("arg/x5"), in("arg/x6"),
out("result/y")));
Job f1 = job("f1",
context(in("arg/x1", 10.0), result("f3/result/y")),
job("f2", t4, t5,
strategy(Flow.PARALLEL, Access.PULL) ),
t3,
pipe(out(f3, "result/y"), in(f5, "arg/x5")),
pipe(out(f4, "result/y"), in(f5, "arg/x6")));
assertEquals(get(exert(f1), "f1/f3/result/y"), 400.0);
Above, five exertions are declared, three tasks f4, f5,
and f3 and two jobs: f1 and f2. A few EOL operators are
used in the program to define services: sig defines the
service operation by its name in the requested service
type, e.g., the operation “subtract” defined by the Java
interface Subtractor.class in f3; operators in, out specify
service input and output parameters by paths in the data
context. The expressions that start with the operator task
or job are exertions. Jobs f1 and f2 specify service com-
positions and define its control strategy expressed by the
strategy operator. Service jobs define virtual services
created from other services. Tasks are elementary exer-
tions and jobs are compound exertions in exertion-ori-
ented programming.
The task f4 requests to multiply its arguments arg/x1
and arg/x2 by the service Multiplier.class. The value of
arg/x1 comes from the data context of its parent job j1 as
indicated by the prefix super in the path super/arg/x1.
The task f5 requests to add its arguments arg/x1 and
arg/x2 by the service Adder.class. The task f3 requests to
subtract arg/x2 from arg/x1 by the service Subtractor.
class where input values are not yet defined. The job f2
requests execution of both f4 and f5 with its control
strategy strategy(Flow.PAR, Access.PULL)). This means
that the component exrtions f4 and f5 of f2 are executed
in parallel and the corresponding service providers will
not be accessed directly by the SOS. In this case the cor-
responding service providers will process their tasks via
the SORCER shared exertion space (PULL) when they are
available to do so [17]. The default control strategy is
sequential (SEQ) execution with PUSH access, which is
applied to job f2. The job f1, executes the nested job f2
and then via data pipes (defined with the pipe operator in
f1) passes the results of tasks f4 and f5 on to task f3 for
arg/x1 and arg/x2 correspondingly. The last statement in
the above program exerts the collaboration exert(f1).
Exerting means executing the service collaboration and
returning the exertion with the processed contexts of all
component exertions along with operational details like
execution states, errors, exceptions, etc. Then the get
operator returns the value of the service collaboration f1
at the path f1/f3/result/y, which selects the value 400.0
from the context of executed task f3 at the path result/y.
The invocation exert(f1), creates at runtime a dynamic
federation of required collaborating services by SOS with
no network configuration. This type of process is referred
to as “federated”.
Please note that the program above defines a function
Copyright © 2012 SciRes. IJCNS
M. SOBOLEWSKI, R. KOLONAY
586
composition f3:
f3(f4(x1, x2), f5(x3, x4))
as a service composition f1:
f1(f2(f4(x1, x2), f5(x1, x2)), f3(x4, x5))
with two jobs f1 and f2 that are implicit in the function
composition f3 since the output from one function be-
comes the input to another function directly. That’s not
the case in the exertion composition since each exertion
has a single explicit argument of the Context type, thus
two implicit free paths of the task f3, arg/x4 and arg/x5,
have to be closed over pipes by the job f1 handling f3 and
before handling the job f2 with two task f4 and f5 in par-
allel. On the one hand, the job composition allows speci-
fying the control strategy for executing component exer-
tions. For example, the job f2 is run in parallel and pro-
viders pull the component exertion from the network
when they are available at their own pace (asynchronous
execution). On the other hand, the job composition al-
lows for simplicity and flexible data integration by hid-
ing details of arguments (always one exertion argument
with free context paths—hidden arguments) and data
flow between component exertions over context pipes.
Since the service composition is explicit and the execu-
tion control strategy along with its state is embedded in
service exertions they can be rerun from the last state if
they have been interrupted.
So far we have analyzed service-orientation models
and exertions. Let’s replace the task f3 in Example 8 with
the var task to get a hybrid EOL/VML net job below.
Example 9. Hybrid “Hello Arithmetic” job
Task f4 = task("f4", sig("multiply", Multiplier.class),
context("multiply",
in("super/arg/x1"), in("arg/x2", 50.0),
result ("result/y")));
Task f5 = task("f5", sig("add", Adder.class),
context("add", in("arg/x3", 20.0), in("arg/x4", 80.0),
result ("result/y")));
Task f3 = task("f3", sig(var("vf3",
expression("vf3-e", "x5 - x26", vars("x5", "x6"))),
result(path("result/y"));
Job f1 = job("f1",
context(in("arg/x1", 10.0), result("f3/result/y")),
job("f2", t4, t5,
strategy(Flow.PARALLEL, Access.PULL) ),
t3,
pipe(out(f3, "result/y"), in(f5, "arg/x5")),
pipe(out(f4, "result/y"), in(f5, "arg/x6")));
assertEquals(get(exert(f1), "f1/f3/result/y"), 400.0);
Now, consider the “Hello Arithmetic” from Example 4
with var f5 as the hybrid of var modeling and exertion
programming with a net task instead of an expression
evaluator.
Example 10. Hybrid “Hello Arithmetic” model
VarModel vm = model("Hybrid Hello Arithmetic",
inputs(
var("x1"), var("x2"), var("x3", 20.0), var("x4”)),
outputs(
var("f4", expression("x1 * x2",
args(vars("x1", "x2")))),
var("f5", task("t5",
sig("add", Adder.class),
context("add",
in("arg/x3", var("x3")),
in("arg/x4", var("x4")), result("result/y")))),
var("f1", expression("f4 - f5",
args(vars("f4", "f5"))))));
Note that the same vars appear in the exertion task t5
and in the model as well. Evaluate and test the var f1 in
the model vm over x1, x2, and x4:
assertEquals(value(var(put(vm,
entry("x1", 10.0), entry("x2", 50.0), entry("x4", 80.0),
"f1")), 400.0);
Three forms of EOP have been developed: Exertion-
oriented Java API, interactive graphical, and EOL textual
programming. The exertion-oriented Java API is pre-
sented in [8,9] and the graphical interactive exertion-
oriented programming is presented in [18]. Details re-
garding textual EOP along with two examples of simple
EO programs can be found in [5,15].
3.1. How to Create an Application Service
Provider?
To complete the “Hello Arithmetic” job declared in Ex-
ample 8, let’s implement one of the arithmetic services,
for example Adder that can be used by the SOS as ex-
pected. A plain old Java object (POJO) becomes a
SORCER service provider, when injected into a standard
SORCER service container called ServiceTasker. Such an
object, called a service bean, implements its service type
(Java interface that does not have to be Remote), with
the following characteristics:
1) Defines the service operations you'd like to call re-
motely;
2) The single parameter and returned value of each
operation is of the type sorcer.service.Context;
3) Each method must declare RemoteException in its
throws clause. The method can also declare application-
specific exceptions; and
4) The class implementing the interface and local ob-
jects must be serializable.
The interface for the Adder bean can be defined as
follows:
interface Adder {
Context add(Context context)
throws RemoteException;
}
The Adder interface implementation:
Copyright © 2012 SciRes. IJCNS
M. SOBOLEWSKI, R. KOLONAY 587
public class AdderImpl implements Adder {
public Context add(Context context)
throws RemoteException {
double result = 0;
List<Double> inputs = context.getInValues();
for (Object value : inputs)
result += value;
context.putValue(context.getOutPath(), result);
return context;
}
}
Finally, starting the ServiceTasker with the following
configuration file:
sorcer.core.provider.ServiceProvider {
name = "SORCER Adder";
beans = new Class[] {
sorcer.arithmetic.AdderImpl.class };
}
registers the Adder provider dynamically with the SOS
network processor. In the same fashion one can imple-
ment and deploy the Multiplier and Subtractor providers
necessary to execute Examples 8-10.
4. SO Optimization Models
Var-models support multidisciplinary and multifidelity
traits of transdisciplinary computing. Var compositions
across multiple models define multidisciplinary problems;
multiple evaluators per var and multiple differentiators
per evaluator define a var’s multifidelity. These are
called amorphous models. For the same var-model an
alternative pair of evaluator-filter (new fidelity) can be
selected or added at runtime to evaluate a new particular
process (“shape”) of the model and quickly update the
related computations in an evolving or new direction.
Consider the Rosen-Suzuki optimization problem,
where:
design variables: x1, x2, x3, x4
response variables: f, g1, g2, g3, and
f = x1^2-5.0*x1+x2^2-5.0*x2+2.0*x3^2-21.0*x3
+x4^2+7.0*x4+50.0
g1 = x1^2+x1+x2^2-x2+x3^2+x3+x4^2-x4-8.0
g2 = x1^2-x1+2.0*x2^2+x3^2+2.0*x4^2-x4-10.0
g3 = 2.0*x1^2+2.0*x1+x2^2-x2+x3^2-x4-5.0
The goal is to minimize f subject to
g1 <= 0, g2 <= 0, and g3 <= 0.
In VML this problem is expressed by the following
var-model:
Example 11. Optimization model in VML
int inputsCount = 4;
int outputsCount = 4;
OptimizationModel rsm = model("R-S Model",
inputs(loop(inputsCount), "x", 20.0, -100.0, 100.0)),
outputs("f"),
outputs (loop(outputsCount -1), "g"),
objectives(var("fo", "f", Target.min)),
constraints(
var("g1c", "g1", Relation.lte, 0.0),
var("g2c", "g2", Relation.lte, 0.0),
var("g3c", "g3", Relation.lte, 0.0)));
configureModel(model);
All vars in the model are configured with needed
evaluators/filters and differentiators by the method con-
figureModel, for example var f is configured as follows:
var(model, "f",
evaluator("fe1",
"x1^2- 5.0*x1+x2^2-5.0*x2+2.0
*x3^2-21.0*x3+x4^2+7.0*x4+50.0"),
args("x1", "x2", "x3", "x4"));
Having the rsm model declared and configured we can
set values of input vars:
put(rsm, entry(“x1”, 1.1), entry (“x2”, 2.2),
entry (“x3”, 3.3), entry (“x4”, 4.4));
and get the output value of f:
assertEquals(value(rsm, “f”), 42.190000000000005));
or the value of constraint var g2c:
assertEquals(value(rsm, “g2c”), false));
Alternatively we can evaluate vars using var closures
as illustrated in Example 4. The Rosen-Suzuki Model can
be used locally as the Java object rsm or that object can
be deployed directly in SORCER as a service bean (see
Section 3.1) and used by the design space exploration
provider of the Exploration type in combination with an
optimizer provider of the Optimization type, e.g., the
CONMIN code or DOT [19].
A var from a var-model can be accessed with var
(<model>, <varName>). However, in multidisciplinary
modeling a var from one remote model can be used in
another remote model. Var proxying allows for building
transdisciplibary-distributed models. In the example be-
low the pf var is a proxy to the f var in the net Rosen-
Suzuki Model declared in Example 11.
Example 12. Proxy var in the Rosen-Suzuki Model
Var pf = var("f", sig(OptimizationModeling.class,
"Rosen-Suzuki Model"));
assertEquals(value(pf), 1570.0);
More complicated modeling tasks like parametric
analysis or optimization can be complemented with EOP
presented in Section 3. Evaluators for vars can be defined
as exertions and vice versa exertions can use vars and
var-models as their modeling components as well (see
Examples 9 and 10).
Returning to Example 11, the Rosen-Suzuki Model,
we create the parametric analysis and optimization exer-
tion tasks. In the parametric task mt the model is speci-
fied by the net signature msig within the signature of the
task mt. The model reads the parametric table at inURL
and writes the response parametric table at outURL in the
Copyright © 2012 SciRes. IJCNS
M. SOBOLEWSKI, R. KOLONAY
588
format specified by inputs and outp uts operators. The
response table is also returned in the task context at the
path table/out as the requested result.
Example 13. Parametric analysis of Rosen-Suzuki pro-
blem
Signature msig = sig(ParametricModeling.class,
"Rosen-Suzuki Model");
String outURL = Sorcer.getWebsterUrl()
+ "/rs-model/rs-out.data";
String inURL = Sorcer.getWebsterUrl()
+ "/rs-model/rs-in.data";
ModelTask mt = task(sig("calculateOutTable", msig),
context(parametricTable(inURL),
responseTable(outURL, inputs("x1", "x2"),
outputs("f", "g1", "g2")),
result("table/out"),
par(queue(20), pool(30))));
Table responseTable = value(mt);
For the optimization opti task, first, define the data
context, then the opti task that takes it as an argument,
and finally we exert the Exploration net provider named
Rosen-Suzuki Explorer specified by the task’s signature.
Example 14. Nonlinear optimization problem
// Create an optimization data context
Context exploreContext = exploreContext(
"Rosen-Suzuki context",
inputs(
entry("x1", 1.0), entry ("x2", 1.0),
entry ("x3", 1.0), entry ("x4", 1.0)),
strategy(new ConminStrategy(
new File(System.getProperty(
"conmin.strategy.file")))),
dispatcher(
sig(null, RosenSuzukiDispatcher.class)),
model(sig("register", OptimizationModeling.class,
"Rosen-Suzuki Model")),
optimizer(sig("register", Optimization.class,
"Rosen-Suzuki Optimizer")));
// Create a task exertion
Task opti = task("opti",
sig("explore", Exploration.class,
"Rosen-Suzuki Explorer",
result("exploration/results")),
exploreContext);
// Execute the exertion and log the optimal solution
logger.info("Rosen-Suzuki exploration results:" +
value(opti));
The exertion’s output solution is logged as follows:
Rosen-Suzuki exploration results:
Objective Function fo = 6.002607805900986
Design Values
x1 = 2.5802964087086235E-4
x2 = 0.9995594642481355
x3 = 2.000313835134211
x4 = -0.9986692050113675
Constraint Values
g1c = -0.002603585246998996
g2c =-1.0074147118087602
g3c = 4.948009193483927E-7
Exploration statistics
Number of Objective Evaluations = 88
Number of Constraint Evaluations = 88
Number of Objective Gradient Evaluations = 29
Number of Constraint Gradient Evaluations = 29
In the above program the exploreContext defines ini-
tialization of the input vars (x1, x2, x3, and x4) of the
optimization model, its optimization strategy, and the
exploration dispatcher with two required network ser-
vices—specified by two signatures for the optimizer and
required optimization model. The instance of custom
RosenSuzukiDispatcher is specified by the signature
sig(RosenSuzukiDispatcher.class) to be used by the ge-
neric exploration service. The context is then used to
define the exertion task opti with the signature for the
exploration provider named Rosen-Suzuki Explorer of the
Exploration type. The function value(opti) executes the
opti task in the network for event-driven collaboration
between the optimizer and the model that is managed by
the explorer customized by the given dispatcher. The
presented schema is generic as the explorer can use mul-
tiple hierarchically organized dispatchers to implement
its optimization strategy provided by the task. Also, the
task can specify a custom model manager that is respon-
sible for complex updates and reconfigurations of the
model during collaborative optimization. For simplicity,
the signatures do not specify QoS [6,7] for the specified
providers.
5. The SORCER Operating System (SOS)
In SORCER the provider container (ServiceTasker) is
responsible for deploying services in the network, pub-
lishing their proxies to one or more registries, and allow-
ing requestors to access its proxies. Providers advertise
their availability in the network; registries intercept these
announcements and cache proxy objects to the provider
services. The SOS looks up proxies by sending queries to
registries and making selections from the available ser-
vice types. Queries generally contain search criteria re-
lated to the type and quality of service. Registries facili-
tate searching by storing proxy objects of services and
making them available to the SOS. Providers use discov-
ery/join protocols [1,20,21] to publish services in the
network and the SOS uses discovery/join protocols to
obtain service proxies in the network. While an exertion
defines the orchestration of its service federation, the
SOS implements the service choreography in the federa-
tion defined by its FMI [10].
Copyright © 2012 SciRes. IJCNS
M. SOBOLEWSKI, R. KOLONAY
Copyright © 2012 SciRes. IJCNS
589
The SOS allows execution of netlets (interpreted
mograms containing exertions) by exerting the specified
federation of service providers. The overlay network of
the service providers defining the functionality of SOS is
called the sos-cloud (see Figure 2) and the overlay net-
work of application providers is called the app-cloud—
service processor [5] (see Figure 2). The instruction set
of the SOS service processor consists of all operations
offered by all service providers in the app-cloud. Thus,
an exertion is composed of instructions specified by ser-
vice signatures with its own control strategy per service
composition and data context representing the shared
data for the underlying federation. The signatures (in-
stances of Signature type) returned by the sig operator
specify participants of collaboration in the app-cloud.
A provider signature is defined by its service type, op-
eration in that interface, and a set of optional QoS attrib-
utes. A SRV signature—of which there is only one al-
lowed per exertion—defines the dynamic late binding to
a provider that implements the signature’s interface. The
data context describes the data that tasks and jobs operate
on. The SOS allows for an exertion to create a service
federation and coordinate the execution of all nested sig-
natures bound to providers in the federation. The exer-
tion-oriented computing concepts are defined differently
than those in traditional grid/cloud computing where a
job is just an executing process for a submitted executa-
ble code—the executable becomes the single service it-
self that can be parallelized on multiple processors, if
needed. Herein a job is the expression of collaborating
service providers within the federation that is formed by
the SOS for the job as specified by all its nested signa-
tures (see various signature types in Section 3).
An exertion object of the Exertion type is created by
either task or job operators in EOL. Then, the ExertShell
can execute the exertion as follows:
ExertShell#exert(Exertion, Transaction):Exertion
where a parameter of the Transaction type is required
when transactional semantics is needed for the partici-
pating service providers within the collaboration defined
by the exertion. Thus, EO programming allows one to
execute an exertion and invoke exertion’s signatures on
collaborating service providers indirectly, but where does
the service-to-service communication come into play?
How do these services communicate with one another if
they are all different? Top-level communication between
services, or the sending of service requests, is done
through the use of the generic Servicer interface and the
operation service that SORCER providers are required to
implement:
Servicer#service(Exertion, Transaction):Exertion.
This top-level service operation takes an exertion ob-
ject as an argument and gives back an exertion object as
the return value.
So why are exertion objects used rather than directly
calling on a provider’s method and passing data contexts?
There are two basic answers to this. First, passing exer-
tion objects helps to aid with the network-centric mes-
saging. A service requestor can send an exertion object
implicitly out onto the network, ExertShell#exert(Exer-
tion), and any service provider can pick it up. The re-
ceiving provider can then look at the signature’s interface
and operation requested within the exertion object, and if
it doesn’t implement the desired interface and provide
the desired method, it can continue forwarding it to an-
other service provider who can service it. Second, pass-
ing exertion objects helps with fault detection and recov-
ery. Each exertion object has its own completion state
Figure 2. The modules of the SOS kernel are service providers (SPs), the same kind as the application domain-specific SPs.
Both the SOS federation in the sos-cloud and application fe dera tion in the app-cl oud consist of dy namically federate d net SPs
by the SOS for its executing netlet. Local (not shown) SPs r un within the SOS shell and/or net SOS/App SPs. A service com-
position is defined by the user’s netlet; in contrast a service assembly is developed and configured by a developer of service
rovider. p
M. SOBOLEWSKI, R. KOLONAY
590
associated with it to specify if it has yet to run, has al-
ready completed, or has failed. Since full exertion objects
are both passed and returned, the user can view the failed
exertion to see what method was being called as well as
what was used in the data context input that may have
caused the problem. Since exertion objects provide all
the information needed to execute the exertion including
its control strategy, the user would be able to pause a job
between component exertions, analyze it and make
needed updates. To determine where to resume an exer-
tion, the executing provider would simply have to look at
the exertion’s completion states and resume the first one
that wasn’t completed yet. In other words, EOP allows
the user, not programmer to update the metaprogram
on-the-fly, which practically translates into creating new
interactive collaborative applications at runtime.
Applying the inversion principle, the SOS executes the
exertion’s collaboration with dynamically found, if pre-
sent, or provisioned on-demand service providers [7].
The exertion caller has no direct dependency to service
providers since the exertion uses only service types they
implement.
Despite the fact that any servicer can accept any exer-
tion, SOS services have well defined roles in the S2S
platform [15]:
1) Taskers—accept exertion tasks; they are used to cre-
ate application services by dependency injection (service
assembly from service beans and related components) or
by inheritance (subclassing ServiceTasker and imple-
menting required service interfaces) [9];
2) Jobbers—manage service collaboration for PUSH
service access [17];
3) Spacers—manage service collaboration for PULL
service access using space-based computing [17];
4) Contexters—provide data contexts for APPEND
signatures;
5) FileStorers—provide access to federated file system
providers [11];
6) Catalogers—SOS registries, provide management
for QoS-based federations;
7) ExertMonitors—monitor execution of running exer-
tions;
8) SlaMonitors—provide monitoring of SLAs [7];
9) Provisioners—provide on-demand provisioning [22];
10) Persisters—persist data contexts, tasks, and jobs to
be reused for interactive EO programming;
11) Relayers—gateway providers; transform exertions
to native representation, for example integration with
Web services and JXTA;
12) Authenticators, Authorizers, Policers, KeyStor-
ers—provide support for service security;
13) Auditors, Reporters, Loggers—support for ac-
countability, reporting, and logging
14) Griders, Callers, Methoders—support for a con-
ventional compute grid (managing and running executa-
ble codes in the network);
15) Notifiers—use third party services for collecting
provider notifications for time-consuming programs and
disconnected requestors.
Both sos-providers and app-providers do not have
mutual associations prior to the execution of an exertion;
they come together dynamically (federate) for all nested
tasks and jobs in the exertion.
Domain specific servicers within the app-cloud—
taskers—execute task exertions. Rendezvous peers (job-
bers, spacers, and catalogers) manage service collabora-
tions. Providers of the Tasker, Jobber, and Spacer type
are basic service containers. In the view of the P2P ar-
chitecture [17] defined by the Servicer interface, a job
can be sent to any servicer. A peer that is not a Jobber or
Spacer type is responsible for forwarding the job to one
of the available rendezvous peers in the SORCER envi-
ronment and returning results to the requestor. Thus im-
plicitly, any peer can handle any exertion type. Once the
exertion execution is complete, the federation dissolves
and the providers in the federation disperse to seek other
exertions to join.
The functional notation to execute exertions—exert
(Exertion):Exertion and value(Exertion):Object—used in
the programming examples relies the ExertShell de-
scribed earlier. Once the SORCER runtime is installed
you can also run netlets like any other script. In direct
interpretation, the command:
nsh -f myNetlet.xrt [arguments]
invokes the SORCER network shell (nsh) to interpret the
netlet contained in the file myNetlet.xrt and passes the
created exertion object onto the ExertShell for execu-
tion. The -f option says that the file is interpreted (see
Figure 2). In indirect interpretation, the first line of the
file should be in the format:
#!/usr/bin/env nsh -f
Then an exertion script can be invoked in the same
way as any other command, i.e., by typing the script
name on the command line. For a command line interact-
tive shell type nsh and at the prompt execute: exert
myNetlet.xrt. The interactive nsh allows for booting or
destroying service providers, looking up providers,
monitoring running exertions in the network, etc.
You can write netlets and execute them directly on the
command line as if they were normal Unix shell scripts.
The following netlet, which defines the exertion in Ex-
ample 4 can be executed directly:
#!/usr/bin/env nsh -f
import sorcer.arithmetic.provider.Multiplier;
import sorcer.service.Strategy.Monitor
import sorcer.service.Strategy.Wait
task("net-multiply",
sig("multiply", Multiplier.class),
Copyright © 2012 SciRes. IJCNS
M. SOBOLEWSKI, R. KOLONAY 591
context(
input("arg/x1", 10.0d),
input("arg/x2", 50.0d),
output("result/y")),
strategy(Monitor.YES, Wait.NO));
6. Conclusions
As we move from the problems of the information era to
more complex problems of the molecular era, it is be-
coming evident that new programming languages for
complex adaptive systems are required. These languages
should reduce the complexity of metacomputing prob-
lems we are facing in SO computing, for example, the
collaborative design by hundreds of people working to-
gether and using thousands of programs written already
in software languages that are dislocated around the
globe. The multidisciplinary design of an aircraft engine
or even a whole air vehicle requires large-scale high per-
formance metacomputing systems handling anywhere-
anytime collaborations of various executable codes in the
form of applications, tools, and utilities. Domain specific
languages are mainly for humans, unlike software lan-
guages for computers, intended to express domain spe-
cific complex problems and related solutions. Three pro-
gramming languages for SO computing are described in
this paper: VOL, VML, and EOL. The network shell (nsh)
interprets mograms in these languages and the SOS
manages related service federations.
As complexity of problems being solved increases con-
tinuously, we have to recognize the fact that in SO com-
puting the only constant is change. The concept of the
evaluator-filter pair in the VFE framework combined
with exertions provides the uniform modeling technique
for SO integration and interoperability with various ap-
plications, tools, utilities, and data formats.
The SORCER operating system supports the two-way
convergence of modeling and programming for SO
computing as presented in hybrid programming examples.
On one hand, EOP is uniformly converged with VOP and
VOM to express an explicit network-centric computation
process emphasizing that the network of service provid-
ers is the computer. On the other hand, VOM and VOP
are uniformly converged with EOP to express an explicit
declarative SO model emphasizing that the computer is
the network of vars. The evolving SORCER environment
with its SO computing model has been successfully veri-
fied and validated in multiple concurrent engineering and
large-scale distributed applications [16,23-25].
7. Acknowledgements
This work was partially supported by Air Force Research
Lab, Aerospace Systems Directorate, Multidisciplinary
Science and Technology Center, the contract number
F33615-03-D-3307, Algorithms for Federated High Fi-
delity Engineering Design Optimization.
REFERENCES
[1] “Jini Network Technology Specifications v2.1,” 2012.
http://www.jiniworld.com/doc/spec-index.html
[2] “Metacomputing: Past to Present,” 2011.
http://archive.ncsa.uiuc.edu/Cyberia/MetaComp/MetaHist
ory.html
[3] I. Foster, C. Kesselman and S. Tuecke, “The Anatomy of
the Grid: Enabling Scalable Virtual Organizations,” In-
ternational Journal of Supercomputer Applications, Vol.
15, No. 3, 2001.
[4] D. S. Linthicum, “Cloud Computing and SOA Conver-
gence in Your Enterprise: A Step-by-Step Guide,” Addi-
son-Wesley Professional, 2009.
[5] M. Sobolewski, “Object-Oriented Service Clouds for
Transdisciplinary Computing,” In: I. Ivanov, et al., Eds.,
Cloud Computing and Services Science, Springer Science +
Business Media, New York, 2012.
[6] M. Sobolewski, “Provisioning Object-Oriented Service
Clouds for Exertion-Oriented Programming,” Proceed-
ings of CLOSER 2011—International Conference on Cloud
Computing and Services Science, 2011, pp. IS-11-IS-25.
[7] P. Rubach and M. Sobolewski, “Autonomic SLA Ma-
nagement in Federated Computing Environments,” In-
ternational Conference on Parallel Processing Work-
shops, Vienna, 22-25 September 2009, pp. 314-321.
doi:10.1109/ICPPW.2009.47
[8] M. Sobolewski, “Federated P2P Services in CE Environ-
ments,” Advances in Concurrent Engineering, A. A. Bal-
kema Publishers, Taylor and Francis, 2002, pp. 13-22.
[9] M. Sobolewski, “Exertion Oriented Programming,” IADIS,
Vol. 3, No. 1, 2008, pp. 86-109.
[10] M. Sobolewski, “Metacomputing with Federated Method
Invocation,” In: M. A. Hussain, Ed., Advances in Com-
puter Science and IT, In-Tech, 2009, pp. 337-363.
http://sciyo.com/articles/show/title/metacomputing-with-f
ederated-method-invocation
[11] M. Sobolewski, “Object-Oriented Metacomputing with
Exertions,” In: A. Gunasekaran and M. Sandhu, Eds.,
Handbook on Business Information Systems, World Sci-
entific Publishing Co. Pte. Ltd., 2010.
[12] SORCERsoft. http://sorcersoft.org
[13] A. Kleppe, “Software Language Engineering,” Pearson
Education, London, 2009.
[14] K. M. Fant, “A Critical Review of the Notion of Algo-
rithm in Computer Science,” Proceedings of the 21st An-
nual Computer Science Conference, Indianapolis, Febru-
ary 1993, pp. 1-6.
[15] M. Sobolewski, “Exerted Enterprise Computing: From
Protocol-Oriented Networking to Exertion-Oriented Net-
working,” In: R. Meersman, et al., Eds., OTM 2010
Workshops, Springer-Verlag, Berlin, Heidelberg, 2010,
pp. 182-201. http://river.apache.org/
[16] R. M. Kolonay and M. Sobolewski, “Service Oriented
Copyright © 2012 SciRes. IJCNS
M. SOBOLEWSKI, R. KOLONAY
Copyright © 2012 SciRes. IJCNS
592
Computing EnviRonment (SORCER) for Large Scale,
Distributed, Dynamic Fidelity Aeroelastic Analysis &
Optimization,” International Forum on Aeroelasticity and
Structural Dynamics, Paris, 26-30 June 2011.
[17] M. Sobolewski, “Federated Collaborations with Exer-
tions,” 17th IEEE International Workshop on Enabling
Technologies: Infrastructures for Collaborative Enter-
prises (WETICE), Rome, 23-25 June 2008, pp. 127-132.
[18] M. Sobolewski and R. Kolonay, “Federated Grid Com-
puting with Interactive Service-Oriented Programming,”
International Journal of Concurrent Engineering: Re-
search & Applications, Vol. 14, No. 1, 2006, pp. 55-66.
[19] CONMIN User’s Manual, 2012.
http://www.eng.buffalo.edu/Research/MODEL/mdo.test.o
rig/CONMIN/manual.html
[20] W. K. Edwards, “Core Jini,” 2nd Edition, Prentice Hall,
Upper Saddle River, 2000.
[21] Apache River, http://river.apache.org/
[22] Rio Project, http://www.rio-project.org/
[23] S. Goel, S. S. Talya and M. Sobolewski, “Mapping Engi-
neering Design Processes onto a Service-Grid: Turbine
Design Optimization,” Concurrent Engineering, Vol. 16,
No. 2, 2008, pp. 139-147.
doi:10.1177/1063293X08092487
[24] R. M. Kolonay, E. D. Thompson, J. A. Camberos and F.
Eastep, “Active Control of Transpiration Boundary Con-
ditions for Drag Minimization with an Euler CFD
Solver,” AIAA-2007-1891, 48th AIAA/ASME/ASCE/AHS/
ASC Structures, Structural Dynamics, and Materials
Conference, Honolulu, 2007.
[25] W. Xu, J. Cha and M. Sobolewski, “A Service-Oriented
Collaborative Design Platform for Concurrent Engineer-
ing,” Advanced Materials Rese arch, Vol. 44-46, 2008, pp.
717-724.
doi:10.4028/www.scientific.net/AMR.44-46.717