Skip to content

Commit f8499ea

Browse files
author
Mayur Ingle
committed
frist final commit
0 parents  commit f8499ea

File tree

1,116 files changed

+76482
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

1,116 files changed

+76482
-0
lines changed

GUIDE.md

+1,867
Large diffs are not rendered by default.

LICENSE

+674
Large diffs are not rendered by default.

README.md

+107
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
# Spring Reactive Sample
2+
3+
This is a sandbox project for demonstrating [Reactive Streams](https://www.reactive-streams.org/) support in Spring framework and its ecosystem.
4+
5+
6+
## Docs
7+
8+
* [Reactive Programming with Spring 5(Deprecated)](./docs/GUIDE.md)
9+
* [Accessing Neo4j with SDN Rx](./docs/data-neo4j-rx.md)
10+
* [Accessing RDBMS with Spring Data R2dbc](./docs/data-r2dbc.md)
11+
12+
13+
## Sample Codes
14+
15+
The following table list all sample codes related to the above posts.
16+
17+
### Spring Samples
18+
19+
| name | description |
20+
| :---------------| -------------------------------------------------- |
21+
| vanilla | The initial application, includes basic `spring-webflux` feature, use a main class to start up the application |
22+
| vanilla-jetty | Same as **vanilla**, but use Jetty as target runtime |
23+
| vanilla-tomcat | Same as **vanilla**, but use Reactor Netty as target runtime |
24+
| vanilla-undertow | Same as **vanilla**, but use Undertow as target runtime |
25+
| java9 | Same as **vanilla**, Java 9 Flow API support is not ready in Spring 5.0.0.REALESE, planned in 5.0.1, see issue [SPR-16052](https://jira.spring.io/browse/SPR-16052) and the original [discussion on stackoverflow](https://stackoverflow.com/questions/46597924/spring-5-supports-java-9-flow-apis-in-its-reactive-feature/46605983#46605983) |
26+
| rxjava | Same as **vanilla**, but use Rxjava instead of Reactor |
27+
| rxjava-jdbc | Accessing database with rxjava-jdbc |
28+
| rxjava2 | Same as **vanilla**, but use Rxjava2 instead of Reactor |
29+
| rxjava2-jdbc | Accessing database with rxjava2-jdbc |
30+
| war | Replace the manual bootstrap class in **vanilla** with Spring `ApplicationInitializer`, it can be packaged as a **war** file to be deployed into an external servlet container. |
31+
| routes | Use `RouterFunction` instead of controller in **vanilla** |
32+
| register-bean | Programmatic approach to register all beans in `ApplicatonContext` at application bootstrap |
33+
| data-mongo | Spring Data Mongo Reactive demo |
34+
| data-mongo-pageable| Spring Data Mongo Reactive demo with pagiation support |
35+
| data-mongo-transaction| Spring Data Mongo Reactive demo with `Transaction` support |
36+
| data-redis | Spring Data Redis Reactive demo |
37+
| data-redis-message | Spring Data Redis Reactive Example with `ReactiveRedisMessageListenerContainer`|
38+
| data-cassandra | Spring Data Cassandra Reactive demo |
39+
| data-couchbase | Spring Data Couchbase Reactive demo |
40+
| security | Based on **vanilla**, add Spring Security Reactive support |
41+
| security-form | Same as **secuirty**, login form example |
42+
| security-user-properties | Same as **secuirty**, but use users.properties to store users |
43+
| security-method | Replace URI based configuration with method level constraints |
44+
| security-data-mongo | Based on **data-mongo** and **security**, replace with dummy users in hard codes with Mongo driven store |
45+
| multipart | Mutipart request handling and file uploading |
46+
| multipart-data-mongo | Multipart and file uploading, but data in Mongo via Spring Data Mongo Reactive `GridFsTemplate` |
47+
| mvc-thymeleaf | Traditional web application, use Thymeleaf as template engine |
48+
| mvc-mustache | Traditional web application, use Mustache as template engine|
49+
| mvc-freemarker | Traditional web application, use freemarker as template engine|
50+
| sse | Server Send Event example |
51+
| websocket | WebSocket example |
52+
| web-filter | `WebFilter` example |
53+
| groovy | Same features as **boot**, but written in groovy |
54+
| client | Demonstration of `WebClient` to shake hands with backend reactive APIs |
55+
| kotlin | Same features as **boot**, but written in kotlin|
56+
| kotlin-gradle | Use kotlin functional approach to declare beans and bootstrap the application programatically |
57+
| session | Spring Session Example|
58+
| session-header | Spring Session `WebSessionIdResolver` Example|
59+
| session-data-redis | Spring Data Reids based `ReactiveSessionRepository` Example|
60+
| session-data-mongo | Spring Data Mongo based `ReactiveSessionRepository` Example|
61+
62+
63+
### Spring Boot based Samples
64+
65+
| name | description |
66+
| :----------------------- | ------------------------------------------------------------ |
67+
| boot | Switch to Spring Boot to get autoconfiguration of Spring WebFlux |
68+
| boot-jetty | Same as **boot**, but use Jetty as target runtime |
69+
| boot-tomcat | Same as **boot**, but use Tomcat as target runtime |
70+
| boot-undertow | Same as **boot**, but use Undertow as target runtime |
71+
| boot-routes | Use `RouterFunction` instead of the general `Controller` in **boot** |
72+
| boot-freemarker | Same as **mvc-freemarker**, but based on Spring Boot |
73+
74+
## References
75+
76+
* [Reactive Streams](http://www.reactive-streams.org/), official Reactive Streams website
77+
* [Understanding Reactive types](https://spring.io/blog/2016/04/19/understanding-reactive-types), Spring.IO
78+
* [The WebFlux framework](http://docs.spring.io/spring-framework/docs/5.0.x/spring-framework-reference/web.html#web-reactive), Spring Framework Reference Documentation
79+
* [Reactor Core 3.0 becomes a unified Reactive Foundation on Java 8](https://spring.io/blog/2016/03/11/reactor-core-3-0-becomes-a-unified-reactive-foundation-on-java-8), Spring.IO
80+
* [Reactive Spring](https://spring.io/blog/2016/02/09/reactive-spring), Spring.IO
81+
* Three parts of **Notes on Reactive Programming** by Dave Syer:
82+
83+
* [Notes on Reactive Programming Part I: The Reactive Landscape](https://spring.io/blog/2016/06/07/notes-on-reactive-programming-part-i-the-reactive-landscape)
84+
* [Notes on Reactive Programming Part II: Writing Some Code](https://spring.io/blog/2016/06/13/notes-on-reactive-programming-part-ii-writing-some-code)
85+
* [Notes on Reactive Programming Part III: A Simple HTTP Server Application](https://spring.io/blog/2016/07/20/notes-on-reactive-programming-part-iii-a-simple-http-server-application)
86+
87+
* [Reactive Programming in the Netflix API with RxJava](https://medium.com/netflix-techblog/reactive-programming-in-the-netflix-api-with-rxjava-7811c3a1496a)
88+
* [Reactor by Example](https://www.infoq.com/articles/reactor-by-example)
89+
* [New in Spring 5: Functional Web Framework](https://spring.io/blog/2016/09/22/new-in-spring-5-functional-web-framework)
90+
* [Spring WebFlux: First Steps ](https://dzone.com/articles/spring-webflux-first-steps)
91+
* [Spring-Reactive Example REST Application ](https://dzone.com/articles/spring-reactive-samples)
92+
* [Spring 5 WebFlux and JDBC: To Block or Not to Block ](https://dzone.com/articles/spring-5-webflux-and-jdbc-to-block-or-not-to-block)
93+
* [Reactive Spring 5 and Application Design Impact](https://dzone.com/articles/reactive-spring-5-and-application-design-impact)
94+
* [From Java To Kotlin - Your Cheat Sheet For Java To Kotlin ](https://github.com/MindorksOpenSource/from-java-to-kotlin)
95+
* [From Java to Kotlin](https://fabiomsr.github.io/from-java-to-kotlin/index.html)
96+
* [Petclinic: Spring 5 reactive version](https://github.com/ssouris/petclinic-spring5-reactive/)
97+
* [Spring Framework 5 Kotlin APIs, the functional way](https://spring.io/blog/2017/08/01/spring-framework-5-kotlin-apis-the-functional-way)
98+
* [Kotlin extensions for MongoOperations and ReactiveMongoOperations ](https://github.com/spring-projects/spring-data-mongodb/commit/2359357977e8734331a78c88e0702f50f3a3c75e)
99+
* [Reactive systems using Reactor](http://musigma.org/java/2016/11/21/reactor.html)
100+
* [Lite Rx API Hands-On with Reactor Core 3 ](https://github.com/reactor/lite-rx-api-hands-on)
101+
* [reactor-kotlin-workshop](https://github.com/eddumelendez/reactor-kotlin-workshop)
102+
103+
## Special Thanks
104+
105+
Specials thanks for Jetbrains's support by contributing an open-source license.
106+
107+
[<img src="./jetbrains.png" height="250px" width="250px"/>](https://www.jetbrains.com/?from=spring-reactive-sample)

boot-data-cassandra/.gitignore

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
target/
2+
!.mvn/wrapper/maven-wrapper.jar
3+
4+
### STS ###
5+
.apt_generated
6+
.classpath
7+
.factorypath
8+
.project
9+
.settings
10+
.springBeans
11+
12+
### IntelliJ IDEA ###
13+
.idea
14+
*.iws
15+
*.iml
16+
*.ipr
17+
18+
### NetBeans ###
19+
nbproject/private/
20+
build/
21+
nbbuild/
22+
dist/
23+
nbdist/
24+
.nb-gradle/
Binary file not shown.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.5.0/apache-maven-3.5.0-bin.zip

boot-data-cassandra/mvnw

+225
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,225 @@
1+
#!/bin/sh
2+
# ----------------------------------------------------------------------------
3+
# Licensed to the Apache Software Foundation (ASF) under one
4+
# or more contributor license agreements. See the NOTICE file
5+
# distributed with this work for additional information
6+
# regarding copyright ownership. The ASF licenses this file
7+
# to you under the Apache License, Version 2.0 (the
8+
# "License"); you may not use this file except in compliance
9+
# with the License. You may obtain a copy of the License at
10+
#
11+
# http://www.apache.org/licenses/LICENSE-2.0
12+
#
13+
# Unless required by applicable law or agreed to in writing,
14+
# software distributed under the License is distributed on an
15+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16+
# KIND, either express or implied. See the License for the
17+
# specific language governing permissions and limitations
18+
# under the License.
19+
# ----------------------------------------------------------------------------
20+
21+
# ----------------------------------------------------------------------------
22+
# Maven2 Start Up Batch script
23+
#
24+
# Required ENV vars:
25+
# ------------------
26+
# JAVA_HOME - location of a JDK home dir
27+
#
28+
# Optional ENV vars
29+
# -----------------
30+
# M2_HOME - location of maven2's installed home dir
31+
# MAVEN_OPTS - parameters passed to the Java VM when running Maven
32+
# e.g. to debug Maven itself, use
33+
# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
34+
# MAVEN_SKIP_RC - flag to disable loading of mavenrc files
35+
# ----------------------------------------------------------------------------
36+
37+
if [ -z "$MAVEN_SKIP_RC" ] ; then
38+
39+
if [ -f /etc/mavenrc ] ; then
40+
. /etc/mavenrc
41+
fi
42+
43+
if [ -f "$HOME/.mavenrc" ] ; then
44+
. "$HOME/.mavenrc"
45+
fi
46+
47+
fi
48+
49+
# OS specific support. $var _must_ be set to either true or false.
50+
cygwin=false;
51+
darwin=false;
52+
mingw=false
53+
case "`uname`" in
54+
CYGWIN*) cygwin=true ;;
55+
MINGW*) mingw=true;;
56+
Darwin*) darwin=true
57+
# Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
58+
# See https://developer.apple.com/library/mac/qa/qa1170/_index.html
59+
if [ -z "$JAVA_HOME" ]; then
60+
if [ -x "/usr/libexec/java_home" ]; then
61+
export JAVA_HOME="`/usr/libexec/java_home`"
62+
else
63+
export JAVA_HOME="/Library/Java/Home"
64+
fi
65+
fi
66+
;;
67+
esac
68+
69+
if [ -z "$JAVA_HOME" ] ; then
70+
if [ -r /etc/gentoo-release ] ; then
71+
JAVA_HOME=`java-config --jre-home`
72+
fi
73+
fi
74+
75+
if [ -z "$M2_HOME" ] ; then
76+
## resolve links - $0 may be a link to maven's home
77+
PRG="$0"
78+
79+
# need this for relative symlinks
80+
while [ -h "$PRG" ] ; do
81+
ls=`ls -ld "$PRG"`
82+
link=`expr "$ls" : '.*-> \(.*\)$'`
83+
if expr "$link" : '/.*' > /dev/null; then
84+
PRG="$link"
85+
else
86+
PRG="`dirname "$PRG"`/$link"
87+
fi
88+
done
89+
90+
saveddir=`pwd`
91+
92+
M2_HOME=`dirname "$PRG"`/..
93+
94+
# make it fully qualified
95+
M2_HOME=`cd "$M2_HOME" && pwd`
96+
97+
cd "$saveddir"
98+
# echo Using m2 at $M2_HOME
99+
fi
100+
101+
# For Cygwin, ensure paths are in UNIX format before anything is touched
102+
if $cygwin ; then
103+
[ -n "$M2_HOME" ] &&
104+
M2_HOME=`cygpath --unix "$M2_HOME"`
105+
[ -n "$JAVA_HOME" ] &&
106+
JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
107+
[ -n "$CLASSPATH" ] &&
108+
CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
109+
fi
110+
111+
# For Migwn, ensure paths are in UNIX format before anything is touched
112+
if $mingw ; then
113+
[ -n "$M2_HOME" ] &&
114+
M2_HOME="`(cd "$M2_HOME"; pwd)`"
115+
[ -n "$JAVA_HOME" ] &&
116+
JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
117+
# TODO classpath?
118+
fi
119+
120+
if [ -z "$JAVA_HOME" ]; then
121+
javaExecutable="`which javac`"
122+
if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
123+
# readlink(1) is not available as standard on Solaris 10.
124+
readLink=`which readlink`
125+
if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
126+
if $darwin ; then
127+
javaHome="`dirname \"$javaExecutable\"`"
128+
javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
129+
else
130+
javaExecutable="`readlink -f \"$javaExecutable\"`"
131+
fi
132+
javaHome="`dirname \"$javaExecutable\"`"
133+
javaHome=`expr "$javaHome" : '\(.*\)/bin'`
134+
JAVA_HOME="$javaHome"
135+
export JAVA_HOME
136+
fi
137+
fi
138+
fi
139+
140+
if [ -z "$JAVACMD" ] ; then
141+
if [ -n "$JAVA_HOME" ] ; then
142+
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
143+
# IBM's JDK on AIX uses strange locations for the executables
144+
JAVACMD="$JAVA_HOME/jre/sh/java"
145+
else
146+
JAVACMD="$JAVA_HOME/bin/java"
147+
fi
148+
else
149+
JAVACMD="`which java`"
150+
fi
151+
fi
152+
153+
if [ ! -x "$JAVACMD" ] ; then
154+
echo "Error: JAVA_HOME is not defined correctly." >&2
155+
echo " We cannot execute $JAVACMD" >&2
156+
exit 1
157+
fi
158+
159+
if [ -z "$JAVA_HOME" ] ; then
160+
echo "Warning: JAVA_HOME environment variable is not set."
161+
fi
162+
163+
CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
164+
165+
# traverses directory structure from process work directory to filesystem root
166+
# first directory with .mvn subdirectory is considered project base directory
167+
find_maven_basedir() {
168+
169+
if [ -z "$1" ]
170+
then
171+
echo "Path not specified to find_maven_basedir"
172+
return 1
173+
fi
174+
175+
basedir="$1"
176+
wdir="$1"
177+
while [ "$wdir" != '/' ] ; do
178+
if [ -d "$wdir"/.mvn ] ; then
179+
basedir=$wdir
180+
break
181+
fi
182+
# workaround for JBEAP-8937 (on Solaris 10/Sparc)
183+
if [ -d "${wdir}" ]; then
184+
wdir=`cd "$wdir/.."; pwd`
185+
fi
186+
# end of workaround
187+
done
188+
echo "${basedir}"
189+
}
190+
191+
# concatenates all lines of a file
192+
concat_lines() {
193+
if [ -f "$1" ]; then
194+
echo "$(tr -s '\n' ' ' < "$1")"
195+
fi
196+
}
197+
198+
BASE_DIR=`find_maven_basedir "$(pwd)"`
199+
if [ -z "$BASE_DIR" ]; then
200+
exit 1;
201+
fi
202+
203+
export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
204+
echo $MAVEN_PROJECTBASEDIR
205+
MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
206+
207+
# For Cygwin, switch paths to Windows format before running java
208+
if $cygwin; then
209+
[ -n "$M2_HOME" ] &&
210+
M2_HOME=`cygpath --path --windows "$M2_HOME"`
211+
[ -n "$JAVA_HOME" ] &&
212+
JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
213+
[ -n "$CLASSPATH" ] &&
214+
CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
215+
[ -n "$MAVEN_PROJECTBASEDIR" ] &&
216+
MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
217+
fi
218+
219+
WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
220+
221+
exec "$JAVACMD" \
222+
$MAVEN_OPTS \
223+
-classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
224+
"-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
225+
${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"

0 commit comments

Comments
 (0)