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
Info |
---|
|
When you're running this example, make sure to configure the correct component version in your pom.xml file e.g. for ServiceMix 4.3.0, choose the 2011.01 version |
Code Block |
---|
|
<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>2011.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.3.4</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>
<version>2.3.2</version>
<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:
Code Block |
---|
|
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.
Code Block |
---|
|
<?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.
Code Block |
---|
[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.
Code Block |
---|
smx@root:/> osgi/list
START LEVEL 100
ID State Spring Level Name
...
[ 158] [Active ] [Started] [ 60] test (1.0.0.SNAPSHOT)
|