blob: 8dcea1ba4a424a15c042e0c55a36ef6bf30ab783 [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd";>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<html>
<head>
<link rel="shortcut icon" href="http://aries.apache.org/images/favicon.ico"></link>
<link type="text/css" rel="stylesheet" href="http://aries.apache.org/resources/site.css"></link>
</script><script src="http://aries.apache.org/resources/menus.js" language="javascript" type="text/javascript"></script>
<meta name="keywords" content="..."/>
<meta name="description" content="..." />
<title>
Apache Aries - JNDIProject
</title>
</head>
<body onload="SetMenu()">
<table width="100%" cellpadding="0" cellspacing="0">
<tr width="100%">
<td id="cell-0-0" colspan="2">&nbsp;</td>
<td id="cell-0-1">&nbsp;</td>
<td id="cell-0-2" colspan="2">&nbsp;</td>
</tr>
<tr width="100%">
<td id="cell-1-0">&nbsp;</td>
<td id="cell-1-1">&nbsp;</td>
<td id="cell-1-2">
<div style="padding: 5px;">
<div id="banner">
<!-- Banner -->
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td align="left" class="topbardiv" nowrap="">
<a href="http://aries.apache.org/" title="Apache Aries"> <img border="0" src="http://aries.apache.org/images/Arieslogo_Horizontal.gif"> </a>
</td>
<td align="right" nowrap="">
<a href="http://www.apache.org/" title="The Apache Software Foundation"> <img border="0" src="http://aries.apache.org/images/apache_feather.png"> </a>
</td>
</tr>
</table>
<!-- Banner -->
</div>
</div>
<div id="top-menu">
<table border="0" cellpadding="1" cellspacing="0" width="100%">
<tr>
<td>
<div align="left">
<!-- Breadcrumbs -->
<!-- Breadcrumbs -->
</div>
</td>
<td>
<div align="right">
<!-- Quicklinks -->
<DIV style="padding: 5px 5px 0px 25px;">
<FORM action="http://www.google.com/search" method="get" style="font-size: 10px;">
<A href="http://www.apache.org/licenses/LICENSE-2.0.html" class="external-link" rel="nofollow">License</A>
<INPUT name="ie" type="hidden" value="UTF-8"></INPUT>
<INPUT name="oe" type="hidden" value="UTF-8"></INPUT>
<INPUT maxlength="255" name="q" size="15" type="text" value></INPUT>
<INPUT name="btnG" type="submit" value="Search"></INPUT>
<INPUT name="domains" type="hidden" value="aries.apache.org"></INPUT>
<INPUT name="sitesearch" type="hidden" value="aries.apache.org"></INPUT>
</FORM>
</DIV>
<!-- Quicklinks -->
</div>
</td>
</tr>
</table>
</div>
</td>
<td id="cell-1-3">&nbsp;</td>
<td id="cell-1-4">&nbsp;</td>
</tr>
<tr width="100%">
<td id="cell-2-0" colspan="2">&nbsp;</td>
<td id="cell-2-1">
<table>
<tr height="100%" valign="top">
<td height="100%">
<div id="wrapper-menu-page-right">
<div id="wrapper-menu-page-top">
<div id="wrapper-menu-page-bottom">
<div id="menu-page">
<!-- NavigationBar -->
<style type="text/css">
/* The following code is added by mdx_elementid.py
It was originally lifted from http://subversion.apache.org/style/site.css */
/*
* Hide class="elementid-permalink", except when an enclosing heading
* has the :hover property.
*/
.headerlink, .elementid-permalink {
visibility: hidden;
}
h2:hover > .headerlink, h3:hover > .headerlink, h1:hover > .headerlink, h6:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink, dt:hover > .elementid-permalink { visibility: visible }</style>
<div onclick="SwitchMenu('documentation')" id="documentationTitle" class="menutitle">Documentation</div>
<div id="documentation" class="menuitemgroup">
<div class="menuitem">
<a href="/documentation/integrators-guide.html">Integrators Guide</a>
</div>
<div class="menuitem">
<a href="/documentation/articles.html">Articles</a>
</div>
<div class="menuitem">
<a href="https://svn.apache.org/repos/asf/aries/slides/">Slides</a>
</div>
<div class="menuitem">
<a href="/documentation/tutorials.html">Tutorials</a>
</div>
<div class="menuitem">
<a href="/documentation/tools.html">Tools</a>
</div>
</div>
<div onclick="SwitchMenu('modules')" id="modulesTitle" class="menutitle">Modules</div>
<div id="modules" class="menuitemgroup">
<div class="menuitem">
<a href="/modules/samples.html">Samples</a>
</div>
<div class="menuitem">
<a href="/modules/async-svcs.html">Asynchronous Services</a>
</div>
<div class="menuitem">
<a href="/modules/blueprint.html">Blueprint</a>
</div>
<div class="menuitem">
<a href="/modules/blueprint-maven-plugin.html">Blueprint-maven-plugin</a>
</div>
<div class="menuitem">
<a href="/modules/blueprintannotation.html">Blueprint Annotations</a>
</div>
<div class="menuitem">
<a href="/modules/blueprintnoosgi.html">Blueprint No-OSGi</a>
</div>
<div class="menuitem">
<a href="/modules/blueprintweb.html">Blueprint Web</a>
</div>
<div class="menuitem">
<a href="/modules/containers.html">Containers</a>
</div>
<div class="menuitem">
<a href="/modules/esaanttask.html">ESA Ant Task </a>
</div>
<div class="menuitem">
<a href="/modules/ebamavenpluginproject.html">EBA Maven Plugin </a>
</div>
<div class="menuitem">
<a href="/modules/esamavenpluginproject.html">ESA Maven Plugin </a>
</div>
<div class="menuitem">
<a href="/modules/jmx.html">JMX</a>
</div>
<div class="menuitem">
<a href="/modules/jndiproject.html">JNDI</a>
</div>
<div class="menuitem">
<a href="/modules/jpaproject.html">JPA</a>
</div>
<div class="menuitem">
<a href="/modules/transactioncontrol.html">Transaction Control Service</a>
</div>
<div class="menuitem">
<a href="/modules/transactionsproject.html">Transactions</a>
</div>
<div class="menuitem">
<a href="/modules/rsa.html">Remote Service Admin (RSA)</a>
</div>
<div class="menuitem">
<a href="/modules/spi-fly.html">SPI Fly</a>
</div>
<div class="menuitem">
<a href="/modules/subsystems.html">Subsystems</a>
</div>
<div class="menuitem">
<a href="/modules/applications.html">Applications (obsolete)</a>
</div>
</div>
<div onclick="SwitchMenu('downloads')" id="downloadsTitle" class="menutitle">Downloads</div>
<div id="downloads" class="menuitemgroup">
<div class="menuitem">
<a href="/downloads/currentreleases.html">Current Releases</a>
</div>
<div class="menuitem">
<a href="/downloads/testresults.html">Compliance Tests</a>
</div>
<div class="menuitem">
<a href="/downloads/archived-releases.html">Archived Releases</a>
</div>
</div>
<div onclick="SwitchMenu('community')" id="communityTitle" class="menutitle">Community</div>
<div id="community" class="menuitemgroup">
<div class="menuitem">
<a href="/community/resources.html">Community Resources</a>
</div>
<div class="menuitem">
<a href="/community/gettinginvolved.html">Getting Involved</a>
</div>
<div class="menuitem">
<a href="/community/people.html">Who we are</a>
</div>
<div class="menuitem">
<a href="/community/boardreports.html">Board Reports</a>
</div>
<div class="menuitem">
<a href="/community/logos.html">Logos for Users</a>
</div>
</div>
<div onclick="SwitchMenu('development')" id="developmentTitle" class="menutitle">Development</div>
<div id="development" class="menuitemgroup">
<div class="menuitem">
<a href="/development/buildingaries.html">Building Aries </a>
</div>
<div class="menuitem">
<a href="/development/guidelines.html">Cording Guidelines</a>
</div>
<div class="menuitem">
<a href="/development/architecture.html">Architecture</a>
</div>
<div class="menuitem">
<a href="/development/releasingaries.html">Releasing Aries </a>
</div>
<div class="menuitem">
<a href="/development/compliancetesting.html">OSGi Compliance Tests </a>
</div>
<div class="menuitem">
<a href="/development/maintainingthewebpages.html">Web Site Maintenance </a>
</div>
</div>
<div onclick="SwitchMenu('sponsorship')" id="sponsorshipTitle" class="menutitle">Sponsorship</div>
<div id="sponsorship" class="menuitemgroup">
<div class="menuitem">
<a href="http://www.apache.org/foundation/thanks.html">Thanks</a>
</div>
<div class="menuitem">
<a href="http://www.apache.org/foundation/sponsorship.html">Sponsoring Apache</a>
</div>
</div>
<div class="promotion">
<a href="http://www.apache.org/events/current-event.html">
<img src="http://www.apache.org/events/current-event-125x125.png" width="125" height="125"/>
</a>
</div>
<!-- NavigationBar -->
</div>
</div>
</div>
</div>
</td>
<td height="100%" width="100%">
<!-- Content -->
<div class="wiki-content"><style type="text/css">
/* The following code is added by mdx_elementid.py
It was originally lifted from http://subversion.apache.org/style/site.css */
/*
* Hide class="elementid-permalink", except when an enclosing heading
* has the :hover property.
*/
.headerlink, .elementid-permalink {
visibility: hidden;
}
h2:hover > .headerlink, h3:hover > .headerlink, h1:hover > .headerlink, h6:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink, dt:hover > .elementid-permalink { visibility: visible }</style>
<p><a name="JNDIProject-Overview"></a></p>
<h1 id="jndi">JNDI<a class="headerlink" href="#jndi" title="Permanent link">&para;</a></h1>
<p>The Aries JNDI project aims to provide a fully compliant implementation of
the OSGi Alliance JNDI Service Specification. This specification details
how to advertise InitialContextFactory and ObjectFactories in an OSGi
environment. It also defines how to obtain services from the service
registry via JNDI.</p>
<p><a name="JNDIProject-ServiceRegistryaccessfromJNDI"></a></p>
<h2 id="service-registry-access-from-jndi">Service Registry access from JNDI<a class="headerlink" href="#service-registry-access-from-jndi" title="Permanent link">&para;</a></h2>
<p>The OSGi service registry provides a centralised register/query capability
for OSGi services. A common pattern outside of OSGi is to make use of the
JNDI API to access services from a directory system. The OSGi service
registry can be viewed as an example of such a system. The Aries JNDI
project provides two URL lookup mechanisms via JNDI that can be used to
access the service registry.</p>
<p><a name="JNDIProject-osgi:service"></a></p>
<h2 id="osgiservice">osgi:service<a class="headerlink" href="#osgiservice" title="Permanent link">&para;</a></h2>
<p>The osgi:service lookup scheme is defined by the JNDI Service Specification
and follows the scheme:</p>
<div class="codehilite"><pre><span class="n">osgi</span><span class="o">:</span><span class="n">service</span><span class="sr">/&lt;interface&gt;[/&lt;filter&gt;](/</span><span class="o">&lt;</span><span class="n">filter</span><span class="o">&gt;.</span><span class="n">html</span><span class="o">)</span>
</pre></div>
<p>The interface part is an interface name, like javax.sql.DataSource, or
javax.jms.ConnectionFactory. The filter allows selection based on the
properties of the service.</p>
<p>This example:</p>
<div class="codehilite"><pre><span class="n">Context</span> <span class="n">ctx</span> <span class="p">=</span> <span class="n">new</span> <span class="n">InitialContext</span><span class="p">();</span>
<span class="n">Runnable</span> <span class="n">r</span> <span class="p">=</span> <span class="p">(</span><span class="n">Runnable</span><span class="p">)</span><span class="n">ctx</span><span class="p">.</span><span class="n">lookup</span><span class="p">(</span>&quot;<span class="n">osgi</span><span class="p">:</span><span class="n">service</span><span class="o">/</span><span class="n">java</span><span class="p">.</span><span class="n">lang</span><span class="p">.</span><span class="n">Runnable</span>&quot;<span class="p">);</span>
</pre></div>
<p>is equivalent to this code written to the OSGi service registry API.</p>
<div class="codehilite"><pre><span class="n">BundleContext</span> <span class="n">ctx</span> <span class="p">=</span> <span class="n">getABundleContext</span><span class="p">();</span>
<span class="n">ServiceReference</span> <span class="n">ref</span> <span class="p">=</span> <span class="n">ctx</span><span class="p">.</span><span class="n">getServiceReference</span><span class="p">(</span>&quot;<span class="n">java</span><span class="p">.</span><span class="n">lang</span><span class="p">.</span><span class="n">Runnable</span>&quot;<span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="n">ref</span> !<span class="p">=</span> <span class="n">null</span><span class="p">)</span> <span class="p">{</span>
<span class="n">Runnable</span> <span class="n">r</span> <span class="p">=</span> <span class="n">ctx</span><span class="p">.</span><span class="n">getService</span><span class="p">(</span><span class="n">ref</span><span class="p">);</span>
<span class="p">}</span>
</pre></div>
<p>Lets say you wanted to filter for a Runnable with a property called <em>fred</em>
which was mapped to <em>wilma</em>. You could write</p>
<div class="codehilite"><pre><span class="n">Context</span> <span class="n">ctx</span> <span class="p">=</span> <span class="n">new</span> <span class="n">InitialContext</span><span class="p">();</span>
<span class="n">Runnable</span> <span class="n">r</span> <span class="p">=</span>
<span class="p">(</span><span class="n">Runnable</span><span class="p">)</span><span class="n">ctx</span><span class="p">.</span><span class="n">lookup</span><span class="p">(</span>&quot;<span class="n">osgi</span><span class="p">:</span><span class="n">service</span><span class="o">/</span><span class="n">java</span><span class="p">.</span><span class="n">lang</span><span class="p">.</span><span class="n">Runnable</span><span class="o">/</span><span class="p">(</span><span class="n">fred</span><span class="p">=</span><span class="n">wilma</span><span class="p">)</span>&quot;<span class="p">);</span>
</pre></div>
<p>which is equivalent to:</p>
<div class="codehilite"><pre><span class="n">BundleContext</span> <span class="n">ctx</span> <span class="p">=</span> <span class="n">getABundleContext</span><span class="p">();</span>
<span class="n">ServiceReference</span><span class="p">[](.</span><span class="n">html</span><span class="p">)</span>
<span class="n">refs</span> <span class="p">=</span> <span class="n">ctx</span><span class="p">.</span><span class="n">getServiceReference</span><span class="p">(</span>&quot;<span class="n">java</span><span class="p">.</span><span class="n">lang</span><span class="p">.</span><span class="n">Runnable</span>&quot;<span class="p">,</span> &quot;<span class="p">(</span><span class="n">fred</span><span class="p">=</span><span class="n">wilma</span><span class="p">)</span>&quot;<span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="n">refs</span> !<span class="p">=</span> <span class="n">null</span><span class="p">)</span> <span class="p">{</span>
<span class="n">Runnable</span> <span class="n">r</span> <span class="p">=</span> <span class="n">ctx</span><span class="p">.</span><span class="n">getService</span><span class="p">(</span><span class="n">refs</span><span class="p">[</span><span class="n">refs</span><span class="p">.</span><span class="nb">length</span> <span class="o">-</span> 1<span class="p">](</span><span class="n">refs</span><span class="p">.</span><span class="nb">length</span><span class="o">---</span>1<span class="p">.</span><span class="n">html</span><span class="p">)</span>
<span class="p">);</span>
</pre></div>
<p>}</p>
<p>The osgi:service namepsace returns proxies, so if the Runnable was
unregistered the proxy would switch to an equivalent alternative. If no
such alternative exists then an org.osgi.framework.ServiceException with a
type of ServiceException.UNREGISTERED.</p>
<p><a name="JNDIProject-osgi:servicelist"></a></p>
<h2 id="osgiservicelist">osgi:servicelist<a class="headerlink" href="#osgiservicelist" title="Permanent link">&para;</a></h2>
<p>It is possible that there are multiple services in the registry that match.
In this case the osgi:servicelist lookup scheme can be used. It has the
same format as osgi:service, but it is designed to return multiple.</p>
<p><a name="JNDIProject-aries:services"></a></p>
<h2 id="ariesservices">aries:services<a class="headerlink" href="#ariesservices" title="Permanent link">&para;</a></h2>
<p>The aries:services scheme works in the same way as the osgi:service scheme,
but does not perform proxying. You get the actual object back. Care must be
taken with this approach as the service could be unregistered, but the
client cannot tell to stop using it. As a result it should only be used if
the service is to be used for a short period of time. In addition their is
no way to indicate that the client is no longer using the service, so clean
up cannot occur.</p>
<p><a name="JNDIProject-MoreInformation"></a></p>
<h2 id="more-information">More Information<a class="headerlink" href="#more-information" title="Permanent link">&para;</a></h2>
<p>For more information, check out section "126 JNDI Services Specification
Version 1.0" in the "OSGi Service Platform Enterprise Specification,
Release 4, Version 4.2" available for public download from the <a href="http://www.osgi.org/Download/Release4V42">OSGi Alliance</a>
.</p></div>
<!-- Content -->
</td>
</tr>
</table>
</td>
<td id="cell-2-2" colspan="2">&nbsp;</td>
</tr>
<tr width="100%">
<td id="cell-3-0">&nbsp;</td>
<td id="cell-3-1">&nbsp;</td>
<td id="cell-3-2">
<div id="footer">
<!-- Footer -->
<div id="site-footer">
<a href="http://aries.apache.org/privacy-policy.html";>Privacy
Policy</a>
</div>
<!-- Footer -->
</div>
</td>
<td id="cell-3-3">&nbsp;</td>
<td id="cell-3-4">&nbsp;</td>
</tr>
<tr width="100%">
<td id="cell-4-0" colspan="2">&nbsp;</td>
<td id="cell-4-1">&nbsp;</td>
<td id="cell-4-2" colspan="2">&nbsp;</td>
</tr>
</table>
</body>
</html>