diff --git a/pom.xml b/pom.xml
index 9b36b30f59..4625f8e6e8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -570,7 +570,6 @@
rxjava
rxjava-2
software-security/sql-injection-samples
-
diff --git a/ratpack/src/main/java/com/baeldung/model/Movie.java b/ratpack/src/main/java/com/baeldung/model/Movie.java
new file mode 100644
index 0000000000..6618e9bbb7
--- /dev/null
+++ b/ratpack/src/main/java/com/baeldung/model/Movie.java
@@ -0,0 +1,47 @@
+package com.baeldung.model;
+/**
+ *
+ *POJO class for Movie object
+ */
+public class Movie {
+
+ private String name;
+
+ private String year;
+
+ private String director;
+
+ private Double rating;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getYear() {
+ return year;
+ }
+
+ public void setYear(String year) {
+ this.year = year;
+ }
+
+ public String getDirector() {
+ return director;
+ }
+
+ public void setDirector(String director) {
+ this.director = director;
+ }
+
+ public Double getRating() {
+ return rating;
+ }
+
+ public void setRating(Double rating) {
+ this.rating = rating;
+ }
+}
diff --git a/ratpack/src/main/java/com/baeldung/rxjava/RatpackErrorHandlingApp.java b/ratpack/src/main/java/com/baeldung/rxjava/RatpackErrorHandlingApp.java
new file mode 100644
index 0000000000..7d2eba56fb
--- /dev/null
+++ b/ratpack/src/main/java/com/baeldung/rxjava/RatpackErrorHandlingApp.java
@@ -0,0 +1,27 @@
+package com.baeldung.rxjava;
+
+import ratpack.error.ServerErrorHandler;
+import ratpack.rx.RxRatpack;
+import ratpack.server.RatpackServer;
+import rx.Observable;
+
+public class RatpackErrorHandlingApp {
+
+ /**
+ * Try hitting http://localhost:5050/error to see the error handler in action
+ * @param args
+ * @throws Exception
+ */
+
+ public static void main(String[] args) throws Exception {
+ RxRatpack.initialize();
+ RatpackServer.start(def -> def.registryOf(regSpec -> regSpec.add(ServerErrorHandler.class, (ctx, throwable) -> {
+ ctx.render("Error caught by handler : " + throwable.getMessage());
+ }))
+ .handlers(chain -> chain.get("error", ctx -> {
+ Observable. error(new Exception("Error from observable"))
+ .subscribe(s -> {
+ });
+ })));
+ }
+}
diff --git a/ratpack/src/main/java/com/baeldung/rxjava/RatpackObserveApp.java b/ratpack/src/main/java/com/baeldung/rxjava/RatpackObserveApp.java
new file mode 100644
index 0000000000..d5ef105207
--- /dev/null
+++ b/ratpack/src/main/java/com/baeldung/rxjava/RatpackObserveApp.java
@@ -0,0 +1,44 @@
+package com.baeldung.rxjava;
+
+import java.util.List;
+
+import com.baeldung.model.Movie;
+import com.baeldung.rxjava.service.MoviePromiseService;
+import com.baeldung.rxjava.service.impl.MoviePromiseServiceImpl;
+
+import ratpack.exec.Promise;
+import ratpack.handling.Handler;
+import ratpack.jackson.Jackson;
+import ratpack.rx.RxRatpack;
+import ratpack.server.RatpackServer;
+
+public class RatpackObserveApp {
+ /**
+ * Try hitting http://localhost:5050/movies or http://localhost:5050/movie to see the application in action.
+ *
+ * @param args
+ * @throws Exception
+ */
+ public static void main(String[] args) throws Exception {
+ RxRatpack.initialize();
+
+ Handler moviePromiseHandler = ctx -> {
+ MoviePromiseService promiseSvc = ctx.get(MoviePromiseService.class);
+ Promise moviePromise = promiseSvc.getMovie();
+ RxRatpack.observe(moviePromise)
+ .subscribe(movie -> ctx.render(Jackson.json(movie)));
+ };
+
+ Handler moviesPromiseHandler = ctx -> {
+ MoviePromiseService promiseSvc = ctx.get(MoviePromiseService.class);
+ Promise> moviePromises = promiseSvc.getMovies();
+ RxRatpack.observeEach(moviePromises)
+ .toList()
+ .subscribe(movie -> ctx.render(Jackson.json(movie)));
+ };
+
+ RatpackServer.start(def -> def.registryOf(regSpec -> regSpec.add(MoviePromiseService.class, new MoviePromiseServiceImpl()))
+ .handlers(chain -> chain.get("movie", moviePromiseHandler)
+ .get("movies", moviesPromiseHandler)));
+ }
+}
diff --git a/ratpack/src/main/java/com/baeldung/rxjava/RatpackParallelismApp.java b/ratpack/src/main/java/com/baeldung/rxjava/RatpackParallelismApp.java
new file mode 100644
index 0000000000..033c3e73b5
--- /dev/null
+++ b/ratpack/src/main/java/com/baeldung/rxjava/RatpackParallelismApp.java
@@ -0,0 +1,36 @@
+package com.baeldung.rxjava;
+
+import com.baeldung.model.Movie;
+import com.baeldung.rxjava.service.MovieObservableService;
+import com.baeldung.rxjava.service.impl.MovieObservableServiceImpl;
+
+import ratpack.jackson.Jackson;
+import ratpack.rx.RxRatpack;
+import ratpack.server.RatpackServer;
+import rx.Observable;
+
+public class RatpackParallelismApp {
+
+ /**
+ * Try hitting http://localhost:5050/movies to see the application in action.
+ *
+ * @param args
+ * @throws Exception
+ */
+ public static void main(String[] args) throws Exception {
+ RxRatpack.initialize();
+ RatpackServer.start(def -> def.registryOf(regSpec -> regSpec.add(MovieObservableService.class, new MovieObservableServiceImpl()))
+ .handlers(chain -> chain.get("movies", ctx -> {
+ MovieObservableService movieSvc = ctx.get(MovieObservableService.class);
+ Observable movieObs = movieSvc.getMovies();
+ Observable upperCasedNames = movieObs.compose(RxRatpack::forkEach)
+ .map(movie -> movie.getName()
+ .toUpperCase())
+ .serialize();
+ RxRatpack.promise(upperCasedNames)
+ .then(movie -> {
+ ctx.render(Jackson.json(movie));
+ });
+ })));
+ }
+}
diff --git a/ratpack/src/main/java/com/baeldung/rxjava/RatpackPromiseApp.java b/ratpack/src/main/java/com/baeldung/rxjava/RatpackPromiseApp.java
new file mode 100644
index 0000000000..8a9c00b788
--- /dev/null
+++ b/ratpack/src/main/java/com/baeldung/rxjava/RatpackPromiseApp.java
@@ -0,0 +1,43 @@
+package com.baeldung.rxjava;
+
+import com.baeldung.model.Movie;
+import com.baeldung.rxjava.service.MovieObservableService;
+import com.baeldung.rxjava.service.impl.MovieObservableServiceImpl;
+
+import ratpack.handling.Handler;
+import ratpack.jackson.Jackson;
+import ratpack.rx.RxRatpack;
+import ratpack.server.RatpackServer;
+import rx.Observable;
+
+public class RatpackPromiseApp {
+
+ /**
+ * Try hitting http://localhost:5050/movies or http://localhost:5050/movie to see the application in action.
+ *
+ * @param args
+ * @throws Exception
+ */
+ public static void main(String[] args) throws Exception {
+ RxRatpack.initialize();
+
+ Handler movieHandler = (ctx) -> {
+ MovieObservableService movieSvc = ctx.get(MovieObservableService.class);
+ Observable movieObs = movieSvc.getMovie();
+ RxRatpack.promiseSingle(movieObs)
+ .then(movie -> ctx.render(Jackson.json(movie)));
+ };
+
+ Handler moviesHandler = (ctx) -> {
+ MovieObservableService movieSvc = ctx.get(MovieObservableService.class);
+ Observable movieObs = movieSvc.getMovies();
+ RxRatpack.promise(movieObs)
+ .then(movie -> ctx.render(Jackson.json(movie)));
+ };
+
+ RatpackServer.start(def -> def.registryOf(rSpec -> rSpec.add(MovieObservableService.class, new MovieObservableServiceImpl()))
+ .handlers(chain -> chain.get("movie", movieHandler)
+ .get("movies", moviesHandler)));
+ }
+
+}
diff --git a/ratpack/src/main/java/com/baeldung/rxjava/service/MovieObservableService.java b/ratpack/src/main/java/com/baeldung/rxjava/service/MovieObservableService.java
new file mode 100644
index 0000000000..75a90faa44
--- /dev/null
+++ b/ratpack/src/main/java/com/baeldung/rxjava/service/MovieObservableService.java
@@ -0,0 +1,13 @@
+package com.baeldung.rxjava.service;
+
+import com.baeldung.model.Movie;
+
+import rx.Observable;
+
+public interface MovieObservableService {
+
+ Observable getMovies();
+
+ Observable getMovie();
+
+}
diff --git a/ratpack/src/main/java/com/baeldung/rxjava/service/MoviePromiseService.java b/ratpack/src/main/java/com/baeldung/rxjava/service/MoviePromiseService.java
new file mode 100644
index 0000000000..fc58993d73
--- /dev/null
+++ b/ratpack/src/main/java/com/baeldung/rxjava/service/MoviePromiseService.java
@@ -0,0 +1,15 @@
+package com.baeldung.rxjava.service;
+
+import java.util.List;
+
+import com.baeldung.model.Movie;
+
+import ratpack.exec.Promise;
+
+public interface MoviePromiseService {
+
+ Promise> getMovies();
+
+ Promise getMovie();
+
+}
diff --git a/ratpack/src/main/java/com/baeldung/rxjava/service/impl/MovieObservableServiceImpl.java b/ratpack/src/main/java/com/baeldung/rxjava/service/impl/MovieObservableServiceImpl.java
new file mode 100644
index 0000000000..817a33d857
--- /dev/null
+++ b/ratpack/src/main/java/com/baeldung/rxjava/service/impl/MovieObservableServiceImpl.java
@@ -0,0 +1,35 @@
+package com.baeldung.rxjava.service.impl;
+
+import com.baeldung.model.Movie;
+import com.baeldung.rxjava.service.MovieObservableService;
+
+import rx.Observable;
+
+public class MovieObservableServiceImpl implements MovieObservableService {
+
+ @Override
+ public Observable getMovie() {
+ Movie movie = new Movie();
+ movie.setName("The Godfather");
+ movie.setYear("1972");
+ movie.setDirector("Coppola");
+ movie.setRating(9.2);
+ return Observable.just(movie);
+ }
+
+ @Override
+ public Observable getMovies() {
+ Movie movie = new Movie();
+ movie.setName("The Godfather");
+ movie.setYear("1972");
+ movie.setDirector("Coppola");
+ movie.setRating(9.2);
+ Movie movie2 = new Movie();
+ movie2.setName("The Godfather Part 2");
+ movie2.setYear("1974");
+ movie2.setDirector("Coppola");
+ movie2.setRating(9.0);
+ return Observable.just(movie, movie2);
+
+ }
+}
diff --git a/ratpack/src/main/java/com/baeldung/rxjava/service/impl/MoviePromiseServiceImpl.java b/ratpack/src/main/java/com/baeldung/rxjava/service/impl/MoviePromiseServiceImpl.java
new file mode 100644
index 0000000000..a66b1e79d6
--- /dev/null
+++ b/ratpack/src/main/java/com/baeldung/rxjava/service/impl/MoviePromiseServiceImpl.java
@@ -0,0 +1,41 @@
+package com.baeldung.rxjava.service.impl;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.baeldung.model.Movie;
+import com.baeldung.rxjava.service.MoviePromiseService;
+
+import ratpack.exec.Promise;
+
+public class MoviePromiseServiceImpl implements MoviePromiseService {
+
+ @Override
+ public Promise getMovie() {
+ Movie movie = new Movie();
+ movie.setName("The Godfather");
+ movie.setYear("1972");
+ movie.setDirector("Coppola");
+ movie.setRating(9.2);
+ return Promise.value(movie);
+ }
+
+ @Override
+ public Promise> getMovies() {
+ Movie movie = new Movie();
+ movie.setName("The Godfather");
+ movie.setYear("1972");
+ movie.setDirector("Coppola");
+ movie.setRating(9.2);
+ Movie movie2 = new Movie();
+ movie2.setName("The Godfather Part 2");
+ movie2.setYear("1974");
+ movie2.setDirector("Coppola");
+ movie2.setRating(9.0);
+ List movies = new ArrayList<>();
+ movies.add(movie);
+ movies.add(movie2);
+ return Promise.value(movies);
+ }
+
+}