Author: pderop
Date: Sat Mar  7 17:01:35 2015
New Revision: 1664890

URL: http://svn.apache.org/r1664890
Log:
Improved annotations tutorial.

Modified:
    
felix/site/trunk/content/documentation/subprojects/apache-felix-dependency-manager-4/tutorials/working-with-annotations.mdtext

Modified: 
felix/site/trunk/content/documentation/subprojects/apache-felix-dependency-manager-4/tutorials/working-with-annotations.mdtext
URL: 
http://svn.apache.org/viewvc/felix/site/trunk/content/documentation/subprojects/apache-felix-dependency-manager-4/tutorials/working-with-annotations.mdtext?rev=1664890&r1=1664889&r2=1664890&view=diff
==============================================================================
--- 
felix/site/trunk/content/documentation/subprojects/apache-felix-dependency-manager-4/tutorials/working-with-annotations.mdtext
 (original)
+++ 
felix/site/trunk/content/documentation/subprojects/apache-felix-dependency-manager-4/tutorials/working-with-annotations.mdtext
 Sat Mar  7 17:01:35 2015
@@ -19,17 +19,129 @@ This tutorial outlines how to setup and
         }
     }
 
+## Compiling with BndTools:
 
-## Compiling with Bnd:
+This section is a step-by-step tutorial showing how to create a "greeting" 
BndTools project under BndTools and how to use Dependency Manager annotations.
+BndTools is a nice Eclipse plugin on top of the popular "Bnd" builder tool 
([See The BndTools home page](http://bndtools.org/)).
 
-The annotations must be processed at compilation phase and you have to use a 
special Bnd plugin (declared using the "-plugin" bnd directive):
+It is assumed that you have installed bndtools with a properly configured cnf 
project (using Bundle-Hup configuration).
 
-    Bundle-Name: Hello World Using Dependency Manager Annotations
-    Bundle-SymbolicName: 
org.apache.felix.dependencymanager.samples.annotation.hello
-    Import-Package: *
-    Private-Package: 
org.apache.felix.dependencymanager.samples.annotation.hello
-    -plugin org.apache.felix.dm.annotation.plugin.bnd.AnnotationPlugin;log=warn
+### Add DM annotation.jar to the build repository and to the buildpath
 
+Before creating a project that uses the DM annotations, you first have to add 
the DM annotation jar in the "cnd/buildrepo".
+(In the future, we'll push the DM annotation.jar to the Felix OBR, so you will 
then simply only have to create
+a bndtools remote repository that will point to the remote Felix OBR).
+
+* Select the "Repositories" Window
+* Select the "Build" repository
+* Then click on the "Add Bundles to Repository" -> "Add External Jar" and 
point the org.apache.felix.dependencymanager.anntation.jar.
+* Then click on "Finish" button
+
+Now, declare the DM annotation plugin in the BndTools plugin path:
+
+* Select "BndTools/Open ext/pluginpaths.bnd
+* Select the "+" button of the "Plugin Path" section, and select 
"buildrepo/org.apache.felix.dependencymanager.annotation/org.apache.felix.dependencymanager.annotation-X.Y.Z.jar
 (replace X.Y.Z by the actual version)
+* Then press "Ctrl-s" to save the configuration
+
+### Create the greeting project
+
+Now we have properly configured the DM annotation plugin in bndtools, we can 
then create our "greeting" project.
+    
+* From the File menu, select "New -> Bndtools OSGi Project" for creating an 
empty project, and call it "greeting".
+* Click on bnd.bnd file of the greeting project, and click on the "Build" tab, 
then click on the "+" button, near the "Build Path" section.
+* Then select "Build/org.apache.felix.dependencymanager.annotation" bundle and 
click on "Add -->".
+* Click on Finish, and save the project (press Ctrl-s).
+
+### Creating the HelloWorld component
+
+Since we have configured the buildpath, we are now ready to create our first 
HelloWorld component using annotation.
+Create the following class in the greeting project:
+
+    :::java
+    package greeting;
+
+    import org.apache.felix.dm.annotation.api.Component;
+    import org.apache.felix.dm.annotation.api.Start;
+
+    @Component
+    public class HelloWorld {
+        @Start
+        void start() {
+                System.out.println("Hello World");
+        }
+    }
+
+### Finalize the bnd configuration
+
+We have created our first HelloWorld component. We now have to finish the bnd 
configuration by specifying a Private-Package directive,
+and we also add the -plugin bnd directive in order to ask bnd to call the DM 
annotation plugin during compilation:
+
+* Click on the bnd.bnd file of the greeting project
+* Click on Contents and add the "greeting" package in the Private Packages
+* Finally, declare the DM annotation plugin by clicking on the "source" tab, 
and add the following:
+ * -plugin org.apache.felix.dm.annotation.plugin.bnd.AnnotationPlugin;log=debug
+* Save configuration (Press Ctrl-s)
+* Click on "Build" and on "Rebuild"
+
+The greeting.jar should now be generated with a META-INF/dependencymanager/ 
directory. The plugin logs debug messages in /tmp/dmplugin/*
+
+So, the final bnd.bnd file should look like this:
+
+    Bundle-Version: 0.0.0.${tstamp}
+    -buildpath: org.apache.felix.dependencymanager.annotation
+    Private-Package: greeting
+    -plugin 
org.apache.felix.dm.annotation.plugin.bnd.AnnotationPlugin;log=debug
+
+### Testing the bundle under bndtools:
+
+We are now going to execute a Felix framework under Eclipse/BndTools, and run 
our HelloWorld example.
+
+First, install the following necessary bundles in the "Local" repository:
+(in the future, we'll release the DM bundles in the Felix OBR, so you will 
only have to declare a remote repository, instead of doing this): 
+
+* Click on Repositories
+* Add the following DM bundles in the "Local" Repository:
+ * org.apache.felix.dependencymanager.jar
+ * org.apache.felix.dependencymanager.shell.jar
+ * org.apache.felix.dependencymanager.runtime.jar
+
+Now, configure the Felix framework, as well as the list of the bundles to be 
executed:
+
+* Click on the bnd.bnd file of the greeting project
+* Click on the "Run" tab
+* In the Core Runtime, Select the latest version of Felix currently available
+* Select Execution Env=JavaSE-1.7
+* In the "Run Bundles" section, add the following list:
+ * org.apache.felix.configadmin.jar
+ * org.apache.felix.metatype.jar
+ * org.apache.felix.log.jar
+ * org.apache.felix.gogo.command
+ * org.apache.felix.gogo.runtime
+ * org.apache.felix.gogo.shell
+ * org.apache.felix.dependencymanager
+ * org.apache.felix.dependencymanager.runtime
+ * org.apache.felix.dependencymanager.shell
+* Then save the configuration (Press Ctrl-s).
+
+Now, Click on "Run OSGi". You should now see in the Console the Gogo Shell 
prompt with the
+message displayed by the HelloWorld component:
+
+    Hello World
+    Welcome to Apache Felix Gogo
+    g!
+
+Just type "dm" in the console, and you should see:
+
+    [2] org.apache.felix.dependencymanager.runtime
+     [0] org.apache.felix.dm.runtime.DependencyManagerRuntime registered
+        active (DependencyManager-Component=*) bundle optional available
+        org.osgi.service.packageadmin.PackageAdmin service required available
+        org.osgi.service.log.LogService service optional available
+    [10] greeting
+     [1] greeting.HelloWorld registered
+
+The bundle [2] is the dependency manager runtime bundle that is in charge of 
managing all bundles containing annotated components.
+And the bundle [10] is our greeting bundle (and the "greeting.HelloWorld" 
component is registered).
 
 ## Compiling with Ant:
 
@@ -56,67 +168,47 @@ Since Bnd provides a Ant task, you can u
 
 ## Compiling with Maven:
 
-When compiling with Maven, you have to use the Dependency Manager Maven 
annotation plugin:
+When compiling with Maven, you have to invoke the Dependency Manager Bnd 
plugin, using the special "_plugin" directive.
+In the R1 Dependency Manager distribution, the bundles are not published to 
maven central, and you
+have to manually install the org.apache.felix.dependencymanager.annotation.jar 
file to your local repository, or to your own corporate nexus server.
+([See this 
link][http://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html] to 
manually install the dm annotation jar to your local repository.)
 
     :::xml
-    <?xml version="1.0"?>
-    <project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
-       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
-       <modelVersion>4.0.0</modelVersion>
-       <properties>
-               <osgi.version>4.2.0</osgi.version>
-       </properties>
-       <name>Hello World Using Dependency Manager Annotations</name>
-       <groupId>org.apache.felix</groupId>
-       
<artifactId>org.apache.felix.dependencymanager.samples.annotation.hello</artifactId>
-       <version>3.0.0-SNAPSHOT</version>
-       <packaging>bundle</packaging>
-       <dependencies>
-               <dependency>
-                       <groupId>${pom.groupId}</groupId>
-                       
<artifactId>org.apache.felix.dependencymanager.annotation</artifactId>
-                       <version>3.0.0</version>
-               </dependency>
-       </dependencies>
-       <build>
-               <plugins>
-                       <plugin>
-                               <groupId>org.apache.maven.plugins</groupId>
-                               <artifactId>maven-compiler-plugin</artifactId>
-                               <configuration>
-                                       <source>1.5</source>
-                                       <target>1.5</target>
-                               </configuration>
-                       </plugin>
-                       <plugin>
-                               <groupId>org.apache.felix</groupId>
-                               <artifactId>maven-bundle-plugin</artifactId>
-                               <version>2.3.4</version>
-                               <extensions>true</extensions>
-                               <configuration>
-                                       <instructions>
-                                               <Bundle-Name>Hello World Using 
Dependency Manager Annotations</Bundle-Name>
-                                               
<Bundle-SymbolicName>org.apache.felix.dependencymanager.samples.annotation.hello</Bundle-SymbolicName>
-                                               
<Import-Package>*</Import-Package>
-                                               
<Private-Package>org.apache.felix.dependencymanager.samples.annotation.hello</Private-Package>
-                                       </instructions>
-                               </configuration>
-                       </plugin>
-                       <plugin>
-                               <groupId>org.apache.felix</groupId>
-                               
<artifactId>org.apache.felix.dependencymanager.annotation</artifactId>
-                               <version>3.0.0</version>
-                               <executions>
-                                       <execution>
-                                               <goals>
-                                                       <goal>scan</goal>
-                                               </goals>
-                                               <configuration>
-                                                       <log>info</log>
-                                               </configuration>
-                                       </execution>
-                               </executions>
-                       </plugin>
-               </plugins>
-       </build>
+    <project ...>
+      <dependencies>
+        ...
+        <dependency>
+          <groupId>org.apache.felix</groupId>
+          
<artifactId>org.apache.felix.dependencymanager.annotation</artifactId>
+          <version>4.0.0</version>
+        </dependency>
+      </dependencies>
+      <build>
+        <plugins>
+          ...    
+          <plugin>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>maven-bundle-plugin</artifactId>
+            <version>2.5.0</version>
+           <extensions>true</extensions>
+            <configuration>
+               <instructions>
+              <Bundle-Name>Test</Bundle-Name>
+              <Bundle-SymbolicName>test</Bundle-SymbolicName>
+              <Import-Package>*</Import-Package>
+              <Private-Package>test.dmannotations</Private-Package>
+               <!-- when setting log=debug, logs are writen to /tmp/dmplugin/ 
directory -->
+              
<_plugin>org.apache.felix.dm.annotation.plugin.bnd.AnnotationPlugin;log=debug</_plugin>
+               </instructions>
+            </configuration>
+            <dependencies>
+              <dependency>
+                <groupId>org.apache.felix</groupId>
+                
<artifactId>org.apache.felix.dependencymanager.annotation</artifactId>
+                <version>4.0.0</version>
+              </dependency>
+            </dependencies>
+          </plugin>
+        </plugins>
+      </build>
     </project>


Reply via email to