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 @@ + + + + + + + + + + + + +