-
Notifications
You must be signed in to change notification settings - Fork 1
/
core.html
206 lines (170 loc) · 6.21 KB
/
core.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
---
layout: layout
title: "Core features"
---
<section class="content core">
<script src="/js/prettify.js"></script>
<link href="/css/tomorrow.css" type="text/css" rel="stylesheet"/>
<div class="hero-unit">
<h1>Core Features</h1>
<p>Elementary entities manipulated in Kevoree models</p>
</div>
<!-- Common Type Definition -->
<div class="row">
<div class="span2 heading-box">
<h3>TypeDefinition</h3>
</div>
<div class="span6">
<h5>TypeDefinition/Instance separation</h5>
<p>Every Kevoree features follow a type/instance design pattern. Similarly to Class and Object separation in OO
programmation, Kevoree type definitions define <code>what</code> is available in the system, while instances
define <code>how/where</code> each functionality is used.</p>
</div>
</div>
<hr/>
<!-- Dictionary Definition -->
<div class="row">
<div class="span2 heading-box">
<h3>Dictionary</h3>
</div>
<div class="span4">
<h5>Dictionaries define parameters</h5>
<p>Each type may define a DictionaryType that identify the set of parameters of the component.
Parameters can be optional, can have default values or can provide a finite list of choice.
Described at the component TypeDefinition level, parameters are however specific to each instance created.
</p>
<!-- TODO INSERT FIGURE -->
</div>
<div class="span6">
<!-- Model Example -->
<pre class="code-box prettyprint lang-java">
@NodeType
@DictionaryType({
@DictionaryAttribute(name = "logLevel",
defaultValue = "INFO", optional = true,
vals = {"INFO","WARN","DEBUG","ERROR"})
})
public class JavaSENode extends AbstractNodeType {
}</pre>
</div>
</div>
<hr/>
<!-- Component Definition -->
<div class="row">
<div class="span2 heading-box">
<h3>Component</h3>
</div>
<div class="span4">
<h5>Components encapsulate business functionalities</h5>
<p>Each component provides a set of functionalities exposed to others. A component also requires functionalities
to achieve their own ones. All these functionalities are
identified by a port (required or provided) on the component.</p>
<p>Components communicates only through their ports.</p>
<p></p>
</div>
<div class="span6">
<pre class="code-box prettyprint">
@ComponentType
public class FakeConsole
extends AbstractComponentType {
}</pre>
</div>
</div>
<hr/>
<!-- Channel Definition -->
<div class="row">
<div class="span2 heading-box">
<h3>Channel</h3>
</div>
<div class="span4">
<h5>Channel entity encapsulate business communication semantics</h5>
<p>An application also defines how components are bound to exchange data. These bindings are done with channels
that encapsulate inter-component communication semantics. For instance such
channel semantics can encapsulate broadcast diffusion or distributed transaction, etc.
</p>
<!-- TODO INSERT FIGURE -->
</div>
<div class="span6">
<!-- Model Example -->
<pre class="code-box prettyprint">
@ChannelTypeFragment
public class defMSG extends AbstractChannelFragment {
}</pre>
</div>
</div>
<hr/>
<!-- Node Definition -->
<div class="row">
<div class="span2 heading-box">
<h3>Node</h3>
</div>
<div class="span4">
<h5>Nodes encapsulate adaptation semantics</h5>
<p>Distributed systems are composed by computation node instances related to a NodeType. A NodeType host
specific adaptation semantics which is composed by a list of managed AdaptationPrimitive types and a
planning algorithm</p>
<!-- TODO INSERT FIGURE -->
</div>
<div class="span6">
<!-- Model Example -->
<pre class="code-box prettyprint">
@NodeType
public class JavaSENode extends AbstractNodeType {
}</pre>
</div>
</div>
<hr/>
<!-- Group Definition -->
<div class="row">
<div class="span2 heading-box">
<h3>Groups</h3>
</div>
<div class="span4">
<h5>Groups encapsulate node synchronisation and communication semantic</h5>
<p>In a nutshell, groups are channels dedicated to inter-nodes communications. These entity encapsulate also
synchronisation semantics such as groups synchronisation in total or partial order,
etc ....</p>
<!-- TODO INSERT FIGURE -->
</div>
<div class="span6">
<!-- Model Example -->
<pre class="code-box prettyprint">
@ChannelTypeFragment
public class GossiperGroup extends AbstractGroupType {
}</pre>
</div>
</div>
<hr/>
<!-- Adaptation -->
<div class="row">
<div class="span2 heading-box">
<h3>Adaptation Primitive</h3>
</div>
<div class="span4">
<h5>Adaptation primitives define adaptation capabilities for a NodeType</h5>
<p>A node instance can be viewed as a container which provides an isolation level and has responsibility to
ensure the synchronization between model and runtime. This responsibility is
represented by the adaptation capabilities the node has and these adaptation capabilities are provided by
adaptation primitives to perform migration actions between two configurations (two
models).
</p>
<!-- TODO INSERT FIGURE -->
</div>
<div class="span6">
<!-- Model Example -->
<pre class="code-box prettyprint">
@NodeType
@PrimitiveCommands(
values = {"UpdateType", "UpdateDeployUnit", "AddType", "AddDeployUnit",
"AddThirdParty", "RemoveType", "RemoveDeployUnit",
"UpdateInstance", "UpdateBinding", "UpdateDictionaryInstance",
"AddInstance", "RemoveInstance", "AddBinding",
"RemoveBinding", "AddFragmentBinding", "RemoveFragmentBinding",
"UpdateFragmentBinding", "StartInstance",
"StopInstance", "StartThirdParty","RemoveThirdParty"})
public class JavaSENode extends AbstractNodeType {
}</pre>
</div>
</div>
<hr/>
</section>