blob: a548f3fd452565533ea63f89eebec8ee2f4885c2 [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="keywords" content="SMILA/Project Concepts/ConnectivityMessageInterface" />
<link rel="shortcut icon" href="http://wiki.eclipse.org/SMILA/Project_Concepts/favicon.ico" />
<link rel="search" type="application/opensearchdescription+xml" href="http://wiki.eclipse.org/opensearch_desc.php" title="Eclipsepedia (English)" />
<link rel="alternate" type="application/rss+xml" title="Eclipsepedia RSS Feed" href="http://wiki.eclipse.org/index.php?title=Special:Recentchanges&amp;feed=rss" />
<link rel="alternate" type="application/atom+xml" title="Eclipsepedia Atom Feed" href="http://wiki.eclipse.org/index.php?title=Special:Recentchanges&amp;feed=atom" />
<title>SMILA/Project Concepts/ConnectivityMessageInterface - Eclipsepedia</title>
<style type="text/css" media="screen,projection">/*<![CDATA[*/ @import "http://wiki.eclipse.org/skins/eclipsenova/novaWide.css?116"; /*]]>*/</style>
<link rel="stylesheet" type="text/css" media="print" href="http://wiki.eclipse.org/skins/eclipsenova/eclipsenovaPrint.css?116" />
<link rel="stylesheet" type="text/css" media="handheld" href="http://wiki.eclipse.org/skins/eclipsenova/handheld.css?116" />
<link rel="stylesheet" type="text/css" href="http://wiki.eclipse.org/skins/eclipsenova/Nova/css/header.css" media="screen" />
<link rel="stylesheet" type="text/css" href="http://wiki.eclipse.org/skins/eclipsenova/tabs.css" media="screen" />
<link rel="stylesheet" type="text/css" href="http://wiki.eclipse.org/skins/eclipsenova/Nova/css/visual.css" media="screen" />
<link rel="stylesheet" type="text/css" href="http://wiki.eclipse.org/skins/eclipsenova/Nova/css/layout.css" media="screen" />
<link rel="stylesheet" type="text/css" href="http://wiki.eclipse.org/skins/eclipsenova/Nova/css/footer.css" media="screen" />
<!--[if IE]><link rel="stylesheet" type="text/css" href="/skins/eclipsenova/IEpngfix.css" media="screen" /><![endif]-->
<!--[if lt IE 5.5000]><style type="text/css">@import "/skins/eclipsenova/IE50Fixes.css?116";</style> <![endif]-->
<!--[if IE 5.5000]><style type="text/css">@import "/skins/eclipsenova/IE55Fixes.css?116";</style><![endif]-->
<!--[if IE 6]><style type="text/css">@import "/skins/eclipsenova/IE60Fixes.css?116";</style><![endif]-->
<!--[if IE 7]><style type="text/css">@import "/skins/eclipsenova/IE70Fixes.css?116";</style><![endif]-->
<!--[if lt IE 7]><script type="text/javascript" src="/skins/common/IEFixes.js?116"></script>
<meta http-equiv="imagetoolbar" content="no" /><![endif]-->
<script type= "text/javascript">/*<![CDATA[*/
var skin = "eclipsenova";
var stylepath = "/skins";
var wgArticlePath = "/$1";
var wgScriptPath = "";
var wgScript = "/index.php";
var wgServer = "http://wiki.eclipse.org";
var wgCanonicalNamespace = "";
var wgCanonicalSpecialPageName = false;
var wgNamespaceNumber = 0;
var wgPageName = "SMILA/Project_Concepts/ConnectivityMessageInterface";
var wgTitle = "SMILA/Project Concepts/ConnectivityMessageInterface";
var wgAction = "view";
var wgRestrictionEdit = [];
var wgRestrictionMove = [];
var wgArticleId = "15226";
var wgIsArticle = true;
var wgUserName = null;
var wgUserGroups = null;
var wgUserLanguage = "en";
var wgContentLanguage = "en";
var wgBreakFrames = false;
var wgCurRevisionId = "113298";
var wgVersion = "1.12.0";
var wgEnableAPI = true;
var wgEnableWriteAPI = false;
/*]]>*/</script>
<script type="text/javascript" src="http://wiki.eclipse.org/skins/common/wikibits.js?116"><!-- wikibits js --></script>
<!-- Performance mods similar to those for bug 166401 -->
<script type="text/javascript" src="http://wiki.eclipse.org/index.php?title=-&amp;action=raw&amp;gen=js&amp;useskin=eclipsenova"><!-- site js --></script>
<!-- Head Scripts -->
<script type="text/javascript" src="http://wiki.eclipse.org/skins/common/ajax.js?116"></script>
<style type="text/css">/*<![CDATA[*/
.source-java {line-height: normal; font-size: medium;}
.source-java li {line-height: normal;}
/**
* GeSHi Dynamically Generated Stylesheet
* --------------------------------------
* Dynamically generated stylesheet for java
* CSS class: source-java, CSS id:
* GeSHi (C) 2004 - 2007 Nigel McNie (http://qbnz.com/highlighter)
*/
.source-java .de1, .source-java .de2 {font-family: 'Courier New', Courier, monospace; font-weight: normal;}
.source-java {}
.source-java .head {}
.source-java .foot {}
.source-java .imp {font-weight: bold; color: red;}
.source-java .ln-xtra {color: #cc0; background-color: #ffc;}
.source-java li {font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;}
.source-java li.li2 {font-weight: bold;}
.source-java .kw1 {color: #7F0055; font-weight: bold;}
.source-java .kw2 {color: #7F0055; font-weight: bold;}
.source-java .kw3 {color: #000000; font-weight: normal}
.source-java .kw4 {color: #7F0055; font-weight: bold;}
.source-java .co1 {color: #3F7F5F; font-style: italic;}
.source-java .co2 {color: #3F7F5F;}
.source-java .co3 {color: #3F7F5F; font-style: italic; font-weight: bold;}
.source-java .coMULTI {color: #3F5FBF; font-style: italic;}
.source-java .es0 {color: #000000;}
.source-java .br0 {color: #000000;}
.source-java .st0 {color: #2A00ff;}
.source-java .nu0 {color: #000000;}
.source-java .me1 {color: #000000;}
.source-java .me2 {color: #000000;}
/*]]>*/
</style>
<style type="text/css">/*<![CDATA[*/
@import "http://wiki.eclipse.org/index.php?title=MediaWiki:Geshi.css&usemsgcache=yes&action=raw&ctype=text/css&smaxage=18000";
/*]]>*/
</style><style type="text/css">/*<![CDATA[*/
.source-xml {line-height: normal; font-size: medium;}
.source-xml li {line-height: normal;}
/**
* GeSHi Dynamically Generated Stylesheet
* --------------------------------------
* Dynamically generated stylesheet for xml
* CSS class: source-xml, CSS id:
* GeSHi (C) 2004 - 2007 Nigel McNie (http://qbnz.com/highlighter)
*/
.source-xml .de1, .source-xml .de2 {font-family: 'Courier New', Courier, monospace; font-weight: normal;}
.source-xml {}
.source-xml .head {}
.source-xml .foot {}
.source-xml .imp {font-weight: bold; color: red;}
.source-xml .ln-xtra {color: #cc0; background-color: #ffc;}
.source-xml li {font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;}
.source-xml li.li2 {font-weight: bold;}
.source-xml .coMULTI {color: #808080; font-style: italic;}
.source-xml .es0 {color: #000099; font-weight: bold;}
.source-xml .br0 {color: #66cc66;}
.source-xml .st0 {color: #ff0000;}
.source-xml .nu0 {color: #cc66cc;}
.source-xml .sc0 {color: #00bbdd;}
.source-xml .sc1 {color: #ddbb00;}
.source-xml .sc2 {color: #339933;}
.source-xml .sc3 {color: #009900;}
.source-xml .re0 {color: #000066;}
.source-xml .re1 {font-weight: bold; color: black;}
.source-xml .re2 {font-weight: bold; color: black;}
/*]]>*/
</style>
<style type="text/css">/*<![CDATA[*/
@import "http://wiki.eclipse.org/index.php?title=MediaWiki:Geshi.css&usemsgcache=yes&action=raw&ctype=text/css&smaxage=18000";
/*]]>*/
</style><link rel="stylesheet" type="text/css" href="ConnectivityMessageInterface.html" /> </head>
<body class="mediawiki ns-0 ltr page-SMILA_Project_Concepts_ConnectivityMessageInterface">
<div id="globalWrapper">
<div id="column-one">
<!-- Eclipse Additions for the Top Nav start here M. Ward-->
<div id="header">
<div id="header-graphic">
<img src="http://wiki.eclipse.org/skins/eclipsenova/eclipse.png" alt="Eclipse Wiki">
</div>
<!-- Pulled 101409 Mward -->
<div class="portlet" id="p-personal">
<div class="pBody">
<ul>
<li id="pt-login"><a href="http://wiki.eclipse.org/index.php?title=Special:Userlogin&amp;returnto=SMILA/Project_Concepts/ConnectivityMessageInterface">Log in</a></li>
</ul>
</div>
</div>
<div id="header-icons">
<div id="sites">
<ul id="sitesUL">
<li><a href="http://www.eclipse.org"><img src="http://dev.eclipse.org/custom_icons/eclipseIcon.png" width="28" height="28" alt="Eclipse Foundation" title="Eclipse Foundation" /><div>Eclipse Foundation</div></a></li>
<li><a href="http://marketplace.eclipse.org"><img src="http://dev.eclipse.org/custom_icons/marketplace.png" width="28" height="28" alt="Eclipse Marketplace" title="Eclipse Marketplace" /><div>Eclipse Marketplace</div></a></li>
<li><a href="https://bugs.eclipse.org/bugs"><img src="http://dev.eclipse.org/custom_icons/system-search-bw.png" width="28" height="28" alt="Bugzilla" title="Bugzilla" /><div>Bugzilla</div></a></li>
<li><a href="http://live.eclipse.org"><img src="http://dev.eclipse.org/custom_icons/audio-input-microphone-bw.png" width="28" height="28" alt="Live" title="Live" /><div>Eclipse Live</div></a></li>
<li><a href="http://planeteclipse.org"><img src="http://dev.eclipse.org/large_icons/devices/audio-card.png" width="28" height="28" alt="PlanetEclipse" title="Planet" /><div>Planet Eclipse</div></a></li>
<li><a href="http://portal.eclipse.org"><img src="http://dev.eclipse.org/custom_icons/preferences-system-network-proxy-bw.png" width="28" height="28" alt="Portal" title="Portal" /><div>My Foundation Portal</div></a></li>
</ul>
</div>
</div>
</div>
<!-- NEW HEADER STUFF HERE -->
<div id="header-menu">
<div id="header-nav">
<ul> <li><a class="first_one" href="http://wiki.eclipse.org/" target="_self">Home</a></li> <li><a href="http://www.eclipse.org/downloads/" target="_self">Downloads</a></li>
<li><a href="http://www.eclipse.org/users/" target="_self">Users</a></li>
<li><a href="http://www.eclipse.org/membership/" target="_self">Members</a></li>
<li><a href="http://wiki.eclipse.org/index.php/Development_Resources" target="_self">Committers</a></li>
<li><a href="http://www.eclipse.org/resources/" target="_self">Resources</a></li>
<li><a href="http://www.eclipse.org/projects/" target="_self">Projects</a></li>
<li><a href="http://www.eclipse.org/org/" target="_self">About Us</a></li>
</ul>
</div>
<div id="header-utils">
<!-- moved the search window here -->
<form action="http://wiki.eclipse.org/Special:Search" >
<input class="input" name="search" type="text" accesskey="f" value="" />
<input type='submit' onclick="this.submit();" name="go" id="searchGoButton" class="button" title="Go to a page with this exact name if one exists" value="Go" />&nbsp;
<input type='submit' onclick="this.submit();" name="fulltext" class="button" id="mw-searchButton" title="Search Eclipsepedia for this text" value="Search" />
</form>
</div>
</div>
<!-- Eclipse Additions for the Header stop here -->
<!-- Additions and mods for leftside nav Start here -->
<!--Started nav rip here-->
<!-- these are the nav controls main page, changes etc -->
<div id="novaContent" class="faux">
<div id="leftcol">
<ul id="leftnav">
<!-- these are the page controls, edit history etc -->
<li class="separator"><a class="separator">Navigation &#160;&#160;</li>
<li id="n-mainpage"><a href="http://wiki.eclipse.org/Main_Page">Main Page</a></li>
<li id="n-portal"><a href="http://wiki.eclipse.org/Eclipsepedia:Community_Portal">Community portal</a></li>
<li id="n-currentevents"><a href="http://wiki.eclipse.org/Eclipsepedia:Current_events">Current events</a></li>
<li id="n-recentchanges"><a href="http://wiki.eclipse.org/Special:Recentchanges">Recent changes</a></li>
<li id="n-randompage"><a href="http://wiki.eclipse.org/Special:Random">Random page</a></li>
<li id="n-help"><a href="http://wiki.eclipse.org/Help:Contents">Help</a></li>
<li class="separator"><a class="separator">Toolbox &#160;&#160;</a></li>
<li id="t-whatlinkshere"><a href="http://wiki.eclipse.org/Special:Whatlinkshere/SMILA/Project_Concepts/ConnectivityMessageInterface">What links here</a></li>
<li id="t-recentchangeslinked"><a href="http://wiki.eclipse.org/Special:Recentchangeslinked/SMILA/Project_Concepts/ConnectivityMessageInterface">Related changes</a></li>
<!-- This is the toolbox section -->
<li id="t-upload"><a href="http://wiki.eclipse.org/Special:Upload">Upload file</a></li>
<li id="t-specialpages"><a href="http://wiki.eclipse.org/Special:Specialpages">Special pages</a></li>
<li id="t-print"><a href="http://wiki.eclipse.org/index.php?title=SMILA/Project_Concepts/ConnectivityMessageInterface&amp;printable=yes">Printable version</a></li> <li id="t-permalink"><a href="http://wiki.eclipse.org/index.php?title=SMILA/Project_Concepts/ConnectivityMessageInterface&amp;oldid=113298">Permanent link</a></li> </ul>
</div>
<!-- Additions and mods for leftside nav End here -->
<div id="column-content">
<div id="content">
<a name="top" id="top"></a>
<div id="tabs">
<ul class="primary">
<li class="active"><a href="ConnectivityMessageInterface.html"><span class="tab">Page</span></a></li>
<li><a href="http://wiki.eclipse.org/index.php?title=Talk:SMILA/Project_Concepts/ConnectivityMessageInterface&amp;action=edit"><span class="tab">Discussion</span></a></li>
<li><a href="http://wiki.eclipse.org/index.php?title=SMILA/Project_Concepts/ConnectivityMessageInterface&amp;action=edit"><span class="tab">View source</span></a></li>
<li><a href="http://wiki.eclipse.org/index.php?title=SMILA/Project_Concepts/ConnectivityMessageInterface&amp;action=history"><span class="tab">History</span></a></li>
<li><a href="http://wiki.eclipse.org/index.php?title=Special:Userlogin&amp;returnto=SMILA/Project&#32;Concepts/ConnectivityMessageInterface"><span class="tab">Edit</span></a></li>
</ul>
</div>
<script type="text/javascript"> if (window.isMSIE55) fixalpha(); </script>
<h1 class="firstHeading">SMILA/Project Concepts/ConnectivityMessageInterface</h1>
<div id="bodyContent">
<h3 id="siteSub">From Eclipsepedia</h3>
<div id="contentSub"><span class="subpages">&lt; <a href="../../SMILA.html" title="SMILA">SMILA</a> | <a href="../Project_Concepts.1.html" title="SMILA/Project Concepts">Project Concepts</a></span></div>
<div id="jump-to-nav">Jump to: <a href="ConnectivityMessageInterface.html#column-one">navigation</a>, <a href="ConnectivityMessageInterface.html#searchInput">search</a></div> <!-- start content -->
<table id="toc" class="toc" summary="Contents"><tr><td><div id="toctitle"><h2>Contents</h2></div>
<ul>
<li class="toclevel-1"><a href="ConnectivityMessageInterface.html#Description"><span class="tocnumber">1</span> <span class="toctext">Description</span></a></li>
<li class="toclevel-1"><a href="ConnectivityMessageInterface.html#Technical_proposal"><span class="tocnumber">2</span> <span class="toctext">Technical proposal</span></a>
<ul>
<li class="toclevel-2"><a href="ConnectivityMessageInterface.html#Interface"><span class="tocnumber">2.1</span> <span class="toctext">Interface</span></a></li>
<li class="toclevel-2"><a href="ConnectivityMessageInterface.html#Message_Objects"><span class="tocnumber">2.2</span> <span class="toctext">Message Objects</span></a></li>
<li class="toclevel-2"><a href="ConnectivityMessageInterface.html#MessageItem_Structure"><span class="tocnumber">2.3</span> <span class="toctext">MessageItem Structure</span></a></li>
<li class="toclevel-2"><a href="ConnectivityMessageInterface.html#Utilities"><span class="tocnumber">2.4</span> <span class="toctext">Utilities</span></a></li>
<li class="toclevel-2"><a href="ConnectivityMessageInterface.html#Message_Objects_vs_plain_XML_Messaging"><span class="tocnumber">2.5</span> <span class="toctext">Message Objects vs plain XML Messaging</span></a></li>
</ul>
</li>
</ul>
</td></tr></table><script type="text/javascript"> if (window.showTocToggle) { var tocShowText = "show"; var tocHideText = "hide"; showTocToggle(); } </script>
<a name="Description"></a><h2> <span class="mw-headline"> Description </span></h2>
<p>This is an alternative concept for the Connectivity Interface. It does not use a traditional structured API but a message like approach.
Attached is a sample implementation that illustrates the usage: [^ConnectivityInterface.zip].
</p>
<a name="Technical_proposal"></a><h2> <span class="mw-headline"> Technical proposal </span></h2>
<a name="Interface"></a><h3> <span class="mw-headline"> Interface </span></h3>
<p>The interface has only one method that processes the incoming message and creates a response message.
</p>
<div dir="ltr" style="text-align: left;"><pre class="source-java"><span class="kw1">public</span> <span class="kw1">class</span> ConnectivityManager
<span class="br0">&#123;</span>
Message process<span class="br0">&#40;</span>Message msg<span class="br0">&#41;</span> <span class="kw1">throws</span> <span class="kw3">Exception</span>
<span class="br0">&#125;</span></pre></div>
<p><br />
</p>
<a name="Message_Objects"></a><h3> <span class="mw-headline"> Message Objects </span></h3>
<p>A Message can be either a REQUEST to Connectivity or a RESPONSE by Connectivity. This is the Type of the message. It also contains and identifier for an Action that is/was performed.
And finaly a message has a MessageItem, the content of the message. Type and Action are Enumerations, that can be extended easily.
</p>
<div dir="ltr" style="text-align: left;"><pre class="source-java"><span class="kw1">public</span> <span class="kw1">class</span> Message
<span class="br0">&#123;</span>
Type type;
<span class="kw3">Action</span> action;
MessageItem item;
<span class="br0">&#125;</span>
&nbsp;
<span class="kw1">public</span> <span class="kw1">enum</span> Type
<span class="br0">&#123;</span>
REQUEST, RESPONSE
<span class="br0">&#125;</span>
&nbsp;
<span class="kw1">public</span> <span class="kw1">enum</span> <span class="kw3">Action</span>
<span class="br0">&#123;</span>
DI_INIT, DI_CHECK_FOR_UPDATE, DI_FINISH, DI_DELETE, <span class="co1">// delta indexing</span>
ADD, UPDATE, DELETE, <span class="co1">// indexing</span>
CLEAR <span class="co1">// management</span>
<span class="br0">&#125;</span></pre></div>
<p><br />
The MessageItem is an abstract base class for concrete MessageItem classes. Each concrete MessageItem has a name and a value. If additional MessageItem classes are needed, they can be
introduced easily just by extending the abstract base class MessageItem. In this way, the content of a message can be assembled in any way. How a message has to be assembeled depends on Type and Action.
</p>
<div dir="ltr" style="text-align: left;"><pre class="source-java"><span class="kw1">public</span> <span class="kw1">abstract</span> <span class="kw1">class</span> MessageItem
<span class="br0">&#123;</span>
<span class="kw3">String</span> name;
&nbsp;
<span class="kw1">public</span> MessageItem<span class="br0">&#40;</span><span class="kw3">String</span> name<span class="br0">&#41;</span>
<span class="br0">&#123;</span>
<span class="kw1">this</span>.<span class="me1">name</span> = name;
<span class="br0">&#125;</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="kw1">public</span> <span class="kw1">class</span> MessageItemList <span class="kw1">extends</span> MessageItem
<span class="br0">&#123;</span>
MessageItem<span class="br0">&#91;</span><span class="br0">&#93;</span> value;
&nbsp;
MessageItemList<span class="br0">&#40;</span><span class="kw3">String</span> name, <span class="kw4">int</span> size<span class="br0">&#41;</span>
<span class="br0">&#123;</span>
<span class="kw1">super</span><span class="br0">&#40;</span>name<span class="br0">&#41;</span>;
value = <span class="kw1">new</span> MessageItem<span class="br0">&#91;</span>size<span class="br0">&#93;</span>;
<span class="br0">&#125;</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="kw1">public</span> <span class="kw1">class</span> RecordItem <span class="kw1">extends</span> MessageItem
<span class="br0">&#123;</span>
Record value;
&nbsp;
<span class="kw1">public</span> RecordItem<span class="br0">&#40;</span><span class="kw3">String</span> name, Record record <span class="br0">&#41;</span>
<span class="br0">&#123;</span>
<span class="kw1">super</span><span class="br0">&#40;</span>name<span class="br0">&#41;</span>;
value = record;
<span class="br0">&#125;</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="kw1">public</span> <span class="kw1">class</span> IDItem <span class="kw1">extends</span> MessageItem
<span class="br0">&#123;</span>
ID value;
&nbsp;
<span class="kw1">public</span> IDItem<span class="br0">&#40;</span><span class="kw3">String</span> name, ID id <span class="br0">&#41;</span>
<span class="br0">&#123;</span>
<span class="kw1">super</span><span class="br0">&#40;</span>name<span class="br0">&#41;</span>;
value = id;
<span class="br0">&#125;</span>
&nbsp;
<span class="br0">&#125;</span>
&nbsp;
<span class="kw1">public</span> <span class="kw1">class</span> StringItem <span class="kw1">extends</span> MessageItem
<span class="br0">&#123;</span>
<span class="kw3">String</span> value;
&nbsp;
<span class="kw1">public</span> StringItem<span class="br0">&#40;</span><span class="kw3">String</span> name, <span class="kw3">String</span> string <span class="br0">&#41;</span>
<span class="br0">&#123;</span>
<span class="kw1">super</span><span class="br0">&#40;</span>name<span class="br0">&#41;</span>;
value = string;
<span class="br0">&#125;</span>
&nbsp;
<span class="br0">&#125;</span>
&nbsp;
<span class="kw1">public</span> <span class="kw1">class</span> BooleanItem <span class="kw1">extends</span> MessageItem
<span class="br0">&#123;</span>
<span class="kw4">boolean</span> value;
<span class="kw1">public</span> BooleanItem<span class="br0">&#40;</span><span class="kw3">String</span> name, <span class="kw4">boolean</span> bool <span class="br0">&#41;</span>
<span class="br0">&#123;</span>
<span class="kw1">super</span><span class="br0">&#40;</span>name<span class="br0">&#41;</span>;
value = bool;
<span class="br0">&#125;</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="kw1">public</span> <span class="kw1">class</span> IntegerItem <span class="kw1">extends</span> MessageItem
<span class="br0">&#123;</span>
<span class="kw4">int</span> value;
<span class="kw1">public</span> IntegerItem<span class="br0">&#40;</span><span class="kw3">String</span> name, <span class="kw4">int</span> integer <span class="br0">&#41;</span>
<span class="br0">&#123;</span>
<span class="kw1">super</span><span class="br0">&#40;</span>name<span class="br0">&#41;</span>;
value = integer;
<span class="br0">&#125;</span>
<span class="br0">&#125;</span></pre></div>
<p><br />
</p>
<a name="MessageItem_Structure"></a><h3> <span class="mw-headline"> MessageItem Structure </span></h3>
<p>As said before, the structure of a message item depends on the Type and Action. For each combination of Type/Action a MessageItem structure has to be defined.
Here is a table of some simple examples. These are by no means final. If a message needs additional data it can easily be redefined.
The data could also be represented in other ways, for example the REQUEST/DI_CHECK_FOR_UPDATE could also use a MessageItemList&lt;MessageItemList&lt;String, String&gt;&gt;. Or the ADD and UPDATE actiuons could only allow one RecordItem instead of a list of RecordItems
</p>
<table border="1">
<tr>
<td>
</td><th> REQUEST
</th><th> RESPONSE
</th></tr>
<tr>
<th> DI_INIT
</th><td> StringItem
</td><td> BooleanItem
</td></tr>
<tr>
<th> DI_CHECK_FOR_UPDATE
</th><td> MessageItemList&lt;RecordItem&gt;
</td><td> MessageItemList&lt;BooleanItem&gt;
</td></tr>
<tr>
<th> DI_FINISH
</th><td> StringItem
</td><td> BooleanItem
</td></tr>
<tr>
<th> DI_DELETE
</th><td> StringItem
</td><td> IntegerItem
</td></tr>
<tr>
<th> ADD
</th><td> MessageItemList&lt;RecordItem&gt;
</td><td> IntegerItem
</td></tr>
<tr>
<th> UPDATE
</th><td> MessageItemList&lt;RecordItem&gt;
</td><td> IntegerItem
</td></tr>
<tr>
<th> DELETE
</th><td> MessageItemList&lt;IDTem&gt;
</td><td> MessageItemList&lt;IntegerItem&gt;
</td></tr>
<tr>
<th> CLEAR
</th><td> StringItem
</td><td> BooleanItem
</td></tr></table>
<p>The same applies to names for MessageItems. In some cases there may be no need for explicit names, in other cases the might be helpful to distinguish between different information.
Here are two examples for complete Message objects used during delta indexing check for update. The Request contains a list of EILFRecords with delta indexing information (ID and hash). The Response contains a list of boolean.
The index of both lists match, so that the result for a record at request\[x\] can be found at response\[x\]. The examples are represented in XML syntax for better readability. Note that the XML representation of the EILFRecord is just a sample.
</p>
<div dir="ltr" style="text-align: left;"><pre class="source-xml"><span class="sc3"><span class="re1">&lt;?xml</span> <span class="re0">version</span>=<span class="st0">&quot;1.0&quot;</span> <span class="re0">encoding</span>=<span class="st0">&quot;UTF-8&quot;</span><span class="re2">?&gt;</span></span>
<span class="sc3"><span class="re1">&lt;Message</span> <span class="re0">xmlns:xsi</span>=<span class="st0">&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</span> <span class="re0">xsi:noNamespaceSchemaLocation</span>=<span class="st0">&quot;Message.xsd&quot;</span><span class="re2">&gt;</span></span>
<span class="sc3"><span class="re1">&lt;Message<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Type<span class="re2">&gt;</span></span></span>REQUEST<span class="sc3"><span class="re1">&lt;/Type<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Action<span class="re2">&gt;</span></span></span>CHECK_FOR_UPDATE<span class="sc3"><span class="re1">&lt;/Action<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;MessageItemList</span> <span class="re0">name</span>=<span class="st0">&quot;recordCheckList&quot;</span><span class="re2">&gt;</span></span>
<span class="sc3"><span class="re1">&lt;RecordItem</span> <span class="re0">name</span>=<span class="st0">&quot;1&quot;</span><span class="re2">&gt;</span></span>
<span class="sc3"><span class="re1">&lt;EILFRecord<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;ID<span class="re2">&gt;</span></span></span>1<span class="sc3"><span class="re1">&lt;/ID<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Hash<span class="re2">&gt;</span></span></span>aaa<span class="sc3"><span class="re1">&lt;/Hash<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/EILFRecord<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/RecordItem<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;RecordItem</span> <span class="re0">name</span>=<span class="st0">&quot;2&quot;</span><span class="re2">&gt;</span></span>
<span class="sc3"><span class="re1">&lt;EILFRecord<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;ID<span class="re2">&gt;</span></span></span>2<span class="sc3"><span class="re1">&lt;/ID<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Hash<span class="re2">&gt;</span></span></span>bbb<span class="sc3"><span class="re1">&lt;/Hash<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/EILFRecord<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/RecordItem<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;RecordItem</span> <span class="re0">name</span>=<span class="st0">&quot;3&quot;</span><span class="re2">&gt;</span></span>
<span class="sc3"><span class="re1">&lt;EILFRecord<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;ID<span class="re2">&gt;</span></span></span>3<span class="sc3"><span class="re1">&lt;/ID<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Hash<span class="re2">&gt;</span></span></span>ccc<span class="sc3"><span class="re1">&lt;/Hash<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/EILFRecord<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/RecordItem<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/MessageItemList<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/Message<span class="re2">&gt;</span></span></span></pre></div>
<div dir="ltr" style="text-align: left;"><pre class="source-xml"><span class="sc3"><span class="re1">&lt;?xml</span> <span class="re0">version</span>=<span class="st0">&quot;1.0&quot;</span> <span class="re0">encoding</span>=<span class="st0">&quot;UTF-8&quot;</span><span class="re2">?&gt;</span></span>
<span class="sc3"><span class="re1">&lt;Message</span> <span class="re0">xmlns:xsi</span>=<span class="st0">&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</span> <span class="re0">xsi:noNamespaceSchemaLocation</span>=<span class="st0">&quot;Message.xsd&quot;</span><span class="re2">&gt;</span></span>
<span class="sc3"><span class="re1">&lt;Type<span class="re2">&gt;</span></span></span>RESPONSE<span class="sc3"><span class="re1">&lt;/Type<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Action<span class="re2">&gt;</span></span></span>CHECK_FOR_UPDATE<span class="sc3"><span class="re1">&lt;/Action<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;MessageItemList</span> <span class="re0">name</span>=<span class="st0">&quot;recordFeedbackList&quot;</span><span class="re2">&gt;</span></span>
<span class="sc3"><span class="re1">&lt;BooleanItem</span> <span class="re0">name</span>=<span class="st0">&quot;1&quot;</span><span class="re2">&gt;</span></span>true<span class="sc3"><span class="re1">&lt;/BooleanItem<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;BooleanItem</span> <span class="re0">name</span>=<span class="st0">&quot;2&quot;</span><span class="re2">&gt;</span></span>true<span class="sc3"><span class="re1">&lt;/BooleanItem<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;BooleanItem</span> <span class="re0">name</span>=<span class="st0">&quot;3&quot;</span><span class="re2">&gt;</span></span>false<span class="sc3"><span class="re1">&lt;/BooleanItem<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/MessageItemList<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/Message<span class="re2">&gt;</span></span></span></pre></div>
<p><br />
</p>
<a name="Utilities"></a><h3> <span class="mw-headline"> Utilities </span></h3>
<p>To make the usage of the MessageItems easier for developers we could also provide Factory classes for creation of certain messages.
</p>
<div dir="ltr" style="text-align: left;"><pre class="source-java"><span class="kw1">public</span> <span class="kw1">interface</span> MessageFactory
<span class="br0">&#123;</span>
<span class="kw1">static</span> Message createAddRequest<span class="br0">&#40;</span>EILFRecord<span class="br0">&#91;</span><span class="br0">&#93;</span> records<span class="br0">&#41;</span>
&nbsp;
<span class="kw1">static</span> Message createAddResponse<span class="br0">&#40;</span><span class="kw4">int</span> count<span class="br0">&#41;</span>
&nbsp;
<span class="kw1">static</span> Message createCheckForUpdateRequest<span class="br0">&#40;</span>EILFRecord<span class="br0">&#91;</span><span class="br0">&#93;</span> records<span class="br0">&#41;</span>;
&nbsp;
<span class="kw1">static</span> Message createCheckForUpdateResponse<span class="br0">&#40;</span><span class="kw4">boolean</span><span class="br0">&#91;</span><span class="br0">&#93;</span> values<span class="br0">&#41;</span>;
&nbsp;
...
<span class="br0">&#125;</span></pre></div>
<p><br />
</p>
<a name="Message_Objects_vs_plain_XML_Messaging"></a><h3> <span class="mw-headline"> Message Objects vs plain XML Messaging </span></h3>
<p>The idea of the Message Objects was to provide a Java API in the first place. By using SCA it is easily possible to also use the interface remote, either via RMI or Webservice interface.
However, there are some issues regarding component upgrades. Imagine a setup where components are hosted by different departments and each department has it's own update cycle. This will certainly lead to different software versions of components.
So an updated IRM could use a newer Version of the Message Objects (e.g. with additional Actions) than the called ConnectivityModule.
</p>
<ul><li> plain XML
</li></ul>
<p>With a plain XML message concept, using a version flag, it's possible to decide during parsing if Connectivity is capable of processing a given message and a message could be declined (e.g. sending a response or throwing an exception). It's possible to allow downwards compatibility to certain versions.
</p>
<ul><li> RMI
</li></ul>
<p>Objects exchanged over RMI need to be serializable. This implies the usage of a serialVersionUID, by which the JVM can check if a serialized data fits to the current available .class file. If not, a InvalidClassException is thrown. The serialVersionUID usualy changes on any modifications. However, it is also possible to assign the serialVersionUID manually. In this way the serialVersionUID could be maintained on non conflicting changes (e.g. changes that do not affect the serialized data). It's not possible to be downwards compatible, as it is only checked if the serialVersionUID is equal. Adding a new value to an Enum may be seen as a non conflicting change - it is NOT. During de-serialization the JVM throws a java.lang.IllegalArgumentException. So in case of Message Objects the serialVersionUID needs also to be changed if any of the used Enums changes.
</p>
<ul><li> Webservice
</li></ul>
<p>The Tuscany generated Webservice interface doesn't care about the serialVersionUID used in serializable classes. Here we would have to use an own version flag. It is also a little more flexible concerning Enums, as if it does not know about a value it initializes the variable with null (no Exception). It's possible to allow downwards compatibility to certain versions.
</p><p>The biggest problem is that RMI and Webservices behave differently and the client has to be prepared to handle any exceptions, as the binding is configurable. Also, there may be many dependencies in the serializable Message Objects and deciding if modifications need to change the serialVersionUID may not be obvious.
</p>
<!--
NewPP limit report
Preprocessor node count: 26/1000000
Post-expand include size: 0/2097152 bytes
Template argument size: 0/2097152 bytes
#ifexist count: 0/100
-->
<!-- Saved in parser cache with key wikidb:pcache:idhash:15226-0!1!0!!en!2!edit=0 and timestamp 20120710093600 -->
<div class="printfooter">
Retrieved from "<a href="ConnectivityMessageInterface.html">http://wiki.eclipse.org/SMILA/Project_Concepts/ConnectivityMessageInterface</a>"</div>
<!-- end content -->
<div class="visualClear"></div>
</div>
</div>
</div>
<!-- Yoink of toolbox for phoenix moved up -->
</div>
</div>
<div id="clearFooter"/>
<div id="footer" >
<ul id="footernav">
<li class="first"><a href="http://www.eclipse.org/">Home</a></li>
<li><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></li>
<li><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></li>
<li><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></li>
<li><a href="http://www.eclipse.org/org/foundation/contact.php">Contact</a></li>
<li><a href="http://wiki.eclipse.org/Eclipsepedia:About" title="Eclipsepedia:About">About Eclipsepedia</a></li>
</ul>
<span id="copyright">Copyright &copy; 2012 The Eclipse Foundation. All Rights Reserved</span>
<p id="footercredit">This page was last modified 12:39, 13 August 2008 by <a href="http://wiki.eclipse.org/User:Daniel.stucky.empolis.com" title="User:Daniel.stucky.empolis.com">Daniel Stucky</a>. </p>
<p id="footerviews">This page has been accessed 1,448 times.</p>
</div>
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
var pageTracker = _gat._getTracker("UA-910670-4");
pageTracker._trackPageview();
</script>
<!-- <div class="visualClear"></div> -->
<script type="text/javascript">if (window.runOnloadHook) runOnloadHook();</script>
</div>
<!-- Served in 0.048 secs. --></body></html>