You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

This page explains how you can create an OSGi bundle that contains both Java code and a Spring XML file with the endpoints definition. The example shows a file poller endpoint with a servicemix-bean POJO

Creating the Maven project

First, create and empty directory and add the following pom.xml file. We add the bundle plugin and configure it to import the servicemix-file and servicemix-bean packages as well as the org.apache.servicemix.common.osgi package

<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>
  <groupId>org.apache.servicemix</groupId>
  <artifactId>osgi-sample</artifactId>
  <packaging>bundle</packaging>
  <version>1.0-SNAPSHOT</version>
  <dependencies>
    <dependency>
      <groupId>org.apache.servicemix</groupId>
      <artifactId>servicemix-bean</artifactId>
      <version>2009.01</version>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <!-- configure the bundle plugin with some additional imports -->
      <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
        <version>2.0.0</version>
        <extensions>true</extensions>
        <configuration>
          <instructions>
            <Import-Package>
               org.apache.servicemix.file,org.apache.servicemix.bean,org.apache.servicemix.common.osgi,*
            </Import-Package>
          </instructions>
        </configuration>
      </plugin>
      <!-- let's use Java 5 -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.5</source>
          <target>1.5</target>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

Adding the Java source files in src/main/java

We create the Java source files under the src/main/java folder as usual:

package org.apache.servicemix.pojo;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.servicemix.bean.Property;

public class Pojo {
    
    private static final Log LOG = LogFactory.getLog(Pojo.class);
    
    public void handleFile(@Property(name="org.apache.servicemix.file.name") String name) {
        LOG.info("Handling file " + name);
    }
    
}

Adding the Spring XML file to META-INF/spring in src/main/resources

Any Spring XML file in the META-INF/spring folder will be automatically loaded and started upon deployment. We add a Spring XML file with our endpoint definitions to this folder. Make sure it includes the org.apache.servicemix.common.osgi.EndpointExporter that registers the endpoints with the NMR.

<?xml version="1.0" encoding="utf-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:file="http://servicemix.apache.org/file/1.0"
       xmlns:bean="http://servicemix.apache.org/bean/1.0"
       xmlns:ns="urn:test:example"
       xsi:schemaLocation="
         http://www.springframework.org/schema/beans
         http://www.springframework.org/schema/beans/spring-beans.xsd
         http://servicemix.apache.org/file/1.0
         http://servicemix.apache.org/file/1.0/servicemix-file.xsd
         http://servicemix.apache.org/bean/1.0
         http://servicemix.apache.org/bean/1.0/servicemix-bean.xsd" >
         
    <file:poller service="ns:poller" endpoint="endpoint"
                 targetService="ns:bean" targetEndpoint="endpoint"
                 file="/home/gert/test/poller"/>
    
    <bean:endpoint service="ns:bean" endpoint="endpoint"
                   beanClassName="org.apache.servicemix.pojo.Pojo"/>
                   
    <!-- use this special class to register the endpoints with the NMR -->
    <bean class="org.apache.servicemix.common.osgi.EndpointExporter" />
    
</beans>

Build and test

Now, run a mvn clean install from your project directory to start the Maven build.

[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Building test
[INFO]    task-segment: [clean, install]
[INFO] ------------------------------------------------------------------------
[INFO] [clean:clean]
[INFO] Deleting directory /home/gert/Projects/test/target
[INFO] [resources:resources]
[INFO] Using default encoding to copy filtered resources.
Downloading: http://repo1.maven.org/maven2/org/apache/ws/security/wss4j/1.5.2/wss4j-1.5.2.pom
[INFO] [compiler:compile]
[INFO] Compiling 1 source file to /home/gert/Projects/test/target/classes
...
[INFO] [bundle:bundle]
[INFO] [install:install]
[INFO] Installing /home/gert/Projects/test/target/test-1.0-SNAPSHOT.jar to /home/gert/.m2/repository/org/apache/servicemix/test/1.0-SNAPSHOT/test-1.0-SNAPSHOT.jar
[INFO] [bundle:install]
[INFO] Parsing file:/home/gert/.m2/repository/repository.xml
[INFO] Installing org/apache/servicemix/test/1.0-SNAPSHOT/test-1.0-SNAPSHOT.jar
[INFO] Writing OBR metadata
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 12 seconds
[INFO] Finished at: Mon Jun 01 09:05:29 CEST 2009
[INFO] Final Memory: 32M/192M
[INFO] ------------------------------------------------------------------------

After the build has finished succesfully, just copy the JAR file you find in the target directory into the ServiceMix 4 deploy directory. Afterwards, verify that the bundle has been started by typing the osgi/list command in the ServiceMix 4 console.

smx@root:/> osgi/list
START LEVEL 100
   ID   State         Spring     Level  Name
... 
[ 158] [Active     ] [Started] [   60] test (1.0.0.SNAPSHOT)
  • No labels