This is the first post in a series on developing web and integration services with Talend ESB.
The runtime part of Talend ESB is an OSGI container that manages dynamic modules. An OSGI container is a cross between an application server (WebSphere, Tomcat, etc) and a dependency framework like Spring or Google Guice. While the application server is limited to a particular set of artifacts (Java EE web applications and EJBs) and the dependency frameworks operate at the Java class levels, OSGI is focused on a coarser grain of objects with better operational and deployment characteristics.
Talend ESB also includes a Studio, like Talend Open Studio for Data Integration, which produces artifacts for the runtime. For more on ESB Studio, check out the video series starting with "Simple Order Processing".
Talend ESB
OSGI is a specification and there are two major implementations: Apache Felix and Eclipse Equinox. Application servers like JBoss AS 7 are also implementing the specification. OSGI implementations are supplemented with a command shell like Apache Karaf. Talend ESB is Eclipse Equinox packaged with Apache Karaf and Talend-specific services to support Talend integration work.
This series of blog posts is working with Talend ESB v5.2.1 which is available here on Java 7.
My IDE is Eclipse Juno also running Java 7. I'm using m2e to integrate Maven with Eclipse. I'm also using Eclipse Tycho to resolve some lifecyle warnings with the Felix plugin.
Maven Archetype
My demonstration project will use a Maven Archetype to construct a skeleton OSGI project. Usually Maven projects result in a JAR or a WAR packaging. This project will make a "bundle" using a special Felix plugin.
To start, create a New Maven Project. Select the osgi-archetype artifact.
Select an Archetype |
Customizing Project Info |
<dependencies>
<dependency>
<groupId>org.osgi</groupId>
<artifactId>org.osgi.core</artifactId>
<version>4.2.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.osgi</groupId>
<artifactId>org.osgi.compendium</artifactId>
<version>4.2.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
The archetype-generated POM with the above modifications is available here.
The Felix plugin will have generated an Activator class. This class is referenced in the pom.xml and is the hook into which your application -- written in plain Java -- will integrate with OSGI. For now, the Activator will execute some print statements when the bundle is started and stopped.
package com.bekwam.talend.osgi.talend_integration;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
public class Activator implements BundleActivator {
public void start(BundleContext context) throws Exception {
System.out.println("start() Talend Integration");
}
public void stop(BundleContext context) throws Exception {
System.out.println("stop() Talend Integration");
}
}
Run a 'mvn install'.
Karaf
Go to the ${tesb.home}/container/bin directory where ${tesb.home} is the unzipped Talend ESB Runtime download. Run the 'trun' command. You should see the following screen appear. If you don't, double-check your version of Java.
Starting Karaf |
> install mvn:com.bekwam.talend.osgi/talend-integration/0.0.1-SNAPSHOT
The system will respond with a Bundle ID (say '210'). Start the bundle
> start 210
You should see the System.out message. You can also stop the bundle which will display another message
> stop 210
If you're interested, run the 'list' command to see the other non-hidden bundles that are loaded. Notice the pre-loaded Talend bundles. These aren't found in the standard Karaf distribution.
This post walked through a simple installation example of an OSGI bundle. Later posts will show more of what you can do with OSGI. Note that you can always throw a bunch of JAR files onto the classpath for your program, but as programs grow larger, as they involve more people, and as they persist in an organization longer, you'll start to recognize deficiencies in what Java provides off-the-shelf.
No comments:
Post a Comment