diff --git a/spring-integration-samples/helloworld/.project b/spring-integration-samples/helloworld/.project
index 7a58fe313b..0f7761adfa 100644
--- a/spring-integration-samples/helloworld/.project
+++ b/spring-integration-samples/helloworld/.project
@@ -5,6 +5,11 @@
+
+ org.eclipse.wst.common.project.facet.core.builder
+
+
+
org.eclipse.jdt.core.javabuilder
@@ -15,9 +20,16 @@
+
+ org.springframework.ide.eclipse.core.springbuilder
+
+
+
+ org.springframework.ide.eclipse.core.springnature
org.eclipse.jdt.core.javanature
org.maven.ide.eclipse.maven2Nature
+ org.eclipse.wst.common.project.facet.core.nature
diff --git a/spring-integration-samples/helloworld/README.txt b/spring-integration-samples/helloworld/README.txt
new file mode 100644
index 0000000000..e82256a13e
--- /dev/null
+++ b/spring-integration-samples/helloworld/README.txt
@@ -0,0 +1,17 @@
+Instructions for running HelloWorldDemo sample
+-------------------------------------------------------------------------------
+1. See README.txt of the parent directory
+
+2. To run this sample as stand alone application simply execute HelloWorldDemo class
+ located in org.springframework.integration.samples.helloworld package
+
+3. This sample is also configured to be a valid OSGi bundle. This means you can deploy generated JAR
+ into OSGi environment providing that Spring Integration bundles as well as other prerequisites
+ (e.g., Spring Framework were installed).
+ For example: To deploy it on SpringSource dmServer simply drop helloworld-1.0.3.jar file, located
+ in the 'target' directory, to the 'pickup' directory of the dmServer.
+ You should see the following output in the trace file:
+
+ System.out I ==> HelloWorldDemo: Hello World
+
+Happy integration :-)
\ No newline at end of file
diff --git a/spring-integration-samples/helloworld/pom.xml b/spring-integration-samples/helloworld/pom.xml
index 87abb55d76..017cd5bbdf 100644
--- a/spring-integration-samples/helloworld/pom.xml
+++ b/spring-integration-samples/helloworld/pom.xml
@@ -1,11 +1,45 @@
-
-
- spring-integration-samples
- org.springframework.integration
- 1.0.3
-
- 4.0.0
- helloworld
- helloworld
- 1.0.3
-
\ No newline at end of file
+
+
+ spring-integration-samples
+ org.springframework.integration
+ 1.0.3
+
+ 4.0.0
+ helloworld
+ helloworld
+ 1.0.3
+
+
+ org.eclipse.osgi
+ org.eclipse.osgi
+ 3.4.2.R34x_v20080826-1230
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+ 2.2
+
+
+ src/main/resources/META-INF/MANIFEST.MF
+
+
+
+
+
+
+ false
+ ${basedir}/src/main/resources
+
+ META-INF/spring/*.xml
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/spring-integration-samples/helloworld/src/main/java/org/springframework/integration/samples/helloworld/HelloWorldDemo.java b/spring-integration-samples/helloworld/src/main/java/org/springframework/integration/samples/helloworld/HelloWorldDemo.java
index 4cb5e2dc31..86cad505d9 100644
--- a/spring-integration-samples/helloworld/src/main/java/org/springframework/integration/samples/helloworld/HelloWorldDemo.java
+++ b/spring-integration-samples/helloworld/src/main/java/org/springframework/integration/samples/helloworld/HelloWorldDemo.java
@@ -16,6 +16,7 @@
package org.springframework.integration.samples.helloworld;
+import org.springframework.context.ApplicationContext;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.integration.channel.BeanFactoryChannelResolver;
@@ -37,17 +38,22 @@ import org.springframework.integration.message.StringMessage;
* element) in 'helloWorldDemo.xml' within this same package.
*
* @author Mark Fisher
+ * @author Oleg Zhurakousky
*/
public class HelloWorldDemo {
public static void main(String[] args) {
- AbstractApplicationContext context = new ClassPathXmlApplicationContext("helloWorldDemo.xml", HelloWorldDemo.class);
- ChannelResolver channelResolver = new BeanFactoryChannelResolver(context);
+ HelloWorldDemo demo = new HelloWorldDemo();
+ AbstractApplicationContext applicationContext = new ClassPathXmlApplicationContext("helloWorldDemo.xml", HelloWorldDemo.class);
+ demo.performDemo(applicationContext);
+ applicationContext.stop();
+ }
+
+ public void performDemo(ApplicationContext applicationContext){
+ ChannelResolver channelResolver = new BeanFactoryChannelResolver(applicationContext);
MessageChannel inputChannel = channelResolver.resolveChannelName("inputChannel");
PollableChannel outputChannel = (PollableChannel) channelResolver.resolveChannelName("outputChannel");
inputChannel.send(new StringMessage("World"));
- System.out.println(outputChannel.receive(0).getPayload());
- context.stop();
+ System.out.println("==> HelloWorldDemo: " + outputChannel.receive(0).getPayload());
}
-
}
diff --git a/spring-integration-samples/helloworld/src/main/java/org/springframework/integration/samples/osgi/helloworld/HelloWorldBundleActivator.java b/spring-integration-samples/helloworld/src/main/java/org/springframework/integration/samples/osgi/helloworld/HelloWorldBundleActivator.java
new file mode 100644
index 0000000000..6ca3bd9f55
--- /dev/null
+++ b/spring-integration-samples/helloworld/src/main/java/org/springframework/integration/samples/osgi/helloworld/HelloWorldBundleActivator.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2002-2009 the original author or authors.
+ *
+ * Licensed 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.
+ */
+package org.springframework.integration.samples.osgi.helloworld;
+
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.Constants;
+import org.osgi.framework.ServiceEvent;
+import org.osgi.framework.ServiceListener;
+import org.osgi.framework.ServiceReference;
+import org.springframework.context.ApplicationContext;
+import org.springframework.integration.samples.helloworld.HelloWorldDemo;
+/**
+ * Simple BundleActivator which will register ServiceListener which will listen for
+ * ApplicationContext published event. Once event is received, HelloWorldDemo will be executed.
+ *
+ * @author Oleg Zhurakousky
+ */
+public class HelloWorldBundleActivator implements BundleActivator, ServiceListener{
+ private BundleContext context;
+ /**
+ *
+ */
+ public void start(BundleContext context) throws Exception {
+ this.context = context;
+ context.addServiceListener(this);
+ }
+ /**
+ *
+ */
+ public void stop(BundleContext context) throws Exception {}
+ /**
+ *
+ */
+ public void serviceChanged(ServiceEvent serviceEvent) {
+ ServiceReference sr = serviceEvent.getServiceReference();
+ if (context.getBundle().getSymbolicName().equals(sr.getProperty(Constants.BUNDLE_SYMBOLICNAME))){
+ ApplicationContext applicationContext = (ApplicationContext) context.getService(sr);
+ new HelloWorldDemo().performDemo(applicationContext);
+ }
+ }
+}
diff --git a/spring-integration-samples/helloworld/src/main/resources/META-INF/MANIFEST.MF b/spring-integration-samples/helloworld/src/main/resources/META-INF/MANIFEST.MF
new file mode 100644
index 0000000000..6029fa3492
--- /dev/null
+++ b/spring-integration-samples/helloworld/src/main/resources/META-INF/MANIFEST.MF
@@ -0,0 +1,10 @@
+Manifest-Version: 1.0
+Bundle-Version: 1.0.3
+Bundle-Name: org.springframework.integration.samples.helloworld
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: org.springframework.integration.samples.helloworld
+Bundle-Activator: org.springframework.integration.samples.osgi.helloworld.HelloWorldBundleActivator
+Import-Package: org.osgi.framework;version="[1.4.0,1.4.0]"
+Import-Library: org.aspectj;version="[1.6.2.RELEASE,1.6.2.RELEASE]",
+ org.springframework.spring;version="[2.5.6.A,2.5.6.A]"
+Import-Bundle: org.springframework.integration;version="(1.0.2,1.0.4)"
diff --git a/spring-integration-samples/helloworld/src/main/resources/META-INF/spring/helloWorldDemo-osgi.xml b/spring-integration-samples/helloworld/src/main/resources/META-INF/spring/helloWorldDemo-osgi.xml
new file mode 100644
index 0000000000..800804b4c1
--- /dev/null
+++ b/spring-integration-samples/helloworld/src/main/resources/META-INF/spring/helloWorldDemo-osgi.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+