Added: websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-dependency-manager-4/tutorials/working-with-annotations.html ============================================================================== --- websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-dependency-manager-4/tutorials/working-with-annotations.html (added) +++ websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-dependency-manager-4/tutorials/working-with-annotations.html Wed Mar 4 10:39:35 2015 @@ -0,0 +1,195 @@ +<!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 - Apache Felix Dependency Manager - Annotations</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="http://felix.apache.org/"> + <img border="0" alt="Apache Felix" src="/res/logo.png"> + </a> + </div> + <div class="header"> + <a href="http://www.apache.org/"> + <img border="0" alt="Apache" src="/res/apache.png"> + </a> + </div> + </div> + + <div class="menu"> + <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="/mailinglists.html">mailing lists</a> <br /> +<a href="/documentation/community/contributing.html">contributing</a> <br /> +<a href="/sitemap.html">site map</a> <br /> +<a href="http://www.apache.org/">asf</a> <br /> +<a href="http://www.apache.org/security/">security</a> <br /> +<a href="http://www.apache.org/foundation/sponsorship.html">sponsorship</a> <br /> +<a href="http://www.apache.org/foundation/thanks.html">sponsors</a> </p> +<iframe + src="http://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.html">Apache Felix Subproject Documentation</a> » <a href="/documentation/subprojects/apache-felix-dependency-manager-4.html">Apache Felix Dependency Manager 4</a> + </div> + + + + <h1>Apache Felix Dependency Manager - Annotations</h1> + <p>The Dependency Manager provides a compact and versatile Java API that allows you to declaratively and programmatically register, acquire, and manage dynamic OSGi components. This has many advantages, but also means you need to implement your own <code>BundleActivator</code>. In cases where your dependencies are not that dynamic, an alternative is to use annotations on your component.</p> +<p>This tutorial outlines how to setup and use such annotations to describe your components and dependencies. We present a simple "Hello World" component defined using annotations, and also explain how to build the bundle using either Bnd, Ant, or Maven.</p> +<h2 id="hello-world-component">Hello World Component</h2> +<div class="codehilite"><pre><span class="n">package</span> <span class="n">org</span><span class="p">.</span><span class="n">apache</span><span class="p">.</span><span class="n">felix</span><span class="p">.</span><span class="n">dependencymanager</span><span class="p">.</span><span class="n">samples</span><span class="p">.</span><span class="n">annotation</span><span class="p">.</span><span class="n">hello</span><span class="p">;</span> + +<span class="n">import</span> <span class="n">org</span><span class="p">.</span><span class="n">apache</span><span class="p">.</span><span class="n">felix</span><span class="p">.</span><span class="n">dm</span><span class="p">.</span><span class="n">annotation</span><span class="p">.</span><span class="n">api</span><span class="p">.</span><span class="n">Component</span><span class="p">;</span> +<span class="n">import</span> <span class="n">org</span><span class="p">.</span><span class="n">apache</span><span class="p">.</span><span class="n">felix</span><span class="p">.</span><span class="n">dm</span><span class="p">.</span><span class="n">annotation</span><span class="p">.</span><span class="n">api</span><span class="p">.</span><span class="n">Start</span><span class="p">;</span> + +<span class="p">@</span><span class="n">Component</span> +<span class="n">public</span> <span class="n">class</span> <span class="n">HelloWorld</span> <span class="p">{</span> + <span class="p">@</span><span class="n">Start</span> + <span class="n">public</span> <span class="n">void</span> <span class="n">activate</span><span class="p">()</span> <span class="p">{</span> + <span class="n">System</span><span class="p">.</span><span class="n">out</span><span class="p">.</span><span class="n">println</span><span class="p">(</span>"<span class="n">Hello</span> <span class="n">world</span> !"<span class="p">);</span> + <span class="p">}</span> +<span class="p">}</span> +</pre></div> + + +<h2 id="compiling-with-bnd">Compiling with Bnd:</h2> +<p>The annotations must be processed at compilation phase and you have to use a special Bnd plugin (declared using the "-plugin" bnd directive):</p> +<div class="codehilite"><pre><span class="n">Bundle</span><span class="o">-</span><span class="n">Name</span><span class="p">:</span> <span class="n">Hello</span> <span class="n">World</span> <span class="n">Using</span> <span class="n">Dependency</span> <span class="n">Manager</span> <span class="n">Annotations</span> +<span class="n">Bundle</span><span class="o">-</span><span class="n">SymbolicName</span><span class="p">:</span> <span class="n">org</span><span class="p">.</span><span class="n">apache</span><span class="p">.</span><span class="n">felix</span><span class="p">.</span><span class="n">dependencymanager</span><span class="p">.</span><span class="n">samples</span><span class="p">.</span><span class="n">annotation</span><span class="p">.</span><span class="n">hello</span> +<span class="n">Import</span><span class="o">-</span><span class="n">Package</span><span class="p">:</span> <span class="o">*</span> +<span class="n">Private</span><span class="o">-</span><span class="n">Package</span><span class="p">:</span> <span class="n">org</span><span class="p">.</span><span class="n">apache</span><span class="p">.</span><span class="n">felix</span><span class="p">.</span><span class="n">dependencymanager</span><span class="p">.</span><span class="n">samples</span><span class="p">.</span><span class="n">annotation</span><span class="p">.</span><span class="n">hello</span> +<span class="o">-</span><span class="n">plugin</span> <span class="n">org</span><span class="p">.</span><span class="n">apache</span><span class="p">.</span><span class="n">felix</span><span class="p">.</span><span class="n">dm</span><span class="p">.</span><span class="n">annotation</span><span class="p">.</span><span class="n">plugin</span><span class="p">.</span><span class="n">bnd</span><span class="p">.</span><span class="n">AnnotationPlugin</span><span class="p">;</span><span class="nb">log</span><span class="p">=</span><span class="n">warn</span> +</pre></div> + + +<h2 id="compiling-with-ant">Compiling with Ant:</h2> +<p>Since Bnd provides a Ant task, you can use the bnd directives above with the following build.xml: +(it is assumed that directives.bnd, bnd.jar, json-20070829.jar and org.apache.felix.dependencymanager.annotation.jar are in the current directory)</p> +<div class="codehilite"><pre><span class="nt"><project</span> <span class="na">name=</span><span class="s">"TestDM"</span> <span class="na">default=</span><span class="s">"bnd"</span><span class="nt">></span> + <span class="nt"><property</span> <span class="na">name=</span><span class="s">"bnd"</span> <span class="na">value=</span><span class="s">"bnd.jar"</span> <span class="nt">/></span> + <span class="nt"><property</span> <span class="na">name=</span><span class="s">"json"</span> <span class="na">value=</span><span class="s">"json-20070829.jar"</span> <span class="nt">/></span> + <span class="nt"><property</span> <span class="na">name=</span><span class="s">"dmannot"</span> <span class="na">value=</span><span class="s">"org.apache.felix.dependencymanager.annotation.jar"</span> <span class="nt">/></span> + + <span class="nt"><target</span> <span class="na">name=</span><span class="s">"compile"</span><span class="nt">></span> + <span class="nt"><delete</span> <span class="na">dir=</span><span class="s">"target/classes"</span> <span class="na">quiet=</span><span class="s">"yes"</span> <span class="nt">/></span> + <span class="nt"><mkdir</span> <span class="na">dir=</span><span class="s">"target/classes"</span> <span class="nt">/></span> + <span class="nt"><javac</span> <span class="na">srcdir=</span><span class="s">"src/main/java"</span> <span class="na">destdir=</span><span class="s">"target/classes"</span> <span class="na">classpath=</span><span class="s">"</span><span class="cp">${</span><span class="n">dmannot</span><span class="cp">}</span><span class="s">"</span> <span class="nt">/></span> + <span class="nt"></target></span> + + <span class="nt"><target</span> <span class="na">name=</span><span class="s">"bnd"</span> <span class="na">depends=</span><span class="s">"compile"</span><span class="nt">></span> + <span class="nt"><taskdef</span> <span class="na">resource=</span><span class="s">"aQute/bnd/ant/taskdef.properties"</span> <span class="na">classpath=</span><span class="s">"</span><span class="cp">${</span><span class="n">dmannot</span><span class="cp">}</span><span class="s">:</span><span class="cp">${</span><span class="n">bnd</span><span class="cp">}</span><span class="s">:</span><span class="cp">${</span><span class="n">json</span><span class="cp">}</span><span class="s">"</span> <span class="nt">/></span> + <span class="nt"><bnd</span> <span class="na">classpath=</span><span class="s">"target/classes"</span> <span class="na">eclipse=</span><span class="s">"false"</span> <span class="na">files=</span><span class="s">"directives.bnd"</span> <span class="na">output=</span><span class="s">"org.apache.felix.dependencymanager.samples.annotation.hello.jar"</span> <span class="nt">/></span> + <span class="nt"></target></span> +<span class="nt"></project></span> +</pre></div> + + +<h2 id="compiling-with-maven">Compiling with Maven:</h2> +<p>When compiling with Maven, you have to use the Dependency Manager Maven annotation plugin:</p> +<div class="codehilite"><pre><span class="cp"><?xml version="1.0"?></span> +<span class="nt"><project</span> <span class="na">xmlns=</span><span class="s">"http://maven.apache.org/POM/4.0.0"</span> <span class="na">xmlns:xsi=</span><span class="s">"http://www.w3.org/2001/XMLSchema-instance"</span> + <span class="na">xsi:schemaLocation=</span><span class="s">"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"</span><span class="nt">></span> + <span class="nt"><modelVersion></span>4.0.0<span class="nt"></modelVersion></span> + <span class="nt"><properties></span> + <span class="nt"><osgi.version></span>4.2.0<span class="nt"></osgi.version></span> + <span class="nt"></properties></span> + <span class="nt"><name></span>Hello World Using Dependency Manager Annotations<span class="nt"></name></span> + <span class="nt"><groupId></span>org.apache.felix<span class="nt"></groupId></span> + <span class="nt"><artifactId></span>org.apache.felix.dependencymanager.samples.annotation.hello<span class="nt"></artifactId></span> + <span class="nt"><version></span>3.0.0-SNAPSHOT<span class="nt"></version></span> + <span class="nt"><packaging></span>bundle<span class="nt"></packaging></span> + <span class="nt"><dependencies></span> + <span class="nt"><dependency></span> + <span class="nt"><groupId></span>${pom.groupId}<span class="nt"></groupId></span> + <span class="nt"><artifactId></span>org.apache.felix.dependencymanager.annotation<span class="nt"></artifactId></span> + <span class="nt"><version></span>3.0.0<span class="nt"></version></span> + <span class="nt"></dependency></span> + <span class="nt"></dependencies></span> + <span class="nt"><build></span> + <span class="nt"><plugins></span> + <span class="nt"><plugin></span> + <span class="nt"><groupId></span>org.apache.maven.plugins<span class="nt"></groupId></span> + <span class="nt"><artifactId></span>maven-compiler-plugin<span class="nt"></artifactId></span> + <span class="nt"><configuration></span> + <span class="nt"><source></span>1.5<span class="nt"></source></span> + <span class="nt"><target></span>1.5<span class="nt"></target></span> + <span class="nt"></configuration></span> + <span class="nt"></plugin></span> + <span class="nt"><plugin></span> + <span class="nt"><groupId></span>org.apache.felix<span class="nt"></groupId></span> + <span class="nt"><artifactId></span>maven-bundle-plugin<span class="nt"></artifactId></span> + <span class="nt"><version></span>2.3.4<span class="nt"></version></span> + <span class="nt"><extensions></span>true<span class="nt"></extensions></span> + <span class="nt"><configuration></span> + <span class="nt"><instructions></span> + <span class="nt"><Bundle-Name></span>Hello World Using Dependency Manager Annotations<span class="nt"></Bundle-Name></span> + <span class="nt"><Bundle-SymbolicName></span>org.apache.felix.dependencymanager.samples.annotation.hello<span class="nt"></Bundle-SymbolicName></span> + <span class="nt"><Import-Package></span>*<span class="nt"></Import-Package></span> + <span class="nt"><Private-Package></span>org.apache.felix.dependencymanager.samples.annotation.hello<span class="nt"></Private-Package></span> + <span class="nt"></instructions></span> + <span class="nt"></configuration></span> + <span class="nt"></plugin></span> + <span class="nt"><plugin></span> + <span class="nt"><groupId></span>org.apache.felix<span class="nt"></groupId></span> + <span class="nt"><artifactId></span>org.apache.felix.dependencymanager.annotation<span class="nt"></artifactId></span> + <span class="nt"><version></span>3.0.0<span class="nt"></version></span> + <span class="nt"><executions></span> + <span class="nt"><execution></span> + <span class="nt"><goals></span> + <span class="nt"><goal></span>scan<span class="nt"></goal></span> + <span class="nt"></goals></span> + <span class="nt"><configuration></span> + <span class="nt"><log></span>info<span class="nt"></log></span> + <span class="nt"></configuration></span> + <span class="nt"></execution></span> + <span class="nt"></executions></span> + <span class="nt"></plugin></span> + <span class="nt"></plugins></span> + <span class="nt"></build></span> +<span class="nt"></project></span> +</pre></div> + <div class="timestamp" style="margin-top: 30px; font-size: 80%; text-align: right;"> + Rev. 1663924 by marrs on Wed, 4 Mar 2015 10:39:19 +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>
