blob: eeffe72d2d685389efe189ff9440a62ddb16eed8 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!--
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.
-->
<head>
<title>Apache Felix - Using iPOJO introspection API</title>
<link rel="icon" href="/res/favicon.ico">
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="The most powerful component model for OSGi">
<link href="/ipojo/web/bootstrap/css/bootstrap-cerulean.css" rel="stylesheet">
<link href="/ipojo/web/bootstrap/css/bootstrap-responsive.css" rel="stylesheet">
<link href="/ipojo/web/bootstrap/css/font-awesome.min.css" rel="stylesheet">
<link href="/ipojo/web/style.css" rel="stylesheet">
<!-- Overide alert's colors -->
<link href="/ipojo/web/bootstrap/css/alert.css" rel="stylesheet">
<link rel="stylesheet" href="/ipojo/web/github.css" type="text/css" media="all">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script src="/ipojo/web/bootstrap/js/bootstrap.min.js"></script>
</head>
<body data-spy="scroll" data-target=".subnav">
<div class="navbar navbar-fixed-top navbar-inverse">
<div class="navbar-inner">
<div class="container">
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</a>
<a class="brand" href="/documentation/subprojects/apache-felix-ipojo.html">Apache Felix iPOJO</a>
<div class="nav-collapse" id="main-menu">
<ul class="nav" id="main-menu-left">
<li><a href="/documentation/subprojects/apache-felix-ipojo/ipojo-news.html">News</a></li>
<li><a href="http://felix.apache.org/downloads.cgi">Downloads</a></li>
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Tutorials <b class="caret"></b></a>
<ul class="dropdown-menu" id="tutorials-menu">
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-why-choose-ipojo.html">Why choose iPOJO</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-successstories.html">Success stories</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-feature-overview.html">Features</a></li>
<li class="divider"></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-gettingstarted/ipojo-in-10-minutes.html">iPOJO in 10 minutes</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-gettingstarted/how-to-use-ipojo-annotations.html">Using Annotations</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-gettingstarted/ipojo-hello-word-maven-based-tutorial.html">Maven tutorial</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-gettingstarted/ipojo-advanced-tutorial.html">Advanced tutorial</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-gettingstarted/apache-felix-ipojo-dosgi.html">Using Distributed OSGi</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-gettingstarted/ipojo-composition-tutorial.html">Application Composition</a></li>
</ul>
</li>
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Documentation <b class="caret"></b></a>
<ul class="dropdown-menu" id="user-guide-menu">
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/describing-components/service-requirement-handler.html">Requiring a service</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/describing-components/providing-osgi-services.html">Providing a service</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/describing-components/lifecycle-callback-handler.html">Lifecycle management</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/describing-components/configuration-handler.html">Configuration</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/describing-components/architecture-handler.html">Introspection</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/describing-components/controller-lifecycle-handler.html">Impacting the lifecycle</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/describing-components/injecting-bundle-context.html">Accessing the Bundle Context</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/apache-felix-ipojo-instances.html">Creating instances</a></li>
<li class="divider"></li>
<li class="dropdown-submenu">
<a tabindex="-1" href="#">External <em>handlers</em></a>
<ul class="dropdown-menu">
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/describing-components/event-admin-handlers.html">Asynchronous communication</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/describing-components/ipojo-jmx-handler.html">JMX management</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/describing-components/extender-pattern-handler.html">Extender pattern</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/describing-components/white-board-pattern-handler.html">Whiteboard pattern</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/describing-components/temporal-service-dependency.html">Temporal dependencies</a></li>
</ul>
</li>
<li class="dropdown-submenu">
<a tabindex="-1" href="#">Configuration Admin &amp; Factories</a>
<ul class="dropdown-menu">
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/ipojo-advanced-topics/combining-ipojo-and-configuration-admin.html">iPOJO and config admin</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/ipojo-advanced-topics/ipojo-factory-service.html">Using the iPOJO Factory service</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/ipojo-advanced-topics/how-to-use-ipojo-factories.html">Factories and Instances</a></li>
</ul>
</li>
<li class="divider"></li>
<li class="dropdown-submenu">
<a tabindex="-1" href="#">Advanced topics</a>
<ul class="dropdown-menu">
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/instance-vs-service-controller.html">Instance vs. Service Controllers</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/ipojo-advanced-topics/service-binding-interceptors.html">Service Binding Interceptors</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/using-xml-schemas.html">XML Schemas</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/apache-felix-ipojo-api.html">Using the iPOJO API</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/ipojo-advanced-topics/constructing-pojo-objects-with-factory-methods.html">Constructing service objects with factory methods</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/ipojo-advanced-topics/using-ipojo-introspection-api.html">Using the introspection API</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-testing-components.html">Testing components</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/ipojo-advanced-topics/using-stereotypes.html">Using @Stereotypes</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-eclipse-integration.html">Eclipse Integration</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/ipojo-advanced-topics/ipojo-extender-configuration.html">Configuring iPOJO's Extender</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/ipojo-faq.html">FAQ</a></li>
<li class="divider"></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-devguide/how-to-write-your-own-handler.html">Handler development</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-devguide/how-to-use-ipojo-manipulation-metadata.html">Manipulation Metadata </a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-devguide/dive-into-the-ipojo-manipulation-depths.html">Dive into the iPOJO Manipulation depths</a></li>
<li><a href="http://felix.apache.org/ipojo/api/1.12.1">Javadoc</a></li>
</ul>
</li>
</ul>
</li>
<li class="dropdown" id="tools-menu">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Tools <b class="caret"></b></a>
<ul class="dropdown-menu" id="swatch-menu">
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-tools/ipojo-ant-task.html">Ant Task</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-tools/ipojo-maven-plug-in.html">Maven Plugin</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-tools/ipojo-arch-command.html">Architecture commands</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-tools/apache-felix-ipojo-online-manipulator.html">Online Manipulator</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-tools/ipojo-webconsole-plugin.html">Webconsole plugin</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-tools/ipojo-karaf-feature.html">Apache Karaf Features</a></li>
</ul>
</li>
<li class="dropdown" id="community-menu">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Community <b class="caret"></b></a>
<ul class="dropdown-menu" id="swatch-menu">
<li><a href="/documentation/subprojects/apache-felix-ipojo/ipojo-support.html">Support</a></li>
<li><a href="http://www.apache.org/">ASF</a></li>
<li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
<li><a href="http://www.apache.org/foundation/thanks.html">Sponsors</a></li>
</ul>
</li>
<li class="dropdown" id="misc-menu">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Misc <b class="caret"></b></a>
<ul class="dropdown-menu" id="swatch-menu">
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-supportedvms.html">Supported JVMs</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-supportedosgi.html">Supported OSGi Implementations</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/articles-and-presentations.html">Article & Presentations</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/developing-camel-mediators-with-ipojo.html">Developping Camel mediators with iPOJO</a></li>
</ul>
</li>
</ul>
<ul class="nav pull-right" id="main-menu-right">
<li><a rel="tooltip" target="_blank" href="http://felix.apache.org">Apache Felix <i class="icon-share-alt"></i></a></li>
</ul>
</div>
</div>
</div>
</div>
<div class="container">
<div class="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>
<h1 id="introspecting-instances">Introspecting instances<a class="headerlink" href="#introspecting-instances" title="Permanent link">&para;</a></h1>
<p><em>iPOJO provides mechanisms to introspect and reconfigure instances. Those features are available from the instance description. Currently, only the reconfiguration of primitive instances is supported.</em></p>
<div class="toc">
<ul>
<li><a href="#introspecting-instances">Introspecting instances</a><ul>
<li><a href="#getting-instance-descriptions">Getting instance descriptions</a></li>
<li><a href="#introspecting-primitive-instances">Introspecting primitive instances</a></li>
<li><a href="#manipulating-dependencies">Manipulating dependencies</a></li>
<li><a href="#manipulating-provided-services">Manipulating provided services</a></li>
<li><a href="#manipulating-configuration-properties">Manipulating configuration properties</a></li>
</ul>
</li>
</ul>
</div>
<h2 id="getting-instance-descriptions">Getting instance descriptions<a class="headerlink" href="#getting-instance-descriptions" title="Permanent link">&para;</a></h2>
<p>There is two way to get the instance description:
<em> By using the <code>architecture</code> service exposed by an instance providing introspection support.
</em> By calling the <code>getInstanceDescription()</code> method on a ComponentInstance object (that you create thanks to a Factory)</p>
<div class="codehilite"><pre><span class="cm">/**</span>
<span class="cm"> * Returns the instance description.</span>
<span class="cm"> * @return the instance description of the current instance</span>
<span class="cm"> */</span>
<span class="n">InstanceDescription</span> <span class="nf">getInstanceDescription</span><span class="o">();</span>
</pre></div>
<h2 id="introspecting-primitive-instances">Introspecting primitive instances<a class="headerlink" href="#introspecting-primitive-instances" title="Permanent link">&para;</a></h2>
<p>Once you get the object, cast it in (be sure that it is really a primitive instance).
Then, you have access to every primitive instance aspects:</p>
<ul>
<li>service dependencies</li>
<li>provided services</li>
<li>configuration properties</li>
<li>get created implementation objects</li>
</ul>
<p>&nbsp;</p>
<div class="codehilite"><pre><span class="cm">/**</span>
<span class="cm"> * Gets the list of object created by the described instance.</span>
<span class="cm"> * @return the created objects.</span>
<span class="cm"> */</span>
<span class="kd">public</span> <span class="n">String</span><span class="o">[]</span> <span class="nf">getCreatedObjects</span><span class="o">()</span> <span class="o">{</span>
<span class="o">...</span>
<span class="o">}</span>
<span class="cm">/**</span>
<span class="cm"> * Gets the instance service dependencies.</span>
<span class="cm"> * @return the set of dependency description or an empty array if</span>
<span class="cm"> * no dependencies.</span>
<span class="cm"> */</span>
<span class="kd">public</span> <span class="n">DependencyDescription</span><span class="o">[]</span> <span class="nf">getDependencies</span><span class="o">()</span> <span class="o">{</span>
<span class="o">...</span>
<span class="o">}</span>
<span class="cm">/**</span>
<span class="cm"> * Gets the instance service dependency matching with the given service specification or id.</span>
<span class="cm"> * @param specification the service specification of the looked specification.</span>
<span class="cm"> * @return the dependency description matching with the given service specification or id.</span>
<span class="cm"> * &lt;code&gt;null&lt;/code&gt; is not found.</span>
<span class="cm"> * no dependencies.</span>
<span class="cm"> */</span>
<span class="kd">public</span> <span class="n">DependencyDescription</span> <span class="nf">getDependency</span><span class="o">(</span><span class="n">String</span> <span class="n">specification</span><span class="o">)</span> <span class="o">{</span>
<span class="o">...</span>
<span class="o">}</span>
<span class="cm">/**</span>
<span class="cm"> * Gets the instance provided service matching with the given service specification.</span>
<span class="cm"> * @param specification the provided specification of the looked provided service.</span>
<span class="cm"> * @return the provided service description matching with the given service specification.</span>
<span class="cm"> * &lt;code&gt;null&lt;/code&gt; is not found.</span>
<span class="cm"> */</span>
<span class="kd">public</span> <span class="n">ProvidedServiceDescription</span> <span class="nf">getProvidedService</span><span class="o">(</span><span class="n">String</span> <span class="n">specification</span><span class="o">)</span> <span class="o">{</span>
<span class="o">...</span>
<span class="o">}</span>
<span class="cm">/**</span>
<span class="cm"> * Gets the instance provided service.</span>
<span class="cm"> * @return the set of provided service description or an empty array if</span>
<span class="cm"> * no provided services.</span>
<span class="cm"> */</span>
<span class="kd">public</span> <span class="n">ProvidedServiceDescription</span><span class="o">[]</span> <span class="nf">getProvidedServices</span><span class="o">()</span> <span class="o">{</span>
<span class="o">...</span>
<span class="o">}</span>
<span class="cm">/**</span>
<span class="cm"> * Gets the instance properties.</span>
<span class="cm"> * @return the set of property descriptions or an empty array if</span>
<span class="cm"> * no properties.</span>
<span class="cm"> */</span>
<span class="kd">public</span> <span class="n">PropertyDescription</span><span class="o">[]</span> <span class="nf">getProperties</span><span class="o">()</span> <span class="o">{</span>
<span class="o">...</span>
<span class="o">}</span>
</pre></div>
<h2 id="manipulating-dependencies">Manipulating dependencies<a class="headerlink" href="#manipulating-dependencies" title="Permanent link">&para;</a></h2>
<p>You can get service dependencies from the <code>PrimitiveInstanceDescription</code>. Once you get the dependency (<code>DependencyDescription</code> object that you want to manipulate you can call one of those method on it:</p>
<div class="codehilite"><pre><span class="kd">public</span> <span class="kt">boolean</span> <span class="nf">isMultiple</span><span class="o">()</span> <span class="o">{</span> <span class="o">...</span> <span class="o">}</span>
<span class="kd">public</span> <span class="kt">boolean</span> <span class="nf">isOptional</span><span class="o">()</span> <span class="o">{</span> <span class="o">...</span> <span class="o">}</span>
<span class="kd">public</span> <span class="n">String</span> <span class="nf">getFilter</span><span class="o">()</span> <span class="o">{</span> <span class="o">...</span> <span class="o">}</span>
<span class="kd">public</span> <span class="n">String</span> <span class="nf">getInterface</span><span class="o">()</span> <span class="o">{</span> <span class="o">...</span> <span class="o">}</span>
<span class="kd">public</span> <span class="kt">int</span> <span class="nf">getState</span><span class="o">()</span> <span class="o">{</span> <span class="o">...</span> <span class="o">}</span>
<span class="kd">public</span> <span class="n">String</span> <span class="nf">getId</span><span class="o">()</span> <span class="o">{</span> <span class="o">...</span> <span class="o">}</span>
<span class="kd">public</span> <span class="kt">boolean</span> <span class="nf">supportsNullable</span><span class="o">()</span> <span class="o">{</span> <span class="o">...</span> <span class="o">}</span>
<span class="kd">public</span> <span class="n">String</span> <span class="nf">getDefaultImplementation</span><span class="o">()</span> <span class="o">{</span> <span class="o">...</span> <span class="o">}</span>
<span class="kd">public</span> <span class="kt">int</span> <span class="nf">getPolicy</span><span class="o">()</span> <span class="o">{</span> <span class="o">...</span> <span class="o">}</span>
<span class="kd">public</span> <span class="n">String</span> <span class="nf">getComparator</span><span class="o">()</span> <span class="o">{</span> <span class="o">...</span> <span class="o">}</span>
<span class="kd">public</span> <span class="kt">boolean</span> <span class="nf">isFrozen</span><span class="o">()</span> <span class="o">{</span> <span class="o">...</span> <span class="o">}</span>
<span class="cm">/**</span>
<span class="cm"> * Gets the service reference list.</span>
<span class="cm"> * @return the list of matching service reference,</span>
<span class="cm"> * &lt;code&gt;null&lt;/code&gt; if no service reference.</span>
<span class="cm"> */</span>
<span class="kd">public</span> <span class="n">List</span> <span class="nf">getServiceReferences</span><span class="o">()</span> <span class="o">{</span> <span class="o">...</span> <span class="o">}</span>
<span class="cm">/**</span>
<span class="cm"> * Gets the service reference if only one service reference is used.</span>
<span class="cm"> * @return the ServiceReference (only if the cardinality could be 1),</span>
<span class="cm"> * or &lt;code&gt;null&lt;/code&gt; if no service reference.</span>
<span class="cm"> */</span>
<span class="kd">public</span> <span class="n">ServiceReference</span> <span class="nf">getServiceReference</span><span class="o">()</span> <span class="o">{</span> <span class="o">...</span> <span class="o">}</span>
<span class="cm">/**</span>
<span class="cm"> * Gets the used service set.</span>
<span class="cm"> * @return the list [service reference]() containing the used services,</span>
<span class="cm"> * &lt;code&gt;null&lt;/code&gt; if no providers are used</span>
<span class="cm"> */</span>
<span class="kd">public</span> <span class="n">List</span> <span class="nf">getUsedServices</span><span class="o">()</span> <span class="o">{</span> <span class="o">...</span> <span class="o">}</span>
<span class="cm">/**</span>
<span class="cm"> * Sets the dependency comparator.</span>
<span class="cm"> * The reference set will be sort at the next usage.</span>
<span class="cm"> * @param cmp the comparator</span>
<span class="cm"> */</span>
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">setComparator</span><span class="o">(</span><span class="n">Comparator</span> <span class="n">cmp</span><span class="o">)</span> <span class="o">{</span> <span class="o">...</span> <span class="o">}</span>
<span class="cm">/**</span>
<span class="cm"> * Sets the dependency filter.</span>
<span class="cm"> * @param filter the new LDAP filter</span>
<span class="cm"> */</span>
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">setFilter</span><span class="o">(</span><span class="n">Filter</span> <span class="n">filter</span><span class="o">)</span> <span class="o">{</span> <span class="o">...</span> <span class="o">}</span>
<span class="cm">/**</span>
<span class="cm"> * Sets the dependency cardinality.</span>
<span class="cm"> * @param isAgg if &lt;code&gt;true&lt;/code&gt; sets the dependency to aggregate,</span>
<span class="cm"> * if &lt;code&gt;false&lt;/code&gt; sets the dependency to scalar.</span>
<span class="cm"> */</span>
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">setAggregate</span><span class="o">(</span><span class="kt">boolean</span> <span class="n">isAgg</span><span class="o">)</span> <span class="o">{</span> <span class="o">...</span> <span class="o">}</span>
<span class="cm">/**</span>
<span class="cm"> * Sets the dependency optionality.</span>
<span class="cm"> * @param isOpt if &lt;code&gt;true&lt;/code&gt; sets the dependency to optional,</span>
<span class="cm"> * if &lt;code&gt;false&lt;/code&gt; sets the dependency to mandatory.</span>
<span class="cm"> */</span>
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">setOptional</span><span class="o">(</span><span class="kt">boolean</span> <span class="n">isOpt</span><span class="o">)</span> <span class="o">{</span> <span class="o">...</span> <span class="o">}</span>
<span class="cm">/**</span>
<span class="cm"> * Gets the required service specification name.</span>
<span class="cm"> * @return the required service specification class name.</span>
<span class="cm"> */</span>
<span class="kd">public</span> <span class="n">String</span> <span class="nf">getSpecification</span><span class="o">()</span> <span class="o">{</span> <span class="o">...</span> <span class="o">}</span>
</pre></div>
<p>These methods allows getting the dependency state as well as reconfiguring the dependency by setting a new filter... </p>
<p>There is a slightly difference between the <code>getServiceReference(s)</code> methods and the <code>getUsedServices</code> method. The first ones returns the list of matching provider. The second one returns the list of currently used providers. </p>
<h2 id="manipulating-provided-services">Manipulating provided services<a class="headerlink" href="#manipulating-provided-services" title="Permanent link">&para;</a></h2>
<p>You also can manipulate provided services . </p>
<div class="codehilite"><pre><span class="cm">/**</span>
<span class="cm"> * Gets the list of provided service specifications.</span>
<span class="cm"> * @return the provided contract name.</span>
<span class="cm"> */</span>
<span class="kd">public</span> <span class="n">String</span><span class="o">[]</span> <span class="nf">getServiceSpecifications</span><span class="o">()</span> <span class="o">{</span> <span class="o">...</span> <span class="o">}</span>
<span class="cm">/**</span>
<span class="cm"> * Gets the list of properties.</span>
<span class="cm"> * A copy of the actual property set is returned.</span>
<span class="cm"> * @return the properties.</span>
<span class="cm"> */</span>
<span class="kd">public</span> <span class="n">Properties</span> <span class="nf">getProperties</span><span class="o">()</span> <span class="o">{</span> <span class="o">...</span> <span class="o">}</span>
<span class="cm">/**</span>
<span class="cm"> * Adds and Updates service properties.</span>
<span class="cm"> * Existing properties are updated. </span>
<span class="cm"> * New ones are added.</span>
<span class="cm"> * @param props the new properties</span>
<span class="cm"> */</span>
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">addProperties</span><span class="o">(</span><span class="n">Dictionary</span> <span class="n">props</span><span class="o">)</span> <span class="o">{</span> <span class="o">...</span> <span class="o">}</span>
<span class="cm">/**</span>
<span class="cm"> * Removes service properties.</span>
<span class="cm"> * @param props the properties to remove</span>
<span class="cm"> */</span>
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">removeProperties</span><span class="o">(</span><span class="n">Dictionary</span> <span class="n">props</span><span class="o">)</span> <span class="o">{</span> <span class="o">...</span> <span class="o">}</span>
<span class="cm">/**</span>
<span class="cm"> * Gets provided service state.</span>
<span class="cm"> * @return the state of the provided service (UNREGISTERED | REGISTRED).</span>
<span class="cm"> */</span>
<span class="kd">public</span> <span class="kt">int</span> <span class="nf">getState</span><span class="o">()</span> <span class="o">{</span> <span class="o">...</span> <span class="o">}</span>
<span class="cm">/**</span>
<span class="cm"> * Gets the service reference.</span>
<span class="cm"> * @return the service reference (null if the service is unregistered).</span>
<span class="cm"> */</span>
<span class="kd">public</span> <span class="n">ServiceReference</span> <span class="nf">getServiceReference</span><span class="o">()</span> <span class="o">{</span> <span class="o">...</span> <span class="o">}</span>
<span class="cm">/**</span>
<span class="cm"> * Gets the &#39;main&#39; service object.</span>
<span class="cm"> * @return the &#39;main&#39; service object or &lt;code&gt;null&lt;/code&gt;</span>
<span class="cm"> * if no service object are created.</span>
<span class="cm"> */</span>
<span class="kd">public</span> <span class="n">Object</span> <span class="nf">getService</span><span class="o">()</span> <span class="o">{</span> <span class="o">...</span> <span class="o">}</span>
<span class="kd">public</span> <span class="n">Object</span><span class="o">[]</span> <span class="nf">getServices</span><span class="o">()</span> <span class="o">{</span> <span class="o">...</span> <span class="o">}</span>
</pre></div>
<p>Thanks to these method, you can get service objects, get the registered services, and manipulate service properties.</p>
<h2 id="manipulating-configuration-properties">Manipulating configuration properties<a class="headerlink" href="#manipulating-configuration-properties" title="Permanent link">&para;</a></h2>
<p>The last think that you can do from the <code>PrimitiveInstanceDescription</code> is to get configuration properties (<code>PropertyDescription</code>). </p>
<div class="codehilite"><pre><span class="cm">/**</span>
<span class="cm"> * Gets the current property name.</span>
<span class="cm"> * @return the property name.</span>
<span class="cm"> */</span>
<span class="kd">public</span> <span class="n">String</span> <span class="nf">getName</span><span class="o">()</span> <span class="o">{</span> <span class="o">...</span> <span class="o">}</span>
<span class="cm">/**</span>
<span class="cm"> * Gets the current property type.</span>
<span class="cm"> * @return the property type.</span>
<span class="cm"> */</span>
<span class="kd">public</span> <span class="n">String</span> <span class="nf">getType</span><span class="o">()</span> <span class="o">{</span> <span class="o">...</span> <span class="o">}</span>
<span class="cm">/**</span>
<span class="cm"> * Gets the current property value.</span>
<span class="cm"> * @return the default value for the property,</span>
<span class="cm"> * &lt;code&gt;null&lt;/code&gt; if the property hasn&#39;t a value..</span>
<span class="cm"> */</span>
<span class="kd">public</span> <span class="n">String</span> <span class="nf">getValue</span><span class="o">()</span> <span class="o">{</span> <span class="o">...</span> <span class="o">}</span>
<span class="cm">/**</span>
<span class="cm"> * Sets the property value.</span>
<span class="cm"> * This method can only be called on &#39;living&#39; property</span>
<span class="cm"> * (properties with a {@link Property} object).</span>
<span class="cm"> * @param value the new value.</span>
<span class="cm"> */</span>
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">setValue</span><span class="o">(</span><span class="n">Object</span> <span class="n">value</span><span class="o">)</span> <span class="o">{</span> <span class="o">...</span> <span class="o">}</span>
</pre></div>
<p>With these methods you can get a property object and update its value dynamically. </p>
</div>
</div>
<hr/>
<div class="container">
<footer id="footer">
<div class="row">
<div class="trademarkFooter span7">
Apache Felix, Felix, Apache, the Apache feather logo, and the Apache Felix project
logo are trademarks of The Apache Software Foundation. All other marks mentioned
may be trademarks or registered trademarks of their respective owners.
</div>
<div class="timestamp span3 offset2">
Rev. 1700393 by cziegeler on Tue, 1 Sep 2015 06:04:06 +0000
</div>
</div>
</footer>
</div>
</body>
<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">
try{
var pageTracker = _gat._getTracker("UA-1518442-4");
pageTracker._trackPageview();
} catch(err) {}
</script>
</html>