This repository has been archived by the owner on Apr 18, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 2
/
specoverview.html
318 lines (287 loc) · 26.3 KB
/
specoverview.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
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8" />
<link rel="shortcut icon" href="sites/saros-project.org/themes/saros/favicon.ico.html" type="image/vnd.microsoft.icon" />
<link rel="shortlink" href="node/60.html" />
<link rel="canonical" href="specoverview.html" />
<meta name="Generator" content="Drupal 7 (http://drupal.org)" />
<title>Overview | Saros</title>
<style type="text/css" media="all">
@import url("modules/system/system.base.css");
@import url("modules/system/system.menus.css");
@import url("modules/system/system.messages.css");
@import url("modules/system/system.theme.css");
</style>
<style type="text/css" media="all">
@import url("sites/all/modules/ldap/ldap_user/ldap_user.css");
@import url("modules/book/book.css");
@import url("modules/comment/comment.css");
@import url("modules/field/theme/field.css");
@import url("modules/node/node.css");
@import url("modules/search/search.css");
@import url("sites/all/modules/toc_filter/toc_filter.css");
@import url("modules/user/user.css");
@import url("modules/forum/forum.css");
</style>
<style type="text/css" media="all">
@import url("sites/all/modules/ctools/css/ctools.css");
@import url("sites/all/modules/ldap/ldap_servers/ldap_servers.admin.css");
</style>
<style type="text/css" media="all">
@import url("sites/saros-project.org/themes/touch/style.css");
@import url("sites/saros-project.org/themes/saros/saros_style.css");
</style>
<script type="text/javascript" src="misc/jquery.js%3Fv=1.4.4.html"></script>
<script type="text/javascript" src="misc/jquery.once.js%3Fv=1.2.html"></script>
<script type="text/javascript" src="misc/drupal.js%3Fp9abym.html"></script>
<script type="text/javascript" src="sites/all/modules/toc_filter/toc_filter.js%3Fp9abym.html"></script>
<script type="text/javascript" src="sites/saros-project.org/themes/touch/js/scrolltopcontrol.js%3Fp9abym.html"></script>
<script type="text/javascript">
<!--//--><![CDATA[//><!--
jQuery.extend(Drupal.settings, {"basePath":"\/","pathPrefix":"","ajaxPageState":{"theme":"saros","theme_token":"bA6zoch0agrMjPe4tXgcPzzyc4VoM0DUuPpAHqEHOOU","js":{"misc\/jquery.js":1,"misc\/jquery.once.js":1,"misc\/drupal.js":1,"sites\/all\/modules\/toc_filter\/toc_filter.js":1,"sites\/saros-project.org\/themes\/touch\/js\/scrolltopcontrol.js":1},"css":{"modules\/system\/system.base.css":1,"modules\/system\/system.menus.css":1,"modules\/system\/system.messages.css":1,"modules\/system\/system.theme.css":1,"sites\/all\/modules\/ldap\/ldap_user\/ldap_user.css":1,"modules\/book\/book.css":1,"modules\/comment\/comment.css":1,"modules\/field\/theme\/field.css":1,"modules\/node\/node.css":1,"modules\/search\/search.css":1,"sites\/all\/modules\/toc_filter\/toc_filter.css":1,"modules\/user\/user.css":1,"modules\/forum\/forum.css":1,"sites\/all\/modules\/ctools\/css\/ctools.css":1,"sites\/all\/modules\/ldap\/ldap_servers\/ldap_servers.admin.css":1,"sites\/saros-project.org\/themes\/touch\/style.css":1,"sites\/saros-project.org\/themes\/saros\/saros_style.css":1}},"toc_filter_smooth_scroll_duration":"","urlIsAjaxTrusted":{"\/specoverview":true}});
//--><!]]>
</script>
<!--[if lt IE 9]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
</head>
<body class="html not-front not-logged-in one-sidebar sidebar-first page-node page-node- page-node-60 node-type-page" >
<div id="wrapper" class="clearfix">
<div id="header-top" class="clearfix">
<div id="logo"><!--start logo-->
<a id="site_name_link" href="index.html" title="Home">
<img src="sites/saros-project.org/files/saros-logo-100x100.png" alt="Home" />
</a>
<div id="name_slogan">
<a id="site-name" href="index.html" title="Home" rel="home"><span>Saros</span></a>
<br/>
<a id="site-slogan" id="site-name" href="index.html" title="Home" rel="home"><span>Distributed Party Programming</span></a>
</div><!--end name_slogan-->
<!--div id="site-slogan">Distributed Party Programming</div><!--site slogan-->
</div><!--end logo-->
<!-- / start search box region -->
<div class="search-box">
<div class="region region-search-box">
<div id="block-search-form" class="block block-search">
<div class="content">
<form action="specoverview.html" method="post" id="search-block-form" accept-charset="UTF-8"><div><div class="container-inline">
<h2 class="element-invisible">Search form</h2>
<div class="form-item form-type-textfield form-item-search-block-form">
<label class="element-invisible" for="edit-search-block-form--2">Search </label>
<input title="Enter the terms you wish to search for." type="text" id="edit-search-block-form--2" name="search_block_form" value="" size="15" maxlength="128" class="form-text" />
</div>
<div class="form-actions form-wrapper" id="edit-actions"><input type="submit" id="edit-submit" name="op" value="Search" class="form-submit" /></div><input type="hidden" name="form_build_id" value="form-uXbiVoYi4brX0XGsUu6RdYocEhsyeqFMN7v8vbIv8yQ" />
<input type="hidden" name="form_id" value="search_block_form" />
</div>
</div></form> </div>
</div> <!-- /.block -->
</div>
<!-- /.region -->
</div> <!-- / end search box region -->
</div><!--end header-top-->
<div id="header" class="clearfix"><!--start header-->
<div id="main-menu">
<ul class="menu"><li class="first leaf"><a href="home.html" title="Frontpage">Home</a></li>
<li class="expanded"><a href="node/66.html">About Saros</a><ul class="menu"><li class="first leaf"><a href="features.html" title="List of Saros features">Features</a></li>
<li class="leaf"><a href="screenshots.html" title="Get impressions with screenshots">Screenshots</a></li>
<li class="leaf"><a href="host-comic.html">Saros Host Comic</a></li>
<li class="leaf"><a href="what-others-say.html" title="Information about where Saros has been mentioned">What others say</a></li>
<li class="last leaf"><a href="history.html" title="Development history and people involved">History</a></li>
</ul></li>
<li class="expanded"><a href="setup.html" title="Learn how to use Saros">Installation & Set-Up</a><ul class="menu"><li class="first expanded"><a href="installation.html" title="Installing Saros in Eclipse">Install Saros</a><ul class="menu"><li class="first last leaf"><a href="setupXMPP.html" title="Setup your own XMPP Server (Advanced Users)">Setup own XMPP Server</a></li>
</ul></li>
<li class="last leaf"><a href="GettingStarted.html">Getting Started with Saros</a></li>
</ul></li>
<li class="expanded"><a href="support_home.html">Support</a><ul class="menu"><li class="first leaf"><a href="mailing-list-chat.html" title="Information on how to reach the Saros team via mailing lists">Mailing Lists</a></li>
<li class="leaf"><a href="troubleshooting.html" title="Known problems when using Saros">Troubleshooting</a></li>
<li class="leaf"><a href="faq.html" title="Frequently asked questions">Saros FAQ</a></li>
<li class="leaf"><a href="compatibility.html">Plugin Compatibility</a></li>
<li class="last leaf"><a href="feedback.html" title="Information about the feature feedback">User Survey & Statistics</a></li>
</ul></li>
<li class="expanded"><a href="getinvolved.html" title="Learn how to develop on Saros">Develop on Saros</a><ul class="menu"><li class="first expanded"><a href="checkout-and-first-steps.html">Check-Out and First Steps</a><ul class="menu"><li class="first expanded"><a href="setup-dev-environment.html">Set up development environment</a><ul class="menu"><li class="first leaf"><a href="dev-environment-reqs.html">Environment Requirements</a></li>
<li class="leaf"><a href="install-subclipse.html">Install Subclipse for building Saros/E</a></li>
<li class="leaf"><a href="install-egit.html">Install EGit</a></li>
<li class="leaf"><a href="our-dev-workflow.html">Our workflow</a></li>
<li class="leaf"><a href="gerrit-login.html">Log in to Gerrit</a></li>
<li class="leaf"><a href="eclipse-setup-git.html">Setting your name and email address for using Gerrit</a></li>
<li class="leaf"><a href="eclipse-setup-ssh.html">Create and configure an SSH key for using Gerrit</a></li>
<li class="leaf"><a href="get-source-code.html">Get Saros source code</a></li>
<li class="leaf"><a href="import-code-style-profiles.html">Import code style profiles</a></li>
<li class="last leaf"><a href="run-saros-as-dev.html">Run your Saros</a></li>
</ul></li>
<li class="last expanded"><a href="make-first-change.html">Making changes to Saros</a><ul class="menu"><li class="first leaf"><a href="node/124.html">Create a new local branch</a></li>
<li class="leaf"><a href="node/125.html">Doing your first change</a></li>
<li class="leaf"><a href="commit-and-push-first-change.html">Commit and push your change</a></li>
<li class="last leaf"><a href="node/127.html">Abandon your change in Gerrit</a></li>
</ul></li>
</ul></li>
<li class="collapsed"><a href="ongoing-work.html">Ongoing Work</a></li>
<li class="expanded"><a href="guidelines.html">Guidelines</a><ul class="menu"><li class="first leaf"><a href="contribution.html">Contribution Rules</a></li>
<li class="collapsed"><a href="coderules.1.html" title="Coding Guidelines and Rules">Coding Conventions</a></li>
<li class="leaf"><a href="usability.html" title="Guidelines to ensure Usability">Usability Guidelines</a></li>
<li class="leaf"><a href="TicketGuidelines.html">Ticket Guidelines</a></li>
<li class="last leaf"><a href="ci-rules.html">Jenkins Rules</a></li>
</ul></li>
<li class="collapsed"><a href="tools.html">Tools</a></li>
<li class="expanded"><a href="processes.html" title="Processes in Saros">Processes</a><ul class="menu"><li class="first leaf"><a href="review.html" title="Information about the review process">Review</a></li>
<li class="leaf"><a href="ReleaseProcess.html" title="Our Release Process">Release</a></li>
<li class="expanded"><a href="testing.html" title="Information about the testing process">Testing</a><ul class="menu"><li class="first last leaf"><a href="jenkins.html">Jenkins and Saros</a></li>
</ul></li>
<li class="leaf"><a href="bugtracker.html" title="Watch the bug tracker">Bug Tracking</a></li>
<li class="last leaf"><a href="documentation.html" title="Information about the documentation process">Documentation</a></li>
</ul></li>
<li class="leaf"><a href="mailingslists.html">Mailinglists</a></li>
<li class="leaf"><a href="https://sourceforge.net/p/dpp/bugs/" title="">Bug Tracker</a></li>
<li class="leaf"><a href="https://sourceforge.net/projects/dpp/" title="Visit Saros at Sourceforge">Saros@Sourceforge</a></li>
<li class="collapsed"><a href="gsoc.1.html">Google Summer of Code</a></li>
<li class="last expanded"><a href="node/129.html">FAQ in daily practice</a><ul class="menu"><li class="first leaf"><a href="node/132.html" title="A change was integrated to master. How can I update my local code?">Update local code to master</a></li>
<li class="leaf"><a href="node/130.html" title="I messed up my local copy of Saros. How can I reset/clean up/revert my changes?">Revert local changes</a></li>
<li class="leaf"><a href="upload-new-patch-set.html" title="Someone discovered an error/failure/typo. How can I upload a new patch set?">Upload a new patch set</a></li>
<li class="leaf"><a href="node/133.html" title="My build failed. What's wrong with my change?">Building in Gerrit failed!</a></li>
<li class="leaf"><a href="gerrit-checkout-patch.html" title="Someone uploaded a change to Gerrit. How can I test this change?">Get & run someones change</a></li>
<li class="leaf"><a href="node/145.html" title="What is a Change? Patch set? Submit?">Change? Patch set? Submit?</a></li>
<li class="leaf"><a href="gerrit-groups-and-permissions.html" title="Which permissions do I have?">Check Gerrit permissions</a></li>
<li class="leaf"><a href="node/142.html" title="How to delete an unwanted local branch in EGit?">Delete local branch</a></li>
<li class="leaf"><a href="node/136.html">Duplicate Location Error</a></li>
<li class="leaf"><a href="gerrit-review.html" title="Someone wants that I review a change. How to review a change?">Review a change</a></li>
<li class="leaf"><a href="node/140.html" title="How to run Saros STF tests locally?">Run STF tests locally</a></li>
<li class="leaf"><a href="node/139.html" title="I ran an STF test (located in test/stf) and get an error! What's wrong?">STF tests fail</a></li>
<li class="leaf"><a href="node/138.html" title="How to set up Saros for running local STF tests?">Set up STF tests</a></li>
<li class="leaf"><a href="node/144.html" title="I want automate my testing process. How to write my own STF tests?">Write STF tests</a></li>
<li class="last leaf"><a href="git-recipes.html">Git use-cases</a></li>
</ul></li>
</ul></li>
<li class="expanded active-trail"><a href="techdoc.html" title="Technical Documentation" class="active-trail">Technical Documentation</a><ul class="menu"><li class="first leaf"><a href="architectureDocumentation.html">Architecture Documentation</a></li>
<li class="leaf active-trail"><a href="specoverview.html" class="active-trail active">Overview</a></li>
<li class="leaf"><a href="concurrency.html" title="Information about Concurrency">Concurrency</a></li>
<li class="leaf"><a href="eclipsebridge.html">Eclipse Bridge</a></li>
<li class="leaf"><a href="packageFeedback.html" title="Information about the feedback feature">Feedback</a></li>
<li class="leaf"><a href="invitation.html" title="Information about invitation">Invitation</a></li>
<li class="leaf"><a href="networklayer.html" title="Information about the network layer">Network Layer</a></li>
<li class="expanded"><a href="sharedsession.html" title="Information about shared session">Shared Session</a><ul class="menu"><li class="first last leaf"><a href="activities.html" title="Information about activities">Activities</a></li>
</ul></li>
<li class="last leaf"><a href="ui.html" title="Information about user interface">User Interface</a></li>
</ul></li>
<li class="expanded"><a href="research.html" title="Research">Research</a><ul class="menu"><li class="first leaf"><a href="bibliography.html" title="Saros related literature">Bibliography</a></li>
<li class="last leaf"><a href="relatedwork.html">Related Work</a></li>
</ul></li>
<li class="last leaf"><a href="contact.html">Contact</a></li>
</ul></div><!-- end main-menu -->
</div> <!-- /#header -->
<div id="content-body">
<div class="breadcrumb"><h2 class="element-invisible">You are here</h2><nav class="breadcrumb"><a href="index.html">Home</a> » <a href="techdoc.html" title="Technical Documentation">Technical Documentation</a> » Overview</nav></div>
<section id="main" role="main" class="clear">
<a id="main-content"></a>
<h1 class="title" id="page-title">Overview</h1> <div class="region region-content">
<div id="block-system-main" class="block block-system">
<div class="content">
<span property="dc:title" content="Overview" class="rdf-meta element-hidden"></span><span property="sioc:num_replies" content="0" datatype="xsd:integer" class="rdf-meta element-hidden"></span>
<div class="content">
<div class="field field-name-body field-type-text-with-summary field-label-hidden"><div class="field-items"><div class="field-item even" property="content:encoded"><a name="top" class="toc-filter-top"></a><div class="toc-filter toc-filter-bullet"><div class="toc-filter-content"><div class="item-list"><ul class="toc-filter-links"><li class="first"><a href="specoverview.html#-a-name-techniques-in-saros-id-techniques-in-saros-a-techniques-in-saros">Techniques in Saros</a></li>
<li><a href="specoverview.html#-a-name-architecture-id-architecture-a-architecture">Architecture</a></li>
<li><a href="specoverview.html#-a-name-software-architecture-id-software-architecture-a-software-architecture">Software Architecture</a></li>
<li class="last"><a href="specoverview.html#internal-dependency-management">Internal Dependency Management</a></li>
</ul></div></div></div>
<div>
<div> </div>
<div>
<hr /></div>
<div class="toc-filter-back-to-top first"><a href="specoverview.html#top">Back to top</a></div><h2 class="toc-header toc-header-bullet"><a name="-a-name-techniques-in-saros-id-techniques-in-saros-a-techniques-in-saros" id="-a-name-techniques-in-saros-id-techniques-in-saros-a-techniques-in-saros" class="toc-bookmark" rel="bookmark" title="Techniques in Saros"></a><a name="Techniques in Saros" id="Techniques in Saros"></a>Techniques in Saros</h2>
<div>Basically the following three techniques are used to develop Saros:</div>
<div> </div>
<ul style="margin-left: 40px; "><li>
<div>Java as programming language</div>
</li>
<li>
<div>XMPP as communication layer</div>
</li>
<li>
<div>Eclipse as target development environment to enhance</div>
</li>
</ul><div class="toc-filter-back-to-top"><a href="specoverview.html#top">Back to top</a></div><h2 class="toc-header toc-header-bullet"><a name="-a-name-architecture-id-architecture-a-architecture" id="-a-name-architecture-id-architecture-a-architecture" class="toc-bookmark" rel="bookmark" title="Architecture"></a><a name="Architecture" id="Architecture"></a>Architecture</h2>
<div>Since Saros is based on XMPP, it uses a server based architecture. Communication between clients is done by XMPP messages which are send over XMPP servers. Exchanging client actions (modifications, selection, project file operations,...) is done by wrapping activity descriptions in XMPP messages and sending them to other clients. An exception is the file transfer. Due to performance reasons it uses a peer to peer transfer. If this direct connection fails, Saros uses a fallback to file transfer over XMPP servers.</div>
<div style="text-align: center;"><span _fck_bookmark="1" style="display: none;"> </span><img alt="" src="sites/saros-project.org/files/communication.png" style="width: 500px; height: 283px;" /><span _fck_bookmark="1" style="display: none;"> </span></div>
<div class="toc-filter-back-to-top"><a href="specoverview.html#top">Back to top</a></div><h2 class="toc-header toc-header-bullet"><a name="-a-name-software-architecture-id-software-architecture-a-software-architecture" id="-a-name-software-architecture-id-software-architecture-a-software-architecture" class="toc-bookmark" rel="bookmark" title="Software Architecture"></a><a name="Software_Architecture" id="Software_Architecture"></a>Software Architecture</h2>
<div>Saros uses a layer architecture and consists of eight major modules as you can see in the image below. The Whiteboard is an additional project which expands the functionality of the Saros plug-in.</div>
<p><map name="links" id="links"><area alt="Shared Session" coords="164, 59, 539, 123" href="./sharedsession" shape="rect" title="shared Session" /><area alt="Concurrency Control" coords="308, 132, 436, 211" href="./concurrency" shape="rect" title="Concurrency Control" /><area alt="Invitation" coords="443, 132, 539, 211" href="./invitation" shape="rect" title="Invitation" /><area alt="Network Layer" coords="308, 220, 539, 283" href="./networklayer" shape="rect" title="Network Layer" /><area alt="UI" coords="236, 132, 299, 283" href="./ui" shape="rect" title="UI" /><area alt="Eclipse Bridge" coords="163, 132, 227, 283" href="./eclipsebridge" shape="rect" title="Eclipse Bridge" /></map></p>
<!-- <area shape="rect" coords="92, 60, 155, 283" href="" alt="Ultility" title="Ultility"> --><p><area alt="Feedback" coords="20, 60, 83, 283" href="./feedback" shape="rect" title="Feedback" /><img alt="" src="http://saros-build.imp.fu-berlin.de/img/architecture/saros_high-level.svg" usemap="#links" /><br /></p><div class="toc-filter-back-to-top"><a href="specoverview.html#top">Back to top</a></div><h2 class="toc-header toc-header-bullet"><a name="internal-dependency-management" id="internal-dependency-management" class="toc-bookmark" rel="bookmark" title="Internal Dependency Management"></a>Internal Dependency Management</h2>
<div>We use the <a href="http://www.picocontainer.org/" target="_top">PicoContainer</a> library to manage our component instances using the Dependency Injection (DI) design pattern.</div>
<h3>During Runtime</h3>
<div>We are using two different DI containers (or "contexts"): The Plugin Context is started when the Saros IDE plugin starts, and exists as long as the Saros instance is running. A second container is created whenever a Saros session is started, and it is teared down when the session ends. Components from the Session Context can access components from the Plugin Context, but not the other way around.</div>
<div style="text-align: center;"><span _fck_bookmark="1" style="display: none;"> </span><img alt="" src="http://saros-build.imp.fu-berlin.de/jenkins/userContent/saros-graphics/architecture/container_run_time.svg" style="width: 400px; height: 406px;" /><span _fck_bookmark="1" style="display: none;"> </span></div>
<h3>At Compile Time</h3>
<p>Since Saros comes in different variants (a plug-in for Eclipse, one for IntelliJ IDEA, and also as a stand-alone server), the components used at run-time are distributed between the common Core and the specific IDE plugin code.</p>
<p>The following schema shows a typical situation for the Eclipse plugin (continuing the example above).</p>
<p style="text-align: center;"><span _fck_bookmark="1" style="display: none;"> </span><img alt="" src="http://saros-build.imp.fu-berlin.de/jenkins/userContent/saros-graphics/architecture/container_compile_time.svg" style="width: 504px; height: 273px;" /><span _fck_bookmark="1" style="display: none;"> </span></p>
<p>The example illustrates the following aspects:</p>
<ul><li>IA is an Interface defined in the Core, and it is implemented by component A in the IDE plugin. Implementing IA is optional from the perspective of the IDE plugin, but it might be helpful (the <a href="https://github.com/saros-project/saros/blob/master/de.fu_berlin.inf.dpp.core/src/de/fu_berlin/inf/dpp/context/AbstractContextLifecycle.java">AbstractContextLifecycle</a> is a real-world example from the Saros code).</li>
<li>IB is defined in the Core, and needs to be provided with an implementation by the IDE plugin as Core-component E needs it.</li>
<li>IC is IDE-dependent.</li>
<li>ID and IE both define Core components, of which D can be readily used, while E needs the IDE plugin to provide an IB implementation.</li>
<li>Note: Interfaces ID, IC, and IE could be removed to let components A and B depend directly on D, C, and E, respectively (see image below). Many components in Saros don't have a separate Java interface for this reason.</li>
</ul><p style="text-align: center;"><span _fck_bookmark="1" style="display: none;"> </span><span _fck_bookmark="1" style="display: none;"> </span><img alt="" src="http://saros-build.imp.fu-berlin.de/jenkins/userContent/saros-graphics/architecture/container_compile_time_simple.svg" style="width: 500px; height: 263px;" /><span _fck_bookmark="1" style="display: none;"> </span><span _fck_bookmark="1" style="display: none;"> </span></p>
<h3>Putting together the contexts: Creating the Mapping</h3>
<p>The actual mapping from interfaces to concrete components is what is put into the DI container. In the case of Saros, there are two dimensions that need to be considered: First, there are two contexts (long-lived Plugin Context and short-lived Session Context); second, there are general Core components and specific IDE components. In Saros, we separate these concerns by <em>n</em> times <em>m</em> "context factories" (<em>n=2</em> for 2 containers, <em>m=4</em> for Core, Eclipse, IntelliJ and Server). The above example would be realized by the following four context factories:</p>
<p style="text-align: center;"><span _fck_bookmark="1" style="display: none;"> </span><img alt="" src="http://saros-build.imp.fu-berlin.de/jenkins/userContent/saros-graphics/architecture/container_factories.svg" style="width: 500px; height: 294px;" /><span _fck_bookmark="1" style="display: none;"> </span></p>
<div> </div>
</div>
<div class="toc-filter-back-to-top last"><a href="specoverview.html#top">Back to top</a></div></div></div></div> </div>
<footer>
</footer>
</div>
</div> <!-- /.block -->
</div>
<!-- /.region -->
</section> <!-- /#main -->
<aside id="sidebar-first" role="complementary" class="sidebar clearfix">
<div class="region region-sidebar-first">
<div id="block-menu-block-1" class="block block-menu-block">
<h2 >Technical Documentation</h2>
<div class="content">
<div class="menu-block-wrapper menu-block-1 menu-name-main-menu parent-mlid-0 menu-level-2">
<ul class="menu"><li class="first leaf menu-mlid-689"><a href="architectureDocumentation.html">Architecture Documentation</a></li>
<li class="leaf active-trail active menu-mlid-389"><a href="specoverview.html" class="active-trail active">Overview</a></li>
<li class="leaf menu-mlid-350"><a href="concurrency.html" title="Information about Concurrency">Concurrency</a></li>
<li class="leaf menu-mlid-376"><a href="eclipsebridge.html">Eclipse Bridge</a></li>
<li class="leaf menu-mlid-348"><a href="packageFeedback.html" title="Information about the feedback feature">Feedback</a></li>
<li class="leaf menu-mlid-345"><a href="invitation.html" title="Information about invitation">Invitation</a></li>
<li class="leaf menu-mlid-349"><a href="networklayer.html" title="Information about the network layer">Network Layer</a></li>
<li class="expanded menu-mlid-344"><a href="sharedsession.html" title="Information about shared session">Shared Session</a><ul class="menu"><li class="first last leaf menu-mlid-346"><a href="activities.html" title="Information about activities">Activities</a></li>
</ul></li>
<li class="last leaf menu-mlid-347"><a href="ui.html" title="Information about user interface">User Interface</a></li>
</ul></div>
</div>
</div> <!-- /.block -->
</div>
<!-- /.region -->
</aside> <!-- /#sidebar-first -->
</div> <!-- end content-body -->
<div class="clear"></div>
<div id="footer" class="clearfix">
<div class="clear"></div>
<div class="region region-footer">
<div id="block-block-2" class="block block-block">
<div class="content">
<p><a href="http://www.mi.fu-berlin.de/fb/impressum/" target="_blank">Impressum</a> — <a href="index.html%3Fq=user.html">Internal login</a></p>
</div>
</div> <!-- /.block -->
</div>
<!-- /.region -->
<div class="clear"></div>
<div id="copyright">Copyright © 2019, Saros</div>
</div> <!-- /#footer -->
</div> <!-- /#wrapper -->
<script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>
<script>
<!--//--><![CDATA[// ><!--
jQuery(document).ready( function($) {
$( ".known-issue-box" ).accordion({
active: false,
heightStyle: "content",
collapsible: true
});
$( ".known-issue-box" ).css( "visibility", "visible" ); });
//--><!]]>
</script> </body>
</html>