blob: 5ab274dd42ec7c7e0227ca5255178e9a8a925aea [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/OSGi service groupping (service registry concept),Juergen.schumacher.empolis.com" />
<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/OSGi service groupping (service registry concept) - 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/OSGi_service_groupping_(service_registry_concept)";
var wgTitle = "SMILA/Project Concepts/OSGi service groupping (service registry concept)";
var wgAction = "view";
var wgRestrictionEdit = [];
var wgRestrictionMove = [];
var wgArticleId = "15320";
var wgIsArticle = true;
var wgUserName = null;
var wgUserGroups = null;
var wgUserLanguage = "en";
var wgContentLanguage = "en";
var wgBreakFrames = false;
var wgCurRevisionId = "128884";
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><link rel="stylesheet" type="text/css" href="OSGi_service_groupping_(service_registry_concept).html" /> </head>
<body class="mediawiki ns-0 ltr page-SMILA_Project_Concepts_OSGi_service_groupping_service_registry_concept">
<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/OSGi_service_groupping_(service_registry_concept)">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/OSGi_service_groupping_%28service_registry_concept%29">What links here</a></li>
<li id="t-recentchangeslinked"><a href="http://wiki.eclipse.org/Special:Recentchangeslinked/SMILA/Project_Concepts/OSGi_service_groupping_%28service_registry_concept%29">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/OSGi_service_groupping_%28service_registry_concept%29&amp;printable=yes">Printable version</a></li> <li id="t-permalink"><a href="http://wiki.eclipse.org/index.php?title=SMILA/Project_Concepts/OSGi_service_groupping_%28service_registry_concept%29&amp;oldid=128884">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="OSGi_service_groupping_(service_registry_concept).html"><span class="tab">Page</span></a></li>
<li><a href="http://wiki.eclipse.org/index.php?title=Talk:SMILA/Project_Concepts/OSGi_service_groupping_%28service_registry_concept%29&amp;action=edit"><span class="tab">Discussion</span></a></li>
<li><a href="http://wiki.eclipse.org/index.php?title=SMILA/Project_Concepts/OSGi_service_groupping_%28service_registry_concept%29&amp;action=edit"><span class="tab">View source</span></a></li>
<li><a href="http://wiki.eclipse.org/index.php?title=SMILA/Project_Concepts/OSGi_service_groupping_%28service_registry_concept%29&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/OSGi&#32;service&#32;groupping&#32;(service&#32;registry&#32;concept)"><span class="tab">Edit</span></a></li>
</ul>
</div>
<script type="text/javascript"> if (window.isMSIE55) fixalpha(); </script>
<h1 class="firstHeading">SMILA/Project Concepts/OSGi service groupping (service registry concept)</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="OSGi_service_groupping_(service_registry_concept).html#column-one">navigation</a>, <a href="OSGi_service_groupping_(service_registry_concept).html#searchInput">search</a></div> <!-- start content -->
<a name="Description"></a><h2> <span class="mw-headline"> Description </span></h2>
<p><b>THIS PAGE SHOULD BE REMOVED - concept is obsolete</b>
</p><p>A concept of service registry for groupping services
</p>
<a name="Discussion"></a><h2> <span class="mw-headline"> Discussion </span></h2>
<p><a href="http://wiki.eclipse.org/User:Juergen.schumacher.empolis.com" title="User:Juergen.schumacher.empolis.com">Juergen Schumacher</a>:
I have some questions about this: I think we should go for OSGi's Declarative Se... I have some questions about this:
</p><p>I think we should go for OSGi's Declarative Services feature for managing service registrations and dependencies. Simple examples for service registration can be found in [<a href="http://www.eclipsezone.com/eclipse/forums/t96740.html" class="external autonumber" title="http://www.eclipsezone.com/eclipse/forums/t96740.html" rel="nofollow">[1]</a>] and for service lookup in [<a href="http://www.eclipsezone.com/eclipse/forums/t97690.rhtml" class="external autonumber" title="http://www.eclipsezone.com/eclipse/forums/t97690.rhtml" rel="nofollow">[2]</a>].
Even if you do not want to do this: Why not just use OSGi tools like ServiceTracker or implementing ServiceListener to locate services? See [<a href="http://felix.apache.org/site/apache-felix-tutorial-example-5.html" class="external autonumber" title="http://felix.apache.org/site/apache-felix-tutorial-example-5.html" rel="nofollow">[3]</a>] or [<a href="http://felix.apache.org/site/apache-felix-tutorial-example-6.html" class="external autonumber" title="http://felix.apache.org/site/apache-felix-tutorial-example-6.html" rel="nofollow">[4]</a>] for simple examples.
</p><p><br />
Ivan Churkin:
It was only a proposal. Maybe you are right and its unnecessary. My reasons was:... It was only a proposal. Maybe you are right and its unnecessary. My reasons was:
It was duplicated code in components - I only extract that code.
The "registry service" allows to encapsulate logic on choosing endpoint service =&gt; The usage is easier. In the example, for finding measure
</p>
<div dir="ltr" style="text-align: left;"><pre class="source-java">IGeometryRegistry registry = <span class="br0">&#40;</span>IGeometryRegistry<span class="br0">&#41;</span>_context.<span class="me1">getService</span><span class="br0">&#40;</span>reference<span class="br0">&#41;</span>
<span class="kw3">Double</span> measure = registry.<span class="me1">getMeasure</span><span class="br0">&#40;</span>o<span class="br0">&#41;</span></pre></div>
<p>its not required to know the type of object to measure for choosing exact service.
</p><p><br />
</p>
<a name="Technical_proposal"></a><h2> <span class="mw-headline"> Technical proposal </span></h2>
<p>The eccenca structure should be flexible, some bundles/services may be installed/added on the fly, other may not present in installation.
There are a lot of tasks that requires flexible access to services. For example to get a JMS queue (from some default and unknown exactly JMS service) or to apply some node transformer during search query processing.
</p><p>In the exact program point service that should be used is unknown exactly but it is known some common characteristic. For example:
</p>
<ol><li> "Its JMS engine"
</li><li> "Its Node Transformer"
</li><li> "Its Transformer"
</li></ol>
<p>It should be declared a common way how to create/access that groups
The idea is very simple. Instead of calling (unknown) service directly it should be asked some (fixed) broker (or registry service) to delegate a task.
</p><p><br />
It was done a utility bundle that makes creating of that groups easy.
HOW to make a service registry and plugins step-by-step with the help of utility classes.
</p>
<ol><li> Create a bundle for a registry service, for example its org.eclipse.eilf.geometry
</li><li> Add dependancy to org.eclipse.eilf.utils bundle
</li><li> Create an interface for plugins
</li></ol>
<p>IGeometry.java
</p>
<div dir="ltr" style="text-align: left;"><pre class="source-java"><span class="kw1">public</span> <span class="kw1">interface</span> IGeometry<span class="br0">&#123;</span>
<span class="kw3">Double</span> getMeasure<span class="br0">&#40;</span><span class="kw3">Object</span> object<span class="br0">&#41;</span>
<span class="br0">&#125;</span></pre></div>
<ol><li> Create an interface for broker (here its inherited from plug-in interface)
</li></ol>
<p>IGeometryRegistry.java
</p>
<div dir="ltr" style="text-align: left;"><pre class="source-java"><span class="kw1">public</span> <span class="kw1">interface</span> IGeometryRegistry <span class="kw1">extends</span> IGeometry<span class="br0">&#123;</span>
<span class="kw3">Double</span> getMeasure<span class="br0">&#40;</span><span class="kw3">Object</span> object<span class="br0">&#41;</span>
... <span class="me1">some</span> other methods
<span class="br0">&#125;</span></pre></div>
<ol><li> do export that interfaces (make it visible to other plugins).
</li></ol>
<ol><li> write a realization of broker by extending abstract class org.eclipse.eilf.utils.service.AbstractRegistryService
</li></ol>
<div dir="ltr" style="text-align: left;"><pre class="source-java"><span class="kw1">public</span> <span class="kw1">class</span> GeometryRegistry <span class="kw1">extends</span> AbstractRegistryService&lt;IGeometry&gt; <span class="kw1">implements</span> IGeometryRegistry<span class="br0">&#123;</span>
&nbsp;
<span class="kw1">public</span> GeometryRegistry<span class="br0">&#40;</span><span class="kw1">final</span> BundleContext context<span class="br0">&#41;</span> <span class="br0">&#123;</span>
<span class="kw1">super</span><span class="br0">&#40;</span>context, IGeometry.<span class="kw1">class</span>.<span class="me1">getName</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;
<span class="br0">&#125;</span>
&nbsp;
&nbsp;
<span class="kw1">private</span> <span class="kw3">String</span> calculateObjectType<span class="br0">&#40;</span><span class="kw3">Object</span> object<span class="br0">&#41;</span>;
&nbsp;
<span class="kw1">public</span> <span class="kw3">Double</span> getMeasure<span class="br0">&#40;</span><span class="kw3">Object</span> object<span class="br0">&#41;</span><span class="br0">&#123;</span>
<span class="kw3">String</span> objectType = calculateObjectType<span class="br0">&#40;</span>object<span class="br0">&#41;</span>;
ServiceReferebce reference = <span class="kw1">this</span>.<span class="me1">findFirstServiceReferenceByName</span><span class="br0">&#40;</span>objectType<span class="br0">&#41;</span>
<span class="kw1">if</span><span class="br0">&#40;</span>reference == <span class="kw2">null</span><span class="br0">&#41;</span><span class="br0">&#123;</span>
<span class="kw1">throw</span> ...;
<span class="br0">&#125;</span>
IGeometry plugin = <span class="kw1">this</span>.<span class="me1">getService</span><span class="br0">&#40;</span>reference<span class="br0">&#41;</span>;
<span class="kw3">Double</span> measure = plugin.<span class="me1">getMeasure</span><span class="br0">&#40;</span>object<span class="br0">&#41;</span>;
<span class="kw1">this</span>.<span class="me1">ungetService</span><span class="br0">&#40;</span>reference<span class="br0">&#41;</span>;
<span class="kw1">return</span> measure;
<span class="br0">&#125;</span>
<span class="br0">&#125;</span></pre></div>
<ol><li> Activate it by extending org.eclipse.eilf.utils.service.AbstractServiceActivator
</li></ol>
<div dir="ltr" style="text-align: left;"><pre class="source-java"><span class="kw1">public</span> <span class="kw1">final</span> <span class="kw1">class</span> <span class="kw3">Activator</span> <span class="kw1">extends</span> AbstractServiceActivator&lt;IGeometryRegistry&gt; <span class="br0">&#123;</span>
&nbsp;
<span class="coMULTI">/*
* (non-Javadoc)
*
* @see org.eclipse.eilf.utils.service.AbstractServiceActivator#getServiceGroupName()
*/</span>
@Override
<span class="kw1">protected</span> <span class="kw1">final</span> <span class="kw3">String</span> getServiceGroupName<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
<span class="kw1">return</span> IGeometryRegistry.<span class="kw1">class</span>.<span class="me1">getName</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;
<span class="br0">&#125;</span>
&nbsp;
<span class="coMULTI">/*
* (non-Javadoc)
*
* @see org.eclipse.eilf.utils.service.AbstractServiceActivator#getServiceSubName()
*/</span>
@Override
<span class="kw1">protected</span> <span class="kw1">final</span> <span class="kw3">String</span> getServiceSubName<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
<span class="kw1">return</span> <span class="kw2">null</span>;
<span class="br0">&#125;</span>
&nbsp;
<span class="coMULTI">/*
* (non-Javadoc)
*
* @see org.eclipse.eilf.utils.service.AbstractServiceActivator#newServiceInstance(org.osgi.framework.BundleContext)
*/</span>
@Override
<span class="kw1">protected</span> IGeometryRegistry newServiceInstance<span class="br0">&#40;</span><span class="kw1">final</span> BundleContext context<span class="br0">&#41;</span> <span class="br0">&#123;</span>
<span class="kw1">return</span> <span class="kw1">new</span> GeometryRegistry<span class="br0">&#40;</span>context<span class="br0">&#41;</span>;
<span class="br0">&#125;</span>
&nbsp;
<span class="br0">&#125;</span></pre></div>
<ol><li> Create a bundle for plug-in service, for example its org.eclipse.eilf.geometry.square
</li><li> Add dependancy to org.eclipse.eilf.utils bundle
</li><li> write a realization of plug-in service
</li></ol>
<div dir="ltr" style="text-align: left;"><pre class="source-java"><span class="kw1">public</span> <span class="kw1">class</span> Square <span class="kw1">implements</span> IGeometry<span class="br0">&#123;</span>
<span class="kw1">public</span> <span class="kw3">Double</span> getMeasure<span class="br0">&#40;</span><span class="kw3">Object</span> object<span class="br0">&#41;</span><span class="br0">&#123;</span>
Square square = <span class="br0">&#40;</span>Square<span class="br0">&#41;</span> object;
<span class="kw1">return</span> square.<span class="me1">x</span> * square.<span class="me1">y</span>;
<span class="br0">&#125;</span>
<span class="br0">&#125;</span></pre></div>
<ol><li> Activate it by extending org.eclipse.eilf.utils.service.AbstractServiceActivator
</li></ol>
<div dir="ltr" style="text-align: left;"><pre class="source-java"><span class="kw1">public</span> <span class="kw1">final</span> <span class="kw1">class</span> <span class="kw3">Activator</span> <span class="kw1">extends</span> AbstractServiceActivator&lt;Square&gt; <span class="br0">&#123;</span>
&nbsp;
<span class="coMULTI">/*
* (non-Javadoc)
*
* @see org.eclipse.eilf.utils.service.AbstractServiceActivator#getServiceGroupName()
*/</span>
@Override
<span class="kw1">protected</span> <span class="kw1">final</span> <span class="kw3">String</span> getServiceGroupName<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
<span class="kw1">return</span> IGeometry.<span class="kw1">class</span>.<span class="me1">getName</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;
<span class="br0">&#125;</span>
&nbsp;
<span class="coMULTI">/*
* (non-Javadoc)
*
* @see org.eclipse.eilf.utils.service.AbstractServiceActivator#getServiceSubName()
*/</span>
@Override
<span class="kw1">protected</span> <span class="kw1">final</span> <span class="kw3">String</span> getServiceSubName<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
<span class="kw1">return</span> <span class="st0">&quot;square&quot;</span>;
<span class="br0">&#125;</span>
&nbsp;
<span class="coMULTI">/*
* (non-Javadoc)
*
* @see org.eclipse.eilf.utils.service.AbstractServiceActivator#newServiceInstance(org.osgi.framework.BundleContext)
*/</span>
@Override
<span class="kw1">protected</span> Square newServiceInstance<span class="br0">&#40;</span><span class="kw1">final</span> BundleContext context<span class="br0">&#41;</span> <span class="br0">&#123;</span>
<span class="kw1">return</span> <span class="kw1">new</span> Square<span class="br0">&#40;</span><span class="br0">&#41;</span>;
<span class="br0">&#125;</span>
&nbsp;
<span class="br0">&#125;</span></pre></div>
<ol><li> example of usage
</li></ol>
<div dir="ltr" style="text-align: left;"><pre class="source-java">....
<span class="me1">IGeometryRegistry</span> registry = <span class="br0">&#40;</span>IGeometryRegistry<span class="br0">&#41;</span>_context.<span class="me1">getService</span><span class="br0">&#40;</span>reference<span class="br0">&#41;</span>
<span class="co1">//it should exists otherwise its critical error</span>
<span class="kw3">Double</span> measure = registry.<span class="me1">getMeasure</span><span class="br0">&#40;</span>o<span class="br0">&#41;</span></pre></div>
<p><br />
</p><p><br />
Sample bundles based on this idea implemented and located in "EILF/trunc"
</p><p>Query processing sample
</p><p>org.eclipse.eilf.query.processing (registry)
org.eclipse.eilf.exampleplugin.query.processing (sample plug-in)
org.eclipse.eilf.query.processing.test (test)
</p><p>JMS access
org.eclipse.eilf.jms (registry)
org.apache.activemq (plug-in)
</p>
<!--
NewPP limit report
Preprocessor node count: 28/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:15320-0!1!0!!en!2!edit=0 and timestamp 20130416061036 -->
<div class="printfooter">
Retrieved from "<a href="OSGi_service_groupping_(service_registry_concept).html">http://wiki.eclipse.org/SMILA/Project_Concepts/OSGi_service_groupping_%28service_registry_concept%29</a>"</div>
<div id="catlinks"><p class='catlinks'><a href="http://wiki.eclipse.org/Special:Categories" title="Special:Categories">Category</a>: <span dir='ltr'><a href="http://wiki.eclipse.org/Category:SMILA" title="Category:SMILA">SMILA</a></span></p></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; 2013 The Eclipse Foundation. All Rights Reserved</span>
<p id="footercredit">This page was last modified 14:40, 17 November 2008 by <a href="http://wiki.eclipse.org/index.php?title=User:Churkin.ivan.gmail.com&amp;action=edit" class="new" title="User:Churkin.ivan.gmail.com">Ivan Churkin</a>. Based on work 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 2,817 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.131 secs. --></body></html>