-
Notifications
You must be signed in to change notification settings - Fork 2.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Basic Annotations Helloworld #221
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
Hello World Sample | ||
================== | ||
|
||
This is an obvious place to get started. This sample project contains 2 basic sample applications: | ||
|
||
* Hello World | ||
* Poller Application | ||
|
||
## Hello World | ||
|
||
The Hello World application demonstrates a simple message flow represented by the diagram below: | ||
|
||
Message -> Channel -> ServiceActivator -> QueueChannel | ||
|
||
To run the sample simply execute **HelloWorldApp** in package **org.springframework.integration.samples.helloworld**. | ||
You can also execute that class using the [Gradle](http://www.gradle.org): | ||
|
||
$ gradlew :helloworld:runHelloWorldApp | ||
|
||
You should see the following output: | ||
|
||
INFO : org.springframework.integration.samples.helloworld.HelloWorldApp - ==> HelloWorldDemo: Hello World | ||
|
||
## Poller Application | ||
|
||
This simple application will print out the current system time twice every 20 seconds. | ||
|
||
More specifically, an **Inbound Channel Adapter** polls for the current system time 2 times every 20 seconds (20000 milliseconds). The resulting message contains as payload the time in milliseconds and the message is sent to a **Logging Channel Adapter**, which will print the time to the command prompt. | ||
|
||
To run the sample simply execute **PollerApp** in package **org.springframework.integration.samples.helloworld**. | ||
You can also execute that class using the [Gradle](http://www.gradle.org): | ||
|
||
$ gradlew :helloworld:runPollerApp | ||
|
||
You should see output like the following: | ||
|
||
INFO : org.springframework.integration.samples.helloworld - 1328892135471 | ||
INFO : org.springframework.integration.samples.helloworld - 1328892135524 | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,164 @@ | ||
<?xml version="1.0" encoding="UTF-8"?> | ||
<project xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> | ||
<modelVersion>4.0.0</modelVersion> | ||
<groupId>org.springframework.integration.samples</groupId> | ||
<artifactId>helloworld</artifactId> | ||
<version>5.0.0.BUILD-SNAPSHOT</version> | ||
<name>Hello World Sample</name> | ||
<description>Hello World Sample</description> | ||
<url>http://projects.spring.io/spring-integration</url> | ||
<organization> | ||
<name>SpringIO</name> | ||
<url>https://spring.io</url> | ||
</organization> | ||
<licenses> | ||
<license> | ||
<name>The Apache Software License, Version 2.0</name> | ||
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url> | ||
<distribution>repo</distribution> | ||
</license> | ||
</licenses> | ||
<developers> | ||
<developer> | ||
<id>garyrussell</id> | ||
<name>Gary Russell</name> | ||
<email>[email protected]</email> | ||
<roles> | ||
<role>project lead</role> | ||
</roles> | ||
</developer> | ||
<developer> | ||
<id>markfisher</id> | ||
<name>Mark Fisher</name> | ||
<email>[email protected]</email> | ||
<roles> | ||
<role>project founder and lead emeritus</role> | ||
</roles> | ||
</developer> | ||
<developer> | ||
<id>ghillert</id> | ||
<name>Gunnar Hillert</name> | ||
<email>[email protected]</email> | ||
</developer> | ||
<developer> | ||
<id>abilan</id> | ||
<name>Artem Bilan</name> | ||
<email>[email protected]</email> | ||
</developer> | ||
</developers> | ||
<scm> | ||
<connection>scm:git:scm:git:git://github.com/spring-projects/spring-integration-samples.git</connection> | ||
<developerConnection>scm:git:scm:git:ssh://[email protected]:spring-projects/spring-integration-samples.git</developerConnection> | ||
<url>https://github.com/spring-projects/spring-integration-samples</url> | ||
</scm> | ||
<dependencies> | ||
<dependency> | ||
<groupId>org.springframework.integration</groupId> | ||
<artifactId>spring-integration-core</artifactId> | ||
<scope>compile</scope> | ||
<exclusions> | ||
<exclusion> | ||
<artifactId>jackson-module-kotlin</artifactId> | ||
<groupId>com.fasterxml.jackson.module</groupId> | ||
</exclusion> | ||
</exclusions> | ||
</dependency> | ||
<dependency> | ||
<groupId>org.apache.logging.log4j</groupId> | ||
<artifactId>log4j-core</artifactId> | ||
<version>2.7</version> | ||
<scope>compile</scope> | ||
<exclusions> | ||
<exclusion> | ||
<artifactId>jackson-module-kotlin</artifactId> | ||
<groupId>com.fasterxml.jackson.module</groupId> | ||
</exclusion> | ||
</exclusions> | ||
</dependency> | ||
<dependency> | ||
<groupId>junit</groupId> | ||
<artifactId>junit</artifactId> | ||
<version>4.12</version> | ||
<scope>test</scope> | ||
<exclusions> | ||
<exclusion> | ||
<artifactId>jackson-module-kotlin</artifactId> | ||
<groupId>com.fasterxml.jackson.module</groupId> | ||
</exclusion> | ||
<exclusion> | ||
<artifactId>*</artifactId> | ||
<groupId>org.hamcrest</groupId> | ||
</exclusion> | ||
</exclusions> | ||
</dependency> | ||
<dependency> | ||
<groupId>org.hamcrest</groupId> | ||
<artifactId>hamcrest-all</artifactId> | ||
<version>1.3</version> | ||
<scope>test</scope> | ||
<exclusions> | ||
<exclusion> | ||
<artifactId>jackson-module-kotlin</artifactId> | ||
<groupId>com.fasterxml.jackson.module</groupId> | ||
</exclusion> | ||
</exclusions> | ||
</dependency> | ||
<dependency> | ||
<groupId>org.mockito</groupId> | ||
<artifactId>mockito-core</artifactId> | ||
<version>2.10.0</version> | ||
<scope>test</scope> | ||
<exclusions> | ||
<exclusion> | ||
<artifactId>jackson-module-kotlin</artifactId> | ||
<groupId>com.fasterxml.jackson.module</groupId> | ||
</exclusion> | ||
<exclusion> | ||
<artifactId>*</artifactId> | ||
<groupId>org.hamcrest</groupId> | ||
</exclusion> | ||
</exclusions> | ||
</dependency> | ||
<dependency> | ||
<groupId>org.springframework</groupId> | ||
<artifactId>spring-test</artifactId> | ||
<scope>test</scope> | ||
<exclusions> | ||
<exclusion> | ||
<artifactId>jackson-module-kotlin</artifactId> | ||
<groupId>com.fasterxml.jackson.module</groupId> | ||
</exclusion> | ||
</exclusions> | ||
</dependency> | ||
</dependencies> | ||
<repositories> | ||
<repository> | ||
<id>repo.spring.io.milestone</id> | ||
<name>Spring Framework Maven Milestone Repository</name> | ||
<url>https://repo.spring.io/libs-milestone</url> | ||
</repository> | ||
<repository> | ||
<id>repo.spring.io.snapshot</id> | ||
<name>Spring Framework Maven Snapshot Repository</name> | ||
<url>https://repo.spring.io/libs-snapshot</url> | ||
</repository> | ||
</repositories> | ||
<dependencyManagement> | ||
<dependencies> | ||
<dependency> | ||
<groupId>org.springframework.integration</groupId> | ||
<artifactId>spring-integration-bom</artifactId> | ||
<version>5.0.0.M7</version> | ||
<scope>import</scope> | ||
<type>pom</type> | ||
</dependency> | ||
<dependency> | ||
<groupId>org.springframework</groupId> | ||
<artifactId>spring-framework-bom</artifactId> | ||
<version>5.0.0.RC4</version> | ||
<scope>import</scope> | ||
<type>pom</type> | ||
</dependency> | ||
</dependencies> | ||
</dependencyManagement> | ||
</project> |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
package org.springframework.integration.samples.helloworld; | ||
|
||
import java.util.Map; | ||
|
||
import org.springframework.context.annotation.Bean; | ||
import org.springframework.context.annotation.ComponentScan; | ||
import org.springframework.context.annotation.Configuration; | ||
import org.springframework.integration.annotation.IntegrationComponentScan; | ||
import org.springframework.integration.config.EnableIntegration; | ||
import org.springframework.integration.dsl.IntegrationFlow; | ||
import org.springframework.integration.dsl.IntegrationFlows; | ||
import org.springframework.integration.dsl.channel.MessageChannels; | ||
import org.springframework.integration.handler.GenericHandler; | ||
import org.springframework.messaging.MessageChannel; | ||
import org.springframework.messaging.PollableChannel; | ||
|
||
@Configuration | ||
@EnableIntegration | ||
@IntegrationComponentScan | ||
@ComponentScan | ||
public class HelloConfig { | ||
|
||
@Bean | ||
public PollableChannel outputChannel() { | ||
return MessageChannels.queue(10).get(); | ||
} | ||
|
||
@Bean | ||
public MessageChannel inputChannel() { | ||
return MessageChannels.direct().get(); | ||
} | ||
|
||
@Bean | ||
public IntegrationFlow helloFlow(final HelloService helloService) { | ||
return IntegrationFlows.from(inputChannel()).handle(new GenericHandler<String>() { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Please, consider to use method chain style, when each call is on its own line starting with period. Also, consider to use lambda instead of the |
||
public Object handle(String arg0, Map<String, Object> arg1) { | ||
return helloService.sayHello(arg0); | ||
} | ||
}).channel(outputChannel()).get(); | ||
} | ||
|
||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
/* | ||
* Copyright 2002-2012 the original author or authors. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This is a new class, so only the current year in the Copyright. |
||
* | ||
* 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.helloworld; | ||
|
||
import org.springframework.stereotype.Service; | ||
|
||
/** | ||
* Simple POJO to be referenced from a Service Activator. | ||
* | ||
* @author Mark Fisher | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This is your class, not Mark's. As well as for all other your classes, please. |
||
*/ | ||
@Service | ||
public class HelloService { | ||
|
||
public String sayHello(String name) { | ||
return "Hello " + name; | ||
} | ||
|
||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
/* | ||
* Copyright 2002-2017 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.helloworld; | ||
|
||
import org.apache.commons.logging.Log; | ||
import org.apache.commons.logging.LogFactory; | ||
import org.springframework.context.annotation.AnnotationConfigApplicationContext; | ||
import org.springframework.messaging.MessageChannel; | ||
import org.springframework.messaging.PollableChannel; | ||
import org.springframework.messaging.support.GenericMessage; | ||
|
||
/** | ||
* Demonstrates a basic Message Endpoint that simply prepends a greeting | ||
* ("Hello ") to an inbound String payload from a Message. This is a very | ||
* low-level example, using Message Channels directly for both input and | ||
* output. Notice that the output channel has a queue sub-element. It is | ||
* therefore a PollableChannel and its consumers must invoke receive() as | ||
* demonstrated below. | ||
* <p> | ||
* View the configuration of the channels and the endpoint (a <service-activator/> | ||
* element) in 'helloWorldDemo.xml' within this same package. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This is somehow not related to the current state of the code. |
||
* | ||
* @author Mark Fisher | ||
* @author Oleg Zhurakousky | ||
* @author Gary Russell | ||
*/ | ||
public class HelloWorldApp { | ||
|
||
private static Log logger = LogFactory.getLog(HelloWorldApp.class); | ||
|
||
public static void main(String[] args) { | ||
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(HelloConfig.class); | ||
MessageChannel inputChannel = context.getBean("inputChannel", MessageChannel.class); | ||
PollableChannel outputChannel = context.getBean("outputChannel", PollableChannel.class); | ||
inputChannel.send(new GenericMessage<String>("World")); | ||
logger.info("==> HelloWorldDemo: " + outputChannel.receive(0).getPayload()); | ||
context.close(); | ||
} | ||
|
||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
/* | ||
* Copyright 2002-2017 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.systemtime; | ||
|
||
import org.springframework.context.annotation.AnnotationConfigApplicationContext; | ||
|
||
public class PollerApp { | ||
|
||
/** | ||
* Simple application that polls the current system time 2 times every | ||
* 20 seconds (20000 milliseconds). | ||
* | ||
* The resulting message contains the time in milliseconds and the message | ||
* is routed to a Logging Channel Adapter which will print the time to the | ||
* command prompt. | ||
* | ||
* @param args Not used. | ||
*/ | ||
@SuppressWarnings("resource") | ||
public static void main(String[] args) throws Exception{ | ||
new AnnotationConfigApplicationContext(PollerConfig.class); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Since it is pollable app we really can't just use
|
||
} | ||
|
||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You don't need this annotation. There is no any
@MessagingGateway
in your application