| <!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 |
| |
| https://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 - Dependency Manager - Resource Dependency</title> |
| <link rel="icon" href="/res/favicon.ico"> |
| <link rel="stylesheet" href="/res/site.css" type="text/css" media="all"> |
| <link rel="stylesheet" href="/res/codehilite.css" type="text/css" media="all"> |
| <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> |
| </head> |
| <body> |
| <div class="title"> |
| <div class="logo"> |
| <a href="https://felix.apache.org/"> |
| <img border="0" alt="Apache Felix" src="/res/logo.png"> |
| </a> |
| </div> |
| <div class="header"> |
| <a href="https://www.apache.org/"> |
| <img border="0" alt="Apache" src="/res/apache.png"> |
| </a> |
| </div> |
| </div> |
| |
| <div class="menu"> |
| <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 href="/news.html">News</a> <br /> |
| <a href="/license.html">License</a> <br /> |
| <a href="/downloads.cgi">Downloads</a> <br /> |
| <a href="/documentation.html">Documentation</a> <br /> |
| <a href="/documentation/community/project-info.html">Project Info</a> <br /> |
| <a href="/documentation/community/contributing.html">Contributing</a> <br /> |
| <a href="/sitemap.html">Site Map</a> <br /> |
| <a href="https://www.apache.org/">ASF</a> <br /> |
| <a href="https://www.apache.org/security/">Security</a> <br /> |
| <a href="https://www.apache.org/foundation/sponsorship.html">Sponsorship</a> <br /> |
| <a href="https://www.apache.org/foundation/thanks.html">Sponsors</a> </p> |
| <iframe |
| src="https://www.apache.org/ads/button.html" |
| style="border-width:0; float: left" |
| frameborder="0" |
| scrolling="no" |
| width="135" |
| height="135"> |
| </iframe> |
| </div> |
| |
| <div class="main"> |
| <div class="breadcrump" style="font-size: 80%;"> |
| <a href="/">Home</a> » <a href="/documentation.html">Documentation</a> » <a href="/documentation/subprojects/apache-felix-dependency-manager.html">Apache Felix Dependency Manager</a> |
| </div> |
| |
| <h1>Dependency Manager - Resource Dependency</h1> |
| <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 resource dependency allows you to depend on a resource. A resource is a URL and you can use a filter |
| condition based on protocol, host, port, path and URL.</p> |
| <p>To define a resource dependency, you need to use the <a href="http://felix.apache.org/apidocs/dependencymanager/r13/org/apache/felix/dm/ResourceDependency.html">ResourceDependecy</a> interface. |
| This interface can be created using DependencyActivatorBase.createResourceDependency() or DependencyManager.createResourceDependency() methods;</p> |
| <p>Here is an example where a bundle activation declares a VideoPlayer component which depends on a resource URL. |
| The component uses an optional dependency callback, which is invoked each time an URL is registered.</p> |
| <div class="codehilite"><pre><span class="kd">public</span> <span class="kd">class</span> <span class="nc">Activator</span> <span class="kd">extends</span> <span class="n">DependencyActivatorBase</span> <span class="o">{</span> |
| <span class="nd">@Override</span> |
| <span class="kd">public</span> <span class="kt">void</span> <span class="nf">init</span><span class="o">(</span><span class="n">BundleContext</span> <span class="n">ctx</span><span class="o">,</span> <span class="n">DependencyManager</span> <span class="n">dm</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">Exception</span> <span class="o">{</span> |
| <span class="n">Component</span> <span class="n">videoPlayer</span> <span class="o">=</span> <span class="n">createComponent</span><span class="o">()</span> |
| <span class="o">.</span><span class="na">setImplementation</span><span class="o">(</span><span class="n">VideoPlayer</span><span class="o">.</span><span class="na">class</span><span class="o">)</span> |
| <span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="n">createResourceDependency</span><span class="o">().</span><span class="na">setFilter</span><span class="o">(</span><span class="s">"(&(path=/path/to/*.txt)(host=localhost))"</span><span class="o">).</span><span class="na">setCallbacks</span><span class="o">(</span><span class="s">"play"</span><span class="o">,</span> <span class="kc">null</span><span class="o">));</span> |
| <span class="n">dm</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="n">videoPlayer</span><span class="o">);</span> |
| <span class="o">}</span> |
| <span class="o">}</span> |
| |
| <span class="kd">public</span> <span class="kd">class</span> <span class="nc">VideoPlayer</span> <span class="o">{</span> |
| <span class="kt">void</span> <span class="nf">play</span><span class="o">(</span><span class="n">URL</span> <span class="n">url</span><span class="o">)</span> <span class="o">{</span> |
| <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">"play: "</span> <span class="o">+</span> <span class="n">url</span><span class="o">);</span> |
| |
| <span class="o">}</span> |
| <span class="o">}</span> |
| </pre></div> |
| |
| |
| <p>And here is a component which registers some URL resources:</p> |
| <div class="codehilite"><pre><span class="kd">public</span> <span class="kd">class</span> <span class="nc">Activator</span> <span class="kd">extends</span> <span class="n">DependencyActivatorBase</span> <span class="o">{</span> |
| <span class="nd">@Override</span> |
| <span class="kd">public</span> <span class="kt">void</span> <span class="nf">init</span><span class="o">(</span><span class="n">BundleContext</span> <span class="n">ctx</span><span class="o">,</span> <span class="n">DependencyManager</span> <span class="n">dm</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">Exception</span> <span class="o">{</span> |
| <span class="c1">// add resource provider</span> |
| <span class="n">URL</span><span class="o">[]</span> <span class="n">resourceURLs</span> <span class="o">=</span> <span class="k">new</span> <span class="n">URL</span><span class="o">[]</span> <span class="o">{</span> |
| <span class="k">new</span> <span class="nf">URL</span><span class="o">(</span><span class="s">"file://localhost/path/to/file1.txt"</span><span class="o">),</span> |
| <span class="k">new</span> <span class="nf">URL</span><span class="o">(</span><span class="s">"file://localhost/path/to/file2.txt"</span><span class="o">)</span> |
| <span class="o">};</span> |
| |
| <span class="n">Component</span> <span class="n">resourceProvider</span> <span class="o">=</span> <span class="n">createComponent</span><span class="o">()</span> |
| <span class="o">.</span><span class="na">setImplementation</span><span class="o">(</span><span class="k">new</span> <span class="n">ResourceProvider</span><span class="o">(</span><span class="n">ctx</span><span class="o">,</span> <span class="n">resourceURLs</span><span class="o">))</span> |
| <span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="n">dm</span><span class="o">.</span><span class="na">createServiceDependency</span><span class="o">().</span><span class="na">setService</span><span class="o">(</span><span class="n">ResourceHandler</span><span class="o">.</span><span class="na">class</span><span class="o">).</span><span class="na">setCallbacks</span><span class="o">(</span><span class="s">"add"</span><span class="o">,</span> <span class="s">"remove"</span><span class="o">));</span> |
| <span class="n">dm</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="n">resourceProvider</span><span class="o">);</span> |
| <span class="o">}</span> |
| <span class="o">}</span> |
| |
| <span class="kd">class</span> <span class="nc">ResourceProvider</span> <span class="o">{</span> |
| <span class="kd">final</span> <span class="n">URL</span><span class="o">[]</span> <span class="n">m_resources</span><span class="o">;</span> |
| <span class="kd">final</span> <span class="n">BundleContext</span> <span class="n">m_context</span><span class="o">;</span> |
| <span class="kd">final</span> <span class="n">Map</span><span class="o"><</span><span class="n">ResourceHandler</span><span class="o">,</span> <span class="n">Filter</span><span class="o">></span> <span class="n">m_handlers</span> <span class="o">=</span> <span class="k">new</span> <span class="n">HashMap</span><span class="o"><>();</span> |
| |
| <span class="n">ResourceProvider</span><span class="o">(</span><span class="n">BundleContext</span> <span class="n">ctx</span><span class="o">,</span> <span class="n">URL</span> <span class="o">...</span> <span class="n">resources</span><span class="o">)</span> <span class="o">{</span> |
| <span class="n">m_context</span> <span class="o">=</span> <span class="n">ctx</span><span class="o">;</span> |
| <span class="n">m_resources</span> <span class="o">=</span> <span class="n">resources</span><span class="o">;</span> |
| <span class="o">}</span> |
| |
| <span class="kd">public</span> <span class="kt">void</span> <span class="nf">add</span><span class="o">(</span><span class="n">ServiceReference</span><span class="o"><?></span> <span class="n">ref</span><span class="o">,</span> <span class="n">ResourceHandler</span> <span class="n">handler</span><span class="o">)</span> <span class="o">{</span> |
| <span class="n">String</span> <span class="n">filterString</span> <span class="o">=</span> <span class="o">(</span><span class="n">String</span><span class="o">)</span> <span class="n">ref</span><span class="o">.</span><span class="na">getProperty</span><span class="o">(</span><span class="s">"filter"</span><span class="o">);</span> |
| <span class="n">Filter</span> <span class="n">filter</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span> |
| <span class="k">if</span> <span class="o">(</span><span class="n">filterString</span> <span class="o">!=</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span> |
| <span class="k">try</span> <span class="o">{</span> |
| <span class="n">filter</span> <span class="o">=</span> <span class="n">m_context</span><span class="o">.</span><span class="na">createFilter</span><span class="o">(</span><span class="n">filterString</span><span class="o">);</span> |
| <span class="o">}</span> |
| <span class="k">catch</span> <span class="o">(</span><span class="n">InvalidSyntaxException</span> <span class="n">e</span><span class="o">)</span> <span class="o">{</span> |
| <span class="k">return</span><span class="o">;</span> |
| <span class="o">}</span> |
| <span class="o">}</span> |
| <span class="k">for</span> <span class="o">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="o">;</span> <span class="n">i</span> <span class="o"><</span> <span class="n">m_resources</span><span class="o">.</span><span class="na">length</span><span class="o">;</span> <span class="n">i</span><span class="o">++)</span> <span class="o">{</span> |
| <span class="k">if</span> <span class="o">(</span><span class="n">filter</span> <span class="o">==</span> <span class="kc">null</span> <span class="o">||</span> <span class="n">filter</span><span class="o">.</span><span class="na">match</span><span class="o">((</span><span class="n">Dictionary</span><span class="o"><</span><span class="n">String</span><span class="o">,</span> <span class="o">?>)</span> <span class="n">ResourceUtil</span><span class="o">.</span><span class="na">createProperties</span><span class="o">(</span><span class="n">m_resources</span><span class="o">[</span><span class="n">i</span><span class="o">])))</span> <span class="o">{</span> |
| <span class="kd">synchronized</span> <span class="o">(</span><span class="n">m_handlers</span><span class="o">)</span> <span class="o">{</span> |
| <span class="n">m_handlers</span><span class="o">.</span><span class="na">put</span><span class="o">(</span><span class="n">handler</span><span class="o">,</span> <span class="n">filter</span><span class="o">);</span> |
| <span class="o">}</span> |
| <span class="n">handler</span><span class="o">.</span><span class="na">added</span><span class="o">(</span><span class="n">m_resources</span><span class="o">[</span><span class="n">i</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">void</span> <span class="nf">remove</span><span class="o">(</span><span class="n">ServiceReference</span><span class="o"><?></span> <span class="n">ref</span><span class="o">,</span> <span class="n">ResourceHandler</span> <span class="n">handler</span><span class="o">)</span> <span class="o">{</span> |
| <span class="n">Filter</span> <span class="n">filter</span><span class="o">;</span> |
| <span class="kd">synchronized</span> <span class="o">(</span><span class="n">m_handlers</span><span class="o">)</span> <span class="o">{</span> |
| <span class="n">filter</span> <span class="o">=</span> <span class="o">(</span><span class="n">Filter</span><span class="o">)</span> <span class="n">m_handlers</span><span class="o">.</span><span class="na">remove</span><span class="o">(</span><span class="n">handler</span><span class="o">);</span> |
| <span class="o">}</span> |
| <span class="k">if</span> <span class="o">(</span><span class="n">filter</span> <span class="o">!=</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span> |
| <span class="k">for</span> <span class="o">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="o">;</span> <span class="n">i</span> <span class="o"><</span> <span class="n">m_resources</span><span class="o">.</span><span class="na">length</span><span class="o">;</span> <span class="n">i</span><span class="o">++)</span> <span class="o">{</span> |
| <span class="k">if</span> <span class="o">(</span><span class="n">filter</span> <span class="o">==</span> <span class="kc">null</span> <span class="o">||</span> <span class="n">filter</span><span class="o">.</span><span class="na">match</span><span class="o">((</span><span class="n">Dictionary</span><span class="o"><</span><span class="n">String</span><span class="o">,</span> <span class="o">?>)</span> <span class="n">ResourceUtil</span><span class="o">.</span><span class="na">createProperties</span><span class="o">(</span><span class="n">m_resources</span><span class="o">[</span><span class="n">i</span><span class="o">])))</span> <span class="o">{</span> |
| <span class="n">handler</span><span class="o">.</span><span class="na">removed</span><span class="o">(</span><span class="n">m_resources</span><span class="o">[</span><span class="n">i</span><span class="o">]);</span> |
| <span class="o">}</span> |
| <span class="o">}</span> |
| <span class="o">}</span> |
| <span class="o">}</span> |
| </pre></div> |
| <div class="timestamp" style="margin-top: 30px; font-size: 80%; text-align: right;"> |
| Rev. 1844579 by pderop on Mon, 22 Oct 2018 17:07:58 +0000 |
| </div> |
| <div class="trademarkFooter"> |
| 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> |
| </body> |
| </html> |