From 6bd3785ab52160a819af256a7b6fa516b3a0c664 Mon Sep 17 00:00:00 2001 From: Rahul Vaish Date: Sun, 26 May 2019 18:42:55 +0530 Subject: [PATCH 1/9] Delete README.MD --- README.MD | 50 -------------------------------------------------- 1 file changed, 50 deletions(-) delete mode 100644 README.MD diff --git a/README.MD b/README.MD deleted file mode 100644 index b5ec9b2..0000000 --- a/README.MD +++ /dev/null @@ -1,50 +0,0 @@ -This repository contains methods to Dockerize Java Projects. - -### Table of Contents - - HelloWorld Java Docker - - SpringBoot Docker - -
- -- ###### [HelloWorld Java Docker](https://github.com/rahulvaish/Docker-Java/tree/HelloDocker/HelloWorldJavaDocker) - ###### This example illustrates how to Dockerize a simple Java Project. [[Source Code]](https://github.com/rahulvaish/Docker-Java/tree/HelloDocker) - * Download the HelloWorldJavaDocker project. - * Navigate inside the HelloWorldJavaDocker project folder from Docker QuickStart Terminal. - * Execute the below commands- - ![image](https://user-images.githubusercontent.com/689226/50370746-6195f780-05d2-11e9-90b9-b34824d24a36.png) - ![image](https://user-images.githubusercontent.com/689226/50370760-9609b380-05d2-11e9-8beb-73244f00a763.png) - * Check Docker Hub: [[Docker Hub URL]](https://cloud.docker.com/repository/docker/rahulvaish/helloworldjavadocker) - ![image](https://user-images.githubusercontent.com/689226/50370779-f0a30f80-05d2-11e9-9421-947f4c90d509.png) - To run the image on Docker:
- ![image](https://user-images.githubusercontent.com/689226/53510292-a44ce200-3ae3-11e9-95cc-aa1c10bbf99e.png) - -
- -- ###### [SpringBoot Docker](https://github.com/rahulvaish/Docker-Java/tree/SpringBootDocker) - ###### This example illustrates how to Dockerize a SpringBoot Project. [[Source Code]](https://github.com/rahulvaish/Docker-Java/tree/SpringBootDocker) - - Introduce a Dockerfile in your Project's 'root': - ![image](https://user-images.githubusercontent.com/689226/50369586-0eb24500-05be-11e9-9e95-d5f328f136aa.png) - - Notice the plugin introduced in pom.xml - ![image](https://user-images.githubusercontent.com/689226/50370570-2a721700-05cf-11e9-80b1-98e85560114d.png) - - Dockerfile for this project would look like: - ![image](https://user-images.githubusercontent.com/689226/50369597-44572e00-05be-11e9-8770-753592e37ca4.png) - - Initiate Docker Quick Start Terminal - - Navigate till inside your Project's 'root'. Exeute the below commands: - ![image](https://user-images.githubusercontent.com/689226/50369643-145c5a80-05bf-11e9-9ce1-9ce8e4b809f9.png) - - Now, the application is Up and Running. - - To know your IP:
- ![image](https://user-images.githubusercontent.com/689226/50369691-8af95800-05bf-11e9-9763-489b66899c94.png) - - Test your Application:
- ![image](https://user-images.githubusercontent.com/689226/50369706-ae240780-05bf-11e9-91ff-0c4716ecacf8.png) - - Now, **tag** your image and **push** on Docker Hub. Execute the below commands: - - docker login - - docker tag springbootdocker rahulvaish/springbootdocker - - docker push rahulvaish/springbootdocker - - Check Docker Hub:[[Docker Hub URL]](https://cloud.docker.com/u/rahulvaish/repository/docker/rahulvaish/springbootdocker) - ![image](https://user-images.githubusercontent.com/689226/50370495-c00ca700-05cd-11e9-97a3-1f33262301b7.png) - - **NOTE: Therefore to execute any SpringBoot project from Docker Hub**: - ![image](https://user-images.githubusercontent.com/689226/50369766-9731e500-05c0-11e9-935e-b345b93ad8d4.png) - - - - From 02d7eb27945c7fe1b6ff215d41804c2bce04a05e Mon Sep 17 00:00:00 2001 From: Rahul Date: Sun, 26 May 2019 18:49:44 +0530 Subject: [PATCH 2/9] Container IO --- .../CalculatorService/.gitignore | 29 ++ .../.mvn/wrapper/MavenWrapperDownloader.java | 114 +++++++ .../.mvn/wrapper/maven-wrapper.jar | Bin 0 -> 48337 bytes .../.mvn/wrapper/maven-wrapper.properties | 1 + .../CalculatorService/Dockerfile | 4 + SpringBootContainerIO/CalculatorService/mvnw | 286 ++++++++++++++++++ .../CalculatorService/mvnw.cmd | 161 ++++++++++ .../CalculatorService/pom.xml | 87 ++++++ .../CalculatorServiceApplication.java | 13 + .../CalculatorServiceController.java | 70 +++++ .../java/com/calculator/model/Number.java | 22 ++ .../service/CalculatorServiceFloat.java | 73 +++++ .../service/CalculatorServiceInteger.java | 69 +++++ .../src/main/resources/application.properties | 0 .../CalculatorServiceApplicationTests.java | 16 + .../CalculatorServiceClient/.gitignore | 29 ++ .../.mvn/wrapper/MavenWrapperDownloader.java | 114 +++++++ .../.mvn/wrapper/maven-wrapper.jar | Bin 0 -> 48337 bytes .../.mvn/wrapper/maven-wrapper.properties | 1 + .../CalculatorServiceClient/Dockerfile | 4 + .../CalculatorServiceClient/mvnw | 286 ++++++++++++++++++ .../CalculatorServiceClient/mvnw.cmd | 161 ++++++++++ .../CalculatorServiceClient/pom.xml | 94 ++++++ .../com/calculator/CalculatorApplication.java | 12 + .../com/calculator/CalculatorController.java | 66 ++++ .../calculator/CalculatorServiceClient.java | 23 ++ .../java/com/calculator/model/Number.java | 19 ++ .../src/main/resources/application.properties | 1 + .../CalculatorApplicationTests.java | 16 + .../ContainerCommunication.JPG | Bin 0 -> 71093 bytes ...ngBootContainerIO-CalculatorClient-GET.JPG | Bin 0 -> 44323 bytes ...gBootContainerIO-CalculatorClient-POST.JPG | Bin 0 -> 46180 bytes ...gBootContainerIO-CalculatorService-GET.JPG | Bin 0 -> 43532 bytes 33 files changed, 1771 insertions(+) create mode 100644 SpringBootContainerIO/CalculatorService/.gitignore create mode 100644 SpringBootContainerIO/CalculatorService/.mvn/wrapper/MavenWrapperDownloader.java create mode 100644 SpringBootContainerIO/CalculatorService/.mvn/wrapper/maven-wrapper.jar create mode 100644 SpringBootContainerIO/CalculatorService/.mvn/wrapper/maven-wrapper.properties create mode 100644 SpringBootContainerIO/CalculatorService/Dockerfile create mode 100644 SpringBootContainerIO/CalculatorService/mvnw create mode 100644 SpringBootContainerIO/CalculatorService/mvnw.cmd create mode 100644 SpringBootContainerIO/CalculatorService/pom.xml create mode 100644 SpringBootContainerIO/CalculatorService/src/main/java/com/calculator/CalculatorServiceApplication.java create mode 100644 SpringBootContainerIO/CalculatorService/src/main/java/com/calculator/CalculatorServiceController.java create mode 100644 SpringBootContainerIO/CalculatorService/src/main/java/com/calculator/model/Number.java create mode 100644 SpringBootContainerIO/CalculatorService/src/main/java/com/calculator/service/CalculatorServiceFloat.java create mode 100644 SpringBootContainerIO/CalculatorService/src/main/java/com/calculator/service/CalculatorServiceInteger.java create mode 100644 SpringBootContainerIO/CalculatorService/src/main/resources/application.properties create mode 100644 SpringBootContainerIO/CalculatorService/src/test/java/com/calculator/CalculatorServiceApplicationTests.java create mode 100644 SpringBootContainerIO/CalculatorServiceClient/.gitignore create mode 100644 SpringBootContainerIO/CalculatorServiceClient/.mvn/wrapper/MavenWrapperDownloader.java create mode 100644 SpringBootContainerIO/CalculatorServiceClient/.mvn/wrapper/maven-wrapper.jar create mode 100644 SpringBootContainerIO/CalculatorServiceClient/.mvn/wrapper/maven-wrapper.properties create mode 100644 SpringBootContainerIO/CalculatorServiceClient/Dockerfile create mode 100644 SpringBootContainerIO/CalculatorServiceClient/mvnw create mode 100644 SpringBootContainerIO/CalculatorServiceClient/mvnw.cmd create mode 100644 SpringBootContainerIO/CalculatorServiceClient/pom.xml create mode 100644 SpringBootContainerIO/CalculatorServiceClient/src/main/java/com/calculator/CalculatorApplication.java create mode 100644 SpringBootContainerIO/CalculatorServiceClient/src/main/java/com/calculator/CalculatorController.java create mode 100644 SpringBootContainerIO/CalculatorServiceClient/src/main/java/com/calculator/CalculatorServiceClient.java create mode 100644 SpringBootContainerIO/CalculatorServiceClient/src/main/java/com/calculator/model/Number.java create mode 100644 SpringBootContainerIO/CalculatorServiceClient/src/main/resources/application.properties create mode 100644 SpringBootContainerIO/CalculatorServiceClient/src/test/java/com/calculator/CalculatorApplicationTests.java create mode 100644 SpringBootContainerIO/ContainerCommunication.JPG create mode 100644 SpringBootContainerIO/SpringBootContainerIO-CalculatorClient-GET.JPG create mode 100644 SpringBootContainerIO/SpringBootContainerIO-CalculatorClient-POST.JPG create mode 100644 SpringBootContainerIO/SpringBootContainerIO-CalculatorService-GET.JPG diff --git a/SpringBootContainerIO/CalculatorService/.gitignore b/SpringBootContainerIO/CalculatorService/.gitignore new file mode 100644 index 0000000..153c933 --- /dev/null +++ b/SpringBootContainerIO/CalculatorService/.gitignore @@ -0,0 +1,29 @@ +HELP.md +/target/ +!.mvn/wrapper/maven-wrapper.jar + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +/build/ + +### VS Code ### +.vscode/ diff --git a/SpringBootContainerIO/CalculatorService/.mvn/wrapper/MavenWrapperDownloader.java b/SpringBootContainerIO/CalculatorService/.mvn/wrapper/MavenWrapperDownloader.java new file mode 100644 index 0000000..72308aa --- /dev/null +++ b/SpringBootContainerIO/CalculatorService/.mvn/wrapper/MavenWrapperDownloader.java @@ -0,0 +1,114 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you 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 + + https://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. +*/ + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.net.URL; +import java.nio.channels.Channels; +import java.nio.channels.ReadableByteChannel; +import java.util.Properties; + +public class MavenWrapperDownloader { + + /** + * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. + */ + private static final String DEFAULT_DOWNLOAD_URL = + "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar"; + + /** + * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to + * use instead of the default one. + */ + private static final String MAVEN_WRAPPER_PROPERTIES_PATH = + ".mvn/wrapper/maven-wrapper.properties"; + + /** + * Path where the maven-wrapper.jar will be saved to. + */ + private static final String MAVEN_WRAPPER_JAR_PATH = + ".mvn/wrapper/maven-wrapper.jar"; + + /** + * Name of the property which should be used to override the default download url for the wrapper. + */ + private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; + + public static void main(String args[]) { + System.out.println("- Downloader started"); + File baseDirectory = new File(args[0]); + System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); + + // If the maven-wrapper.properties exists, read it and check if it contains a custom + // wrapperUrl parameter. + File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); + String url = DEFAULT_DOWNLOAD_URL; + if(mavenWrapperPropertyFile.exists()) { + FileInputStream mavenWrapperPropertyFileInputStream = null; + try { + mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); + Properties mavenWrapperProperties = new Properties(); + mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); + url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); + } catch (IOException e) { + System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); + } finally { + try { + if(mavenWrapperPropertyFileInputStream != null) { + mavenWrapperPropertyFileInputStream.close(); + } + } catch (IOException e) { + // Ignore ... + } + } + } + System.out.println("- Downloading from: : " + url); + + File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); + if(!outputFile.getParentFile().exists()) { + if(!outputFile.getParentFile().mkdirs()) { + System.out.println( + "- ERROR creating output direcrory '" + outputFile.getParentFile().getAbsolutePath() + "'"); + } + } + System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); + try { + downloadFileFromURL(url, outputFile); + System.out.println("Done"); + System.exit(0); + } catch (Throwable e) { + System.out.println("- Error downloading"); + e.printStackTrace(); + System.exit(1); + } + } + + private static void downloadFileFromURL(String urlString, File destination) throws Exception { + URL website = new URL(urlString); + ReadableByteChannel rbc; + rbc = Channels.newChannel(website.openStream()); + FileOutputStream fos = new FileOutputStream(destination); + fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); + fos.close(); + rbc.close(); + } + +} diff --git a/SpringBootContainerIO/CalculatorService/.mvn/wrapper/maven-wrapper.jar b/SpringBootContainerIO/CalculatorService/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..01e67997377a393fd672c7dcde9dccbedf0cb1e9 GIT binary patch literal 48337 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 \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Mingw, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$M2_HOME" ] && + M2_HOME="`(cd "$M2_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" + # TODO classpath? +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="`which java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + + if [ -z "$1" ] + then + echo "Path not specified to find_maven_basedir" + return 1 + fi + + basedir="$1" + wdir="$1" + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + # workaround for JBEAP-8937 (on Solaris 10/Sparc) + if [ -d "${wdir}" ]; then + wdir=`cd "$wdir/.."; pwd` + fi + # end of workaround + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +BASE_DIR=`find_maven_basedir "$(pwd)"` +if [ -z "$BASE_DIR" ]; then + exit 1; +fi + +########################################################################################## +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +# This allows using the maven wrapper in projects that prohibit checking in binary data. +########################################################################################## +if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found .mvn/wrapper/maven-wrapper.jar" + fi +else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." + fi + jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar" + while IFS="=" read key value; do + case "$key" in (wrapperUrl) jarUrl="$value"; break ;; + esac + done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" + if [ "$MVNW_VERBOSE" = true ]; then + echo "Downloading from: $jarUrl" + fi + wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" + + if command -v wget > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found wget ... using wget" + fi + wget "$jarUrl" -O "$wrapperJarPath" + elif command -v curl > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found curl ... using curl" + fi + curl -o "$wrapperJarPath" "$jarUrl" + else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Falling back to using Java to download" + fi + javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" + if [ -e "$javaClass" ]; then + if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Compiling MavenWrapperDownloader.java ..." + fi + # Compiling the Java class + ("$JAVA_HOME/bin/javac" "$javaClass") + fi + if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + # Running the downloader + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Running MavenWrapperDownloader.java ..." + fi + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") + fi + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} +if [ "$MVNW_VERBOSE" = true ]; then + echo $MAVEN_PROJECTBASEDIR +fi +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --path --windows "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` +fi + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/SpringBootContainerIO/CalculatorService/mvnw.cmd b/SpringBootContainerIO/CalculatorService/mvnw.cmd new file mode 100644 index 0000000..fef5a8f --- /dev/null +++ b/SpringBootContainerIO/CalculatorService/mvnw.cmd @@ -0,0 +1,161 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM https://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven2 Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" +if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar" +FOR /F "tokens=1,2 delims==" %%A IN (%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties) DO ( + IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + echo Found %WRAPPER_JAR% +) else ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %DOWNLOAD_URL% + powershell -Command "(New-Object Net.WebClient).DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')" + echo Finished downloading %WRAPPER_JAR% +) +@REM End of extension + +%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" +if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%" == "on" pause + +if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% + +exit /B %ERROR_CODE% diff --git a/SpringBootContainerIO/CalculatorService/pom.xml b/SpringBootContainerIO/CalculatorService/pom.xml new file mode 100644 index 0000000..2d0d65a --- /dev/null +++ b/SpringBootContainerIO/CalculatorService/pom.xml @@ -0,0 +1,87 @@ + + + 4.0.0 + + com.calculator + CalculatorService + 0.0.1-SNAPSHOT + jar + + CalculatorService + Demo project for Spring Boot + + + org.springframework.boot + spring-boot-starter-parent + 2.0.4.RELEASE + + + + + UTF-8 + UTF-8 + 1.8 + + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-tomcat + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + com.spotify + dockerfile-maven-plugin + 1.3.4 + + ${docker.image.prefix}/${project.artifactId} + + + + org.apache.maven.plugins + maven-dependency-plugin + + + unpack + package + + unpack + + + + + ${project.groupId} + ${project.artifactId} + ${project.version} + + + + + + + + CalculatorService + + + + \ No newline at end of file diff --git a/SpringBootContainerIO/CalculatorService/src/main/java/com/calculator/CalculatorServiceApplication.java b/SpringBootContainerIO/CalculatorService/src/main/java/com/calculator/CalculatorServiceApplication.java new file mode 100644 index 0000000..48c0ddd --- /dev/null +++ b/SpringBootContainerIO/CalculatorService/src/main/java/com/calculator/CalculatorServiceApplication.java @@ -0,0 +1,13 @@ +package com.calculator; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class CalculatorServiceApplication { + + public static void main(String[] args) { + SpringApplication.run(CalculatorServiceApplication.class, args); + } + +} diff --git a/SpringBootContainerIO/CalculatorService/src/main/java/com/calculator/CalculatorServiceController.java b/SpringBootContainerIO/CalculatorService/src/main/java/com/calculator/CalculatorServiceController.java new file mode 100644 index 0000000..4ede1e0 --- /dev/null +++ b/SpringBootContainerIO/CalculatorService/src/main/java/com/calculator/CalculatorServiceController.java @@ -0,0 +1,70 @@ +package com.calculator; + +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import com.calculator.model.Number; +import com.calculator.service.CalculatorServiceFloat; +import com.calculator.service.CalculatorServiceInteger; + +@RestController +public class CalculatorServiceController { + + @RequestMapping("/") + public String welcome() { + return "Calculator Service Application"; + } + + @RequestMapping(value = "/addition/float/", method = RequestMethod.POST, consumes = "application/json", produces = "application/json") + public String floatAddition(@RequestBody Number number) { + CalculatorServiceFloat calculator = new CalculatorServiceFloat(); + return String.valueOf(calculator.addition(number.getFirstNumber(), number.getSecondNumber())); + } + + @RequestMapping(value = "/substraction/float/", method = RequestMethod.POST, consumes = "application/json", produces = "application/json") + public String floatSubstraction(@RequestBody Number number) { + CalculatorServiceFloat calculator = new CalculatorServiceFloat(); + return String.valueOf(calculator.substraction(number.getFirstNumber(), number.getSecondNumber())); + } + + @RequestMapping(value = "/multiplication/float/", method = RequestMethod.POST, consumes = "application/json", produces = "application/json") + public String floatMultiplication(@RequestBody Number number) { + CalculatorServiceFloat calculator = new CalculatorServiceFloat(); + return String.valueOf(calculator.multiplication(number.getFirstNumber(), number.getSecondNumber())); + } + + @RequestMapping(value = "/division/float/", method = RequestMethod.POST, consumes = "application/json", produces = "application/json") + public String floatDivision(@RequestBody Number number) { + CalculatorServiceFloat calculator = new CalculatorServiceFloat(); + return String.valueOf(calculator.division(number.getFirstNumber(), number.getSecondNumber())); + } + + // ----------------------- + + @RequestMapping(value = "/addition/int/", method = RequestMethod.POST, consumes = "application/json", produces = "application/json") + public String intAddition(@RequestBody Number number) { + CalculatorServiceInteger calculator = new CalculatorServiceInteger(); + return String.valueOf(calculator.addition(number.getFirstNumber(), number.getSecondNumber())); + } + + @RequestMapping(value = "/substraction/int/", method = RequestMethod.POST, consumes = "application/json", produces = "application/json") + public String intSubstraction(@RequestBody Number number) { + CalculatorServiceInteger calculator = new CalculatorServiceInteger(); + return String.valueOf(calculator.substraction(number.getFirstNumber(), number.getSecondNumber())); + } + + @RequestMapping(value = "/multiplication/int/", method = RequestMethod.POST, consumes = "application/json", produces = "application/json") + public String intMultiplication(@RequestBody Number number) { + CalculatorServiceInteger calculator = new CalculatorServiceInteger(); + return String.valueOf(calculator.multiplication(number.getFirstNumber(), number.getSecondNumber())); + } + + @RequestMapping(value = "/division/int/", method = RequestMethod.POST, consumes = "application/json", produces = "application/json") + public String intDivision(@RequestBody Number number) { + CalculatorServiceInteger calculator = new CalculatorServiceInteger(); + return String.valueOf(calculator.division(number.getFirstNumber(), number.getSecondNumber())); + } + +} diff --git a/SpringBootContainerIO/CalculatorService/src/main/java/com/calculator/model/Number.java b/SpringBootContainerIO/CalculatorService/src/main/java/com/calculator/model/Number.java new file mode 100644 index 0000000..960e248 --- /dev/null +++ b/SpringBootContainerIO/CalculatorService/src/main/java/com/calculator/model/Number.java @@ -0,0 +1,22 @@ +package com.calculator.model; + +public class Number { + String firstNumber; + String secondNumber; + + public String getFirstNumber() { + return firstNumber; + } + public void setFirstNumber(String firstNumber) { + this.firstNumber = firstNumber; + } + public String getSecondNumber() { + return secondNumber; + } + public void setSecondNumber(String secondNumber) { + this.secondNumber = secondNumber; + } + + + +} diff --git a/SpringBootContainerIO/CalculatorService/src/main/java/com/calculator/service/CalculatorServiceFloat.java b/SpringBootContainerIO/CalculatorService/src/main/java/com/calculator/service/CalculatorServiceFloat.java new file mode 100644 index 0000000..57c47b1 --- /dev/null +++ b/SpringBootContainerIO/CalculatorService/src/main/java/com/calculator/service/CalculatorServiceFloat.java @@ -0,0 +1,73 @@ +package com.calculator.service; + +public class CalculatorServiceFloat { + + public String addition(String firstNumber, String secondNumber) { + if (firstNumber != null && secondNumber != null) { + try { + float val1 = Float.parseFloat(firstNumber); + float val2 = Float.parseFloat(secondNumber); + float sum = val1 + val2; + return String.valueOf(sum); + } catch (NumberFormatException exception) { + return "ERROR: Enter the floating numbers"; + } + } + else { + return "ERROR: Computing numbers can not be null"; + } + } + + public String substraction(String firstNumber, String secondNumber) { + if (firstNumber != null && secondNumber != null) { + try { + float val1 = Float.parseFloat(firstNumber); + float val2 = Float.parseFloat(secondNumber); + float sub = val1 - val2; + return String.valueOf(sub); + } catch (NumberFormatException exception) { + return "ERROR: Enter the floating numbers"; + } + } + else { + return "ERROR: Computing numbers can not be null"; + } + } + + public String multiplication(String firstNumber, String secondNumber) { + if (firstNumber != null && secondNumber != null) { + try { + float val1 = Float.parseFloat(firstNumber); + float val2 = Float.parseFloat(secondNumber); + float mul = val1 * val2; + return String.valueOf(mul); + } catch (NumberFormatException exception) { + return "ERROR: Enter the floating numbers"; + } + } + else { + return "ERROR: Computing numbers can not be null"; + } + } + + public String division(String firstNumber, String secondNumber) { + if (firstNumber != null && secondNumber != null) { + try { + float val1 = Float.parseFloat(firstNumber); + float val2 = Float.parseFloat(secondNumber); + if (val2 != 0 || val2 != 0.0) { + float div = val1 / val2; + return String.valueOf(div); + } else { + return String.valueOf(0); + } + } catch (NumberFormatException exception) { + return "ERROR: Enter the floating numbers"; + } + } + else { + return "ERROR: Computing numbers can not be null"; + } + } + +} diff --git a/SpringBootContainerIO/CalculatorService/src/main/java/com/calculator/service/CalculatorServiceInteger.java b/SpringBootContainerIO/CalculatorService/src/main/java/com/calculator/service/CalculatorServiceInteger.java new file mode 100644 index 0000000..6783161 --- /dev/null +++ b/SpringBootContainerIO/CalculatorService/src/main/java/com/calculator/service/CalculatorServiceInteger.java @@ -0,0 +1,69 @@ +package com.calculator.service; + +public class CalculatorServiceInteger { + + public String addition(String firstNumber, String secondNumber) { + if (firstNumber != null && secondNumber != null) { + try { + int val1 = Integer.parseInt(firstNumber); + int val2 = Integer.parseInt(secondNumber); + int sum = val1 + val2; + return String.valueOf(sum); + } catch (NumberFormatException exception) { + return "ERROR: Enter the int numbers"; + } + } else { + return "ERROR: Computing numbers can not be null"; + } + + } + + public String substraction(String firstNumber, String secondNumber) { + if (firstNumber != null && secondNumber != null) { + try { + int val1 = Integer.parseInt(firstNumber); + int val2 = Integer.parseInt(secondNumber); + int sub = val1 - val2; + return String.valueOf(sub); + } catch (NumberFormatException exception) { + return "ERROR: Enter the int numbers"; + } + } else { + return "ERROR: Computing numbers can not be null"; + } + } + + public String multiplication(String firstNumber, String secondNumber) { + if (firstNumber != null && secondNumber != null) { + try { + int val1 = Integer.parseInt(firstNumber); + int val2 = Integer.parseInt(secondNumber); + int mul = val1 * val2; + return String.valueOf(mul); + } catch (NumberFormatException exception) { + return "ERROR: Enter the int numbers"; + } + } else { + return "ERROR: Computing numbers can not be null"; + } + } + + public String division(String firstNumber, String secondNumber) { + if (firstNumber != null && secondNumber != null) { + try { + int val1 = Integer.parseInt(firstNumber); + int val2 = Integer.parseInt(secondNumber); + if (val2 != 0 || val2 != 0.0) { + int div = val1 / val2; + return String.valueOf(div); + } else { + return String.valueOf(0); + } + } catch (NumberFormatException exception) { + return "ERROR: Enter the int numbers"; + } + } else { + return "ERROR: Computing numbers can not be null"; + } + } +} diff --git a/SpringBootContainerIO/CalculatorService/src/main/resources/application.properties b/SpringBootContainerIO/CalculatorService/src/main/resources/application.properties new file mode 100644 index 0000000..e69de29 diff --git a/SpringBootContainerIO/CalculatorService/src/test/java/com/calculator/CalculatorServiceApplicationTests.java b/SpringBootContainerIO/CalculatorService/src/test/java/com/calculator/CalculatorServiceApplicationTests.java new file mode 100644 index 0000000..5449609 --- /dev/null +++ b/SpringBootContainerIO/CalculatorService/src/test/java/com/calculator/CalculatorServiceApplicationTests.java @@ -0,0 +1,16 @@ +package com.calculator; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest +public class CalculatorServiceApplicationTests { + + @Test + public void contextLoads() { + } + +} diff --git a/SpringBootContainerIO/CalculatorServiceClient/.gitignore b/SpringBootContainerIO/CalculatorServiceClient/.gitignore new file mode 100644 index 0000000..153c933 --- /dev/null +++ b/SpringBootContainerIO/CalculatorServiceClient/.gitignore @@ -0,0 +1,29 @@ +HELP.md +/target/ +!.mvn/wrapper/maven-wrapper.jar + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +/build/ + +### VS Code ### +.vscode/ diff --git a/SpringBootContainerIO/CalculatorServiceClient/.mvn/wrapper/MavenWrapperDownloader.java b/SpringBootContainerIO/CalculatorServiceClient/.mvn/wrapper/MavenWrapperDownloader.java new file mode 100644 index 0000000..72308aa --- /dev/null +++ b/SpringBootContainerIO/CalculatorServiceClient/.mvn/wrapper/MavenWrapperDownloader.java @@ -0,0 +1,114 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you 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 + + https://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. +*/ + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.net.URL; +import java.nio.channels.Channels; +import java.nio.channels.ReadableByteChannel; +import java.util.Properties; + +public class MavenWrapperDownloader { + + /** + * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. + */ + private static final String DEFAULT_DOWNLOAD_URL = + "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar"; + + /** + * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to + * use instead of the default one. + */ + private static final String MAVEN_WRAPPER_PROPERTIES_PATH = + ".mvn/wrapper/maven-wrapper.properties"; + + /** + * Path where the maven-wrapper.jar will be saved to. + */ + private static final String MAVEN_WRAPPER_JAR_PATH = + ".mvn/wrapper/maven-wrapper.jar"; + + /** + * Name of the property which should be used to override the default download url for the wrapper. + */ + private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; + + public static void main(String args[]) { + System.out.println("- Downloader started"); + File baseDirectory = new File(args[0]); + System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); + + // If the maven-wrapper.properties exists, read it and check if it contains a custom + // wrapperUrl parameter. + File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); + String url = DEFAULT_DOWNLOAD_URL; + if(mavenWrapperPropertyFile.exists()) { + FileInputStream mavenWrapperPropertyFileInputStream = null; + try { + mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); + Properties mavenWrapperProperties = new Properties(); + mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); + url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); + } catch (IOException e) { + System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); + } finally { + try { + if(mavenWrapperPropertyFileInputStream != null) { + mavenWrapperPropertyFileInputStream.close(); + } + } catch (IOException e) { + // Ignore ... + } + } + } + System.out.println("- Downloading from: : " + url); + + File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); + if(!outputFile.getParentFile().exists()) { + if(!outputFile.getParentFile().mkdirs()) { + System.out.println( + "- ERROR creating output direcrory '" + outputFile.getParentFile().getAbsolutePath() + "'"); + } + } + System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); + try { + downloadFileFromURL(url, outputFile); + System.out.println("Done"); + System.exit(0); + } catch (Throwable e) { + System.out.println("- Error downloading"); + e.printStackTrace(); + System.exit(1); + } + } + + private static void downloadFileFromURL(String urlString, File destination) throws Exception { + URL website = new URL(urlString); + ReadableByteChannel rbc; + rbc = Channels.newChannel(website.openStream()); + FileOutputStream fos = new FileOutputStream(destination); + fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); + fos.close(); + rbc.close(); + } + +} diff --git a/SpringBootContainerIO/CalculatorServiceClient/.mvn/wrapper/maven-wrapper.jar b/SpringBootContainerIO/CalculatorServiceClient/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..01e67997377a393fd672c7dcde9dccbedf0cb1e9 GIT binary patch literal 48337 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 \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Mingw, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$M2_HOME" ] && + M2_HOME="`(cd "$M2_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" + # TODO classpath? +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="`which java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + + if [ -z "$1" ] + then + echo "Path not specified to find_maven_basedir" + return 1 + fi + + basedir="$1" + wdir="$1" + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + # workaround for JBEAP-8937 (on Solaris 10/Sparc) + if [ -d "${wdir}" ]; then + wdir=`cd "$wdir/.."; pwd` + fi + # end of workaround + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +BASE_DIR=`find_maven_basedir "$(pwd)"` +if [ -z "$BASE_DIR" ]; then + exit 1; +fi + +########################################################################################## +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +# This allows using the maven wrapper in projects that prohibit checking in binary data. +########################################################################################## +if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found .mvn/wrapper/maven-wrapper.jar" + fi +else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." + fi + jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar" + while IFS="=" read key value; do + case "$key" in (wrapperUrl) jarUrl="$value"; break ;; + esac + done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" + if [ "$MVNW_VERBOSE" = true ]; then + echo "Downloading from: $jarUrl" + fi + wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" + + if command -v wget > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found wget ... using wget" + fi + wget "$jarUrl" -O "$wrapperJarPath" + elif command -v curl > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found curl ... using curl" + fi + curl -o "$wrapperJarPath" "$jarUrl" + else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Falling back to using Java to download" + fi + javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" + if [ -e "$javaClass" ]; then + if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Compiling MavenWrapperDownloader.java ..." + fi + # Compiling the Java class + ("$JAVA_HOME/bin/javac" "$javaClass") + fi + if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + # Running the downloader + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Running MavenWrapperDownloader.java ..." + fi + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") + fi + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} +if [ "$MVNW_VERBOSE" = true ]; then + echo $MAVEN_PROJECTBASEDIR +fi +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --path --windows "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` +fi + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/SpringBootContainerIO/CalculatorServiceClient/mvnw.cmd b/SpringBootContainerIO/CalculatorServiceClient/mvnw.cmd new file mode 100644 index 0000000..fef5a8f --- /dev/null +++ b/SpringBootContainerIO/CalculatorServiceClient/mvnw.cmd @@ -0,0 +1,161 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM https://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven2 Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" +if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar" +FOR /F "tokens=1,2 delims==" %%A IN (%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties) DO ( + IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + echo Found %WRAPPER_JAR% +) else ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %DOWNLOAD_URL% + powershell -Command "(New-Object Net.WebClient).DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')" + echo Finished downloading %WRAPPER_JAR% +) +@REM End of extension + +%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" +if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%" == "on" pause + +if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% + +exit /B %ERROR_CODE% diff --git a/SpringBootContainerIO/CalculatorServiceClient/pom.xml b/SpringBootContainerIO/CalculatorServiceClient/pom.xml new file mode 100644 index 0000000..5ec8912 --- /dev/null +++ b/SpringBootContainerIO/CalculatorServiceClient/pom.xml @@ -0,0 +1,94 @@ + + + 4.0.0 + + com.calculator + CalculatorClient + 0.0.1-SNAPSHOT + jar + + CalculatorClient + Demo project for Spring Boot + + + org.springframework.boot + spring-boot-starter-parent + 2.0.4.RELEASE + + + + + UTF-8 + UTF-8 + 1.8 + + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-tomcat + + + + org.springframework.boot + spring-boot-starter-test + test + + + + com.sun.jersey + jersey-client + 1.8 + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + com.spotify + dockerfile-maven-plugin + 1.3.4 + + ${docker.image.prefix}/${project.artifactId} + + + + org.apache.maven.plugins + maven-dependency-plugin + + + unpack + package + + unpack + + + + + ${project.groupId} + ${project.artifactId} + ${project.version} + + + + + + + + CalculatorClient + + + + diff --git a/SpringBootContainerIO/CalculatorServiceClient/src/main/java/com/calculator/CalculatorApplication.java b/SpringBootContainerIO/CalculatorServiceClient/src/main/java/com/calculator/CalculatorApplication.java new file mode 100644 index 0000000..5c189d0 --- /dev/null +++ b/SpringBootContainerIO/CalculatorServiceClient/src/main/java/com/calculator/CalculatorApplication.java @@ -0,0 +1,12 @@ +package com.calculator; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class CalculatorApplication { + + public static void main(String[] args) { + SpringApplication.run(CalculatorApplication.class, args); + } +} diff --git a/SpringBootContainerIO/CalculatorServiceClient/src/main/java/com/calculator/CalculatorController.java b/SpringBootContainerIO/CalculatorServiceClient/src/main/java/com/calculator/CalculatorController.java new file mode 100644 index 0000000..fff324b --- /dev/null +++ b/SpringBootContainerIO/CalculatorServiceClient/src/main/java/com/calculator/CalculatorController.java @@ -0,0 +1,66 @@ +package com.calculator; + +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import com.calculator.model.Number; + +@RestController +public class CalculatorController { + + @RequestMapping("/") + public String welcome() { + return "Calculator Client Application"; + } + + @RequestMapping(value = "/addition/float/", method = RequestMethod.POST, consumes = "application/json", produces = "application/json") + public String floatAddition(@RequestBody Number number) { + CalculatorServiceClient calculatorServiceClient = new CalculatorServiceClient(); + return calculatorServiceClient.callService(number.getFirstNumber(), number.getSecondNumber(),"/addition/float/"); + } + + @RequestMapping(value = "/substraction/float/", method = RequestMethod.POST, consumes = "application/json", produces = "application/json") + public String floatSubstraction(@RequestBody Number number) { + CalculatorServiceClient calculatorServiceClient = new CalculatorServiceClient(); + return calculatorServiceClient.callService(number.getFirstNumber(), number.getSecondNumber(),"/substraction/float/"); + } + + @RequestMapping(value = "/multiplication/float/", method = RequestMethod.POST, consumes = "application/json", produces = "application/json") + public String floatMultiplication(@RequestBody Number number) { + CalculatorServiceClient calculatorServiceClient = new CalculatorServiceClient(); + return calculatorServiceClient.callService(number.getFirstNumber(), number.getSecondNumber(),"/multiplication/float/"); + } + + @RequestMapping(value = "/division/float/", method = RequestMethod.POST, consumes = "application/json", produces = "application/json") + public String floatDivision(@RequestBody Number number) { + CalculatorServiceClient calculatorServiceClient = new CalculatorServiceClient(); + return calculatorServiceClient.callService(number.getFirstNumber(), number.getSecondNumber(),"/division/float/"); + } + // ----------------------------------- + + @RequestMapping(value = "/addition/int/", method = RequestMethod.POST, consumes = "application/json", produces = "application/json") + public String intAddition(@RequestBody Number number) { + CalculatorServiceClient calculatorServiceClient = new CalculatorServiceClient(); + return calculatorServiceClient.callService(number.getFirstNumber(), number.getSecondNumber(),"/addition/int/"); + } + + @RequestMapping(value = "/substraction/int/", method = RequestMethod.POST, consumes = "application/json", produces = "application/json") + public String intSubstraction(@RequestBody Number number) { + CalculatorServiceClient calculatorServiceClient = new CalculatorServiceClient(); + return calculatorServiceClient.callService(number.getFirstNumber(), number.getSecondNumber(),"/substraction/int/"); + } + + @RequestMapping(value = "/multiplication/int/", method = RequestMethod.POST, consumes = "application/json", produces = "application/json") + public String intMultiplication(@RequestBody Number number) { + CalculatorServiceClient calculatorServiceClient = new CalculatorServiceClient(); + return calculatorServiceClient.callService(number.getFirstNumber(), number.getSecondNumber(),"/multiplication/int/"); + } + + @RequestMapping(value = "/division/int/", method = RequestMethod.POST, consumes = "application/json", produces = "application/json") + public String intDivision(@RequestBody Number number) { + CalculatorServiceClient calculatorServiceClient = new CalculatorServiceClient(); + return calculatorServiceClient.callService(number.getFirstNumber(), number.getSecondNumber(),"/division/int/"); + } +} diff --git a/SpringBootContainerIO/CalculatorServiceClient/src/main/java/com/calculator/CalculatorServiceClient.java b/SpringBootContainerIO/CalculatorServiceClient/src/main/java/com/calculator/CalculatorServiceClient.java new file mode 100644 index 0000000..ebb9018 --- /dev/null +++ b/SpringBootContainerIO/CalculatorServiceClient/src/main/java/com/calculator/CalculatorServiceClient.java @@ -0,0 +1,23 @@ +package com.calculator; + +import com.sun.jersey.api.client.Client; +import com.sun.jersey.api.client.ClientResponse; +import com.sun.jersey.api.client.WebResource; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.env.Environment; + +public class CalculatorServiceClient { + + public String callService(String firstNumber, String secondNumber, String operationPath) { + Client client = Client.create(); + String calculatorServiceURL="http://192.168.99.100:8097"; + WebResource webResource = client.resource(calculatorServiceURL + operationPath); + String input = "{\"firstNumber\":\"" + firstNumber + "\",\"secondNumber\":\"" + secondNumber + "\"}"; + + ClientResponse response = webResource.type("application/json").post(ClientResponse.class, input); + return response.getEntity(String.class); + + } + +} \ No newline at end of file diff --git a/SpringBootContainerIO/CalculatorServiceClient/src/main/java/com/calculator/model/Number.java b/SpringBootContainerIO/CalculatorServiceClient/src/main/java/com/calculator/model/Number.java new file mode 100644 index 0000000..aabd575 --- /dev/null +++ b/SpringBootContainerIO/CalculatorServiceClient/src/main/java/com/calculator/model/Number.java @@ -0,0 +1,19 @@ +package com.calculator.model; + +public class Number { + String firstNumber; + String secondNumber; + + public String getFirstNumber() { + return firstNumber; + } + public void setFirstNumber(String firstNumber) { + this.firstNumber = firstNumber; + } + public String getSecondNumber() { + return secondNumber; + } + public void setSecondNumber(String secondNumber) { + this.secondNumber = secondNumber; + } +} diff --git a/SpringBootContainerIO/CalculatorServiceClient/src/main/resources/application.properties b/SpringBootContainerIO/CalculatorServiceClient/src/main/resources/application.properties new file mode 100644 index 0000000..6ba069f --- /dev/null +++ b/SpringBootContainerIO/CalculatorServiceClient/src/main/resources/application.properties @@ -0,0 +1 @@ +calculator.service.url=${CALCULATOR_SERVICE_URL} \ No newline at end of file diff --git a/SpringBootContainerIO/CalculatorServiceClient/src/test/java/com/calculator/CalculatorApplicationTests.java b/SpringBootContainerIO/CalculatorServiceClient/src/test/java/com/calculator/CalculatorApplicationTests.java new file mode 100644 index 0000000..fe127c4 --- /dev/null +++ b/SpringBootContainerIO/CalculatorServiceClient/src/test/java/com/calculator/CalculatorApplicationTests.java @@ -0,0 +1,16 @@ +package com.calculator; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest +public class CalculatorApplicationTests { + + @Test + public void contextLoads() { + } + +} diff --git a/SpringBootContainerIO/ContainerCommunication.JPG b/SpringBootContainerIO/ContainerCommunication.JPG new file mode 100644 index 0000000000000000000000000000000000000000..43da5977457ee0def6f7aa6039f218c154b2f323 GIT binary patch literal 71093 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 literal 0 HcmV?d00001 diff --git a/SpringBootContainerIO/SpringBootContainerIO-CalculatorClient-POST.JPG b/SpringBootContainerIO/SpringBootContainerIO-CalculatorClient-POST.JPG new file mode 100644 index 0000000000000000000000000000000000000000..6ee23051d97be78da065334cdd7481d32f7df86a GIT binary patch literal 46180 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 literal 0 HcmV?d00001 diff --git a/SpringBootContainerIO/SpringBootContainerIO-CalculatorService-GET.JPG b/SpringBootContainerIO/SpringBootContainerIO-CalculatorService-GET.JPG new file mode 100644 index 0000000000000000000000000000000000000000..74ff5666fa0ee81a4e55d6c1cca7ea6cdcb82ed1 GIT binary patch literal 43532 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 literal 0 HcmV?d00001 From 9dff9082187773f6cdcc910ad8dfafd4d1e02ec7 Mon Sep 17 00:00:00 2001 From: Rahul Date: Sun, 26 May 2019 20:12:31 +0530 Subject: [PATCH 3/9] Container IO --- ...nication.JPG => InterContainerCommunication.JPG} | Bin ...BootContainerIO-CalculatorServiceClient-GET.JPG} | Bin ...ootContainerIO-CalculatorServiceClient-POST.JPG} | Bin 3 files changed, 0 insertions(+), 0 deletions(-) rename SpringBootContainerIO/{ContainerCommunication.JPG => InterContainerCommunication.JPG} (100%) rename SpringBootContainerIO/{SpringBootContainerIO-CalculatorClient-GET.JPG => SpringBootContainerIO-CalculatorServiceClient-GET.JPG} (100%) rename SpringBootContainerIO/{SpringBootContainerIO-CalculatorClient-POST.JPG => SpringBootContainerIO-CalculatorServiceClient-POST.JPG} (100%) diff --git a/SpringBootContainerIO/ContainerCommunication.JPG b/SpringBootContainerIO/InterContainerCommunication.JPG similarity index 100% rename from SpringBootContainerIO/ContainerCommunication.JPG rename to SpringBootContainerIO/InterContainerCommunication.JPG diff --git a/SpringBootContainerIO/SpringBootContainerIO-CalculatorClient-GET.JPG b/SpringBootContainerIO/SpringBootContainerIO-CalculatorServiceClient-GET.JPG similarity index 100% rename from SpringBootContainerIO/SpringBootContainerIO-CalculatorClient-GET.JPG rename to SpringBootContainerIO/SpringBootContainerIO-CalculatorServiceClient-GET.JPG diff --git a/SpringBootContainerIO/SpringBootContainerIO-CalculatorClient-POST.JPG b/SpringBootContainerIO/SpringBootContainerIO-CalculatorServiceClient-POST.JPG similarity index 100% rename from SpringBootContainerIO/SpringBootContainerIO-CalculatorClient-POST.JPG rename to SpringBootContainerIO/SpringBootContainerIO-CalculatorServiceClient-POST.JPG From 19551c7295de8d009bc350c7518db37350fa9b98 Mon Sep 17 00:00:00 2001 From: Rahul Date: Tue, 10 Sep 2019 23:45:00 +0530 Subject: [PATCH 4/9] SpringBootIO --- .../CalculatorServiceController.java | 36 +++++++++--------- .../java/com/calculator/model/Number.java | 2 - .../service/CalculatorServiceFloat.java | 3 ++ .../service/CalculatorServiceInteger.java | 2 + .../src/main/resources/application.properties | 1 + .../docker-compose.yml | 20 ++++++++++ .../com/calculator/CalculatorController.java | 29 +++++++------- ...=> PseudoServiceForCalculatorService.java} | 5 ++- .../src/main/resources/application.properties | 3 +- ...on.JPG => [00] ContainerCommunication.JPG} | Bin ...BootContainerIO-CalculatorService-GET.JPG} | Bin ...gBootContainerIO-CalculatorClient-GET.JPG} | Bin ...BootContainerIO-CalculatorClient-POST.JPG} | Bin 13 files changed, 64 insertions(+), 37 deletions(-) create mode 100644 SpringBootContainerIO/CalculatorServiceClient/docker-compose.yml rename SpringBootContainerIO/CalculatorServiceClient/src/main/java/com/calculator/{CalculatorServiceClient.java => PseudoServiceForCalculatorService.java} (84%) rename SpringBootContainerIO/{InterContainerCommunication.JPG => [00] ContainerCommunication.JPG} (100%) rename SpringBootContainerIO/{SpringBootContainerIO-CalculatorService-GET.JPG => [01] SpringBootContainerIO-CalculatorService-GET.JPG} (100%) rename SpringBootContainerIO/{SpringBootContainerIO-CalculatorServiceClient-GET.JPG => [02] SpringBootContainerIO-CalculatorClient-GET.JPG} (100%) rename SpringBootContainerIO/{SpringBootContainerIO-CalculatorServiceClient-POST.JPG => [03] SpringBootContainerIO-CalculatorClient-POST.JPG} (100%) diff --git a/SpringBootContainerIO/CalculatorService/src/main/java/com/calculator/CalculatorServiceController.java b/SpringBootContainerIO/CalculatorService/src/main/java/com/calculator/CalculatorServiceController.java index 4ede1e0..b368fd3 100644 --- a/SpringBootContainerIO/CalculatorService/src/main/java/com/calculator/CalculatorServiceController.java +++ b/SpringBootContainerIO/CalculatorService/src/main/java/com/calculator/CalculatorServiceController.java @@ -1,5 +1,6 @@ package com.calculator; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @@ -12,59 +13,60 @@ @RestController public class CalculatorServiceController { + @Autowired + CalculatorServiceFloat calculatorServiceFloat; + @Autowired + CalculatorServiceInteger calculatorServiceInteger; + + @RequestMapping("/") public String welcome() { return "Calculator Service Application"; } + // ----------CalculatorServiceFloat------------- + @RequestMapping(value = "/addition/float/", method = RequestMethod.POST, consumes = "application/json", produces = "application/json") public String floatAddition(@RequestBody Number number) { - CalculatorServiceFloat calculator = new CalculatorServiceFloat(); - return String.valueOf(calculator.addition(number.getFirstNumber(), number.getSecondNumber())); + return String.valueOf(calculatorServiceFloat.addition(number.getFirstNumber(), number.getSecondNumber())); } @RequestMapping(value = "/substraction/float/", method = RequestMethod.POST, consumes = "application/json", produces = "application/json") public String floatSubstraction(@RequestBody Number number) { - CalculatorServiceFloat calculator = new CalculatorServiceFloat(); - return String.valueOf(calculator.substraction(number.getFirstNumber(), number.getSecondNumber())); + return String.valueOf(calculatorServiceFloat.substraction(number.getFirstNumber(), number.getSecondNumber())); } @RequestMapping(value = "/multiplication/float/", method = RequestMethod.POST, consumes = "application/json", produces = "application/json") public String floatMultiplication(@RequestBody Number number) { - CalculatorServiceFloat calculator = new CalculatorServiceFloat(); - return String.valueOf(calculator.multiplication(number.getFirstNumber(), number.getSecondNumber())); + return String.valueOf(calculatorServiceFloat.multiplication(number.getFirstNumber(), number.getSecondNumber())); } @RequestMapping(value = "/division/float/", method = RequestMethod.POST, consumes = "application/json", produces = "application/json") public String floatDivision(@RequestBody Number number) { - CalculatorServiceFloat calculator = new CalculatorServiceFloat(); - return String.valueOf(calculator.division(number.getFirstNumber(), number.getSecondNumber())); + return String.valueOf(calculatorServiceFloat.division(number.getFirstNumber(), number.getSecondNumber())); } - // ----------------------- + // ----------CalculatorServiceInteger------------- @RequestMapping(value = "/addition/int/", method = RequestMethod.POST, consumes = "application/json", produces = "application/json") public String intAddition(@RequestBody Number number) { - CalculatorServiceInteger calculator = new CalculatorServiceInteger(); - return String.valueOf(calculator.addition(number.getFirstNumber(), number.getSecondNumber())); + return String.valueOf(calculatorServiceInteger.addition(number.getFirstNumber(), number.getSecondNumber())); } @RequestMapping(value = "/substraction/int/", method = RequestMethod.POST, consumes = "application/json", produces = "application/json") public String intSubstraction(@RequestBody Number number) { - CalculatorServiceInteger calculator = new CalculatorServiceInteger(); - return String.valueOf(calculator.substraction(number.getFirstNumber(), number.getSecondNumber())); + return String.valueOf(calculatorServiceInteger.substraction(number.getFirstNumber(), number.getSecondNumber())); } @RequestMapping(value = "/multiplication/int/", method = RequestMethod.POST, consumes = "application/json", produces = "application/json") public String intMultiplication(@RequestBody Number number) { - CalculatorServiceInteger calculator = new CalculatorServiceInteger(); - return String.valueOf(calculator.multiplication(number.getFirstNumber(), number.getSecondNumber())); + return String + .valueOf(calculatorServiceInteger.multiplication(number.getFirstNumber(), number.getSecondNumber())); } @RequestMapping(value = "/division/int/", method = RequestMethod.POST, consumes = "application/json", produces = "application/json") public String intDivision(@RequestBody Number number) { - CalculatorServiceInteger calculator = new CalculatorServiceInteger(); - return String.valueOf(calculator.division(number.getFirstNumber(), number.getSecondNumber())); + return String.valueOf(calculatorServiceInteger.division(number.getFirstNumber(), number.getSecondNumber())); } } diff --git a/SpringBootContainerIO/CalculatorService/src/main/java/com/calculator/model/Number.java b/SpringBootContainerIO/CalculatorService/src/main/java/com/calculator/model/Number.java index 960e248..7366abb 100644 --- a/SpringBootContainerIO/CalculatorService/src/main/java/com/calculator/model/Number.java +++ b/SpringBootContainerIO/CalculatorService/src/main/java/com/calculator/model/Number.java @@ -17,6 +17,4 @@ public void setSecondNumber(String secondNumber) { this.secondNumber = secondNumber; } - - } diff --git a/SpringBootContainerIO/CalculatorService/src/main/java/com/calculator/service/CalculatorServiceFloat.java b/SpringBootContainerIO/CalculatorService/src/main/java/com/calculator/service/CalculatorServiceFloat.java index 57c47b1..44f4542 100644 --- a/SpringBootContainerIO/CalculatorService/src/main/java/com/calculator/service/CalculatorServiceFloat.java +++ b/SpringBootContainerIO/CalculatorService/src/main/java/com/calculator/service/CalculatorServiceFloat.java @@ -1,5 +1,8 @@ package com.calculator.service; +import org.springframework.stereotype.Service; + +@Service public class CalculatorServiceFloat { public String addition(String firstNumber, String secondNumber) { diff --git a/SpringBootContainerIO/CalculatorService/src/main/java/com/calculator/service/CalculatorServiceInteger.java b/SpringBootContainerIO/CalculatorService/src/main/java/com/calculator/service/CalculatorServiceInteger.java index 6783161..17fcf77 100644 --- a/SpringBootContainerIO/CalculatorService/src/main/java/com/calculator/service/CalculatorServiceInteger.java +++ b/SpringBootContainerIO/CalculatorService/src/main/java/com/calculator/service/CalculatorServiceInteger.java @@ -1,5 +1,7 @@ package com.calculator.service; +import org.springframework.stereotype.Service; +@Service public class CalculatorServiceInteger { public String addition(String firstNumber, String secondNumber) { diff --git a/SpringBootContainerIO/CalculatorService/src/main/resources/application.properties b/SpringBootContainerIO/CalculatorService/src/main/resources/application.properties index e69de29..0109051 100644 --- a/SpringBootContainerIO/CalculatorService/src/main/resources/application.properties +++ b/SpringBootContainerIO/CalculatorService/src/main/resources/application.properties @@ -0,0 +1 @@ +server.port=8097 \ No newline at end of file diff --git a/SpringBootContainerIO/CalculatorServiceClient/docker-compose.yml b/SpringBootContainerIO/CalculatorServiceClient/docker-compose.yml new file mode 100644 index 0000000..9891e0f --- /dev/null +++ b/SpringBootContainerIO/CalculatorServiceClient/docker-compose.yml @@ -0,0 +1,20 @@ +version: "3" +services: + consumer: + image: calculatorserviceclient + ports: + - "8093:8080" + networks: + - consumer-producer + depends_on: + - producer + + producer: + image: rahulvaish/springbootcalculatorservice + ports: + - "8097:8080" + networks: + - consumer-producer + +networks: + consumer-producer: \ No newline at end of file diff --git a/SpringBootContainerIO/CalculatorServiceClient/src/main/java/com/calculator/CalculatorController.java b/SpringBootContainerIO/CalculatorServiceClient/src/main/java/com/calculator/CalculatorController.java index fff324b..518c4a4 100644 --- a/SpringBootContainerIO/CalculatorServiceClient/src/main/java/com/calculator/CalculatorController.java +++ b/SpringBootContainerIO/CalculatorServiceClient/src/main/java/com/calculator/CalculatorController.java @@ -1,5 +1,6 @@ package com.calculator; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @@ -10,6 +11,9 @@ @RestController public class CalculatorController { + @Autowired + PseudoServiceForCalculatorService pseudoServiceForCalculatorService; + @RequestMapping("/") public String welcome() { return "Calculator Client Application"; @@ -17,50 +21,43 @@ public String welcome() { @RequestMapping(value = "/addition/float/", method = RequestMethod.POST, consumes = "application/json", produces = "application/json") public String floatAddition(@RequestBody Number number) { - CalculatorServiceClient calculatorServiceClient = new CalculatorServiceClient(); - return calculatorServiceClient.callService(number.getFirstNumber(), number.getSecondNumber(),"/addition/float/"); + return pseudoServiceForCalculatorService.callService(number.getFirstNumber(), number.getSecondNumber(),"/addition/float/"); } @RequestMapping(value = "/substraction/float/", method = RequestMethod.POST, consumes = "application/json", produces = "application/json") public String floatSubstraction(@RequestBody Number number) { - CalculatorServiceClient calculatorServiceClient = new CalculatorServiceClient(); - return calculatorServiceClient.callService(number.getFirstNumber(), number.getSecondNumber(),"/substraction/float/"); + return pseudoServiceForCalculatorService.callService(number.getFirstNumber(), number.getSecondNumber(),"/substraction/float/"); } @RequestMapping(value = "/multiplication/float/", method = RequestMethod.POST, consumes = "application/json", produces = "application/json") public String floatMultiplication(@RequestBody Number number) { - CalculatorServiceClient calculatorServiceClient = new CalculatorServiceClient(); - return calculatorServiceClient.callService(number.getFirstNumber(), number.getSecondNumber(),"/multiplication/float/"); + return pseudoServiceForCalculatorService.callService(number.getFirstNumber(), number.getSecondNumber(),"/multiplication/float/"); } @RequestMapping(value = "/division/float/", method = RequestMethod.POST, consumes = "application/json", produces = "application/json") public String floatDivision(@RequestBody Number number) { - CalculatorServiceClient calculatorServiceClient = new CalculatorServiceClient(); - return calculatorServiceClient.callService(number.getFirstNumber(), number.getSecondNumber(),"/division/float/"); + return pseudoServiceForCalculatorService.callService(number.getFirstNumber(), number.getSecondNumber(),"/division/float/"); } + // ----------------------------------- @RequestMapping(value = "/addition/int/", method = RequestMethod.POST, consumes = "application/json", produces = "application/json") public String intAddition(@RequestBody Number number) { - CalculatorServiceClient calculatorServiceClient = new CalculatorServiceClient(); - return calculatorServiceClient.callService(number.getFirstNumber(), number.getSecondNumber(),"/addition/int/"); + return pseudoServiceForCalculatorService.callService(number.getFirstNumber(), number.getSecondNumber(),"/addition/int/"); } @RequestMapping(value = "/substraction/int/", method = RequestMethod.POST, consumes = "application/json", produces = "application/json") public String intSubstraction(@RequestBody Number number) { - CalculatorServiceClient calculatorServiceClient = new CalculatorServiceClient(); - return calculatorServiceClient.callService(number.getFirstNumber(), number.getSecondNumber(),"/substraction/int/"); + return pseudoServiceForCalculatorService.callService(number.getFirstNumber(), number.getSecondNumber(),"/substraction/int/"); } @RequestMapping(value = "/multiplication/int/", method = RequestMethod.POST, consumes = "application/json", produces = "application/json") public String intMultiplication(@RequestBody Number number) { - CalculatorServiceClient calculatorServiceClient = new CalculatorServiceClient(); - return calculatorServiceClient.callService(number.getFirstNumber(), number.getSecondNumber(),"/multiplication/int/"); + return pseudoServiceForCalculatorService.callService(number.getFirstNumber(), number.getSecondNumber(),"/multiplication/int/"); } @RequestMapping(value = "/division/int/", method = RequestMethod.POST, consumes = "application/json", produces = "application/json") public String intDivision(@RequestBody Number number) { - CalculatorServiceClient calculatorServiceClient = new CalculatorServiceClient(); - return calculatorServiceClient.callService(number.getFirstNumber(), number.getSecondNumber(),"/division/int/"); + return pseudoServiceForCalculatorService.callService(number.getFirstNumber(), number.getSecondNumber(),"/division/int/"); } } diff --git a/SpringBootContainerIO/CalculatorServiceClient/src/main/java/com/calculator/CalculatorServiceClient.java b/SpringBootContainerIO/CalculatorServiceClient/src/main/java/com/calculator/PseudoServiceForCalculatorService.java similarity index 84% rename from SpringBootContainerIO/CalculatorServiceClient/src/main/java/com/calculator/CalculatorServiceClient.java rename to SpringBootContainerIO/CalculatorServiceClient/src/main/java/com/calculator/PseudoServiceForCalculatorService.java index ebb9018..b3dcb84 100644 --- a/SpringBootContainerIO/CalculatorServiceClient/src/main/java/com/calculator/CalculatorServiceClient.java +++ b/SpringBootContainerIO/CalculatorServiceClient/src/main/java/com/calculator/PseudoServiceForCalculatorService.java @@ -6,11 +6,14 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; +import org.springframework.stereotype.Service; -public class CalculatorServiceClient { +@Service +public class PseudoServiceForCalculatorService { public String callService(String firstNumber, String secondNumber, String operationPath) { Client client = Client.create(); + //String calculatorServiceURL="http://localhost:8097"; String calculatorServiceURL="http://192.168.99.100:8097"; WebResource webResource = client.resource(calculatorServiceURL + operationPath); String input = "{\"firstNumber\":\"" + firstNumber + "\",\"secondNumber\":\"" + secondNumber + "\"}"; diff --git a/SpringBootContainerIO/CalculatorServiceClient/src/main/resources/application.properties b/SpringBootContainerIO/CalculatorServiceClient/src/main/resources/application.properties index 6ba069f..f1c7972 100644 --- a/SpringBootContainerIO/CalculatorServiceClient/src/main/resources/application.properties +++ b/SpringBootContainerIO/CalculatorServiceClient/src/main/resources/application.properties @@ -1 +1,2 @@ -calculator.service.url=${CALCULATOR_SERVICE_URL} \ No newline at end of file +calculator.service.url=${CALCULATOR_SERVICE_URL} +server.port=8080 \ No newline at end of file diff --git a/SpringBootContainerIO/InterContainerCommunication.JPG b/SpringBootContainerIO/[00] ContainerCommunication.JPG similarity index 100% rename from SpringBootContainerIO/InterContainerCommunication.JPG rename to SpringBootContainerIO/[00] ContainerCommunication.JPG diff --git a/SpringBootContainerIO/SpringBootContainerIO-CalculatorService-GET.JPG b/SpringBootContainerIO/[01] SpringBootContainerIO-CalculatorService-GET.JPG similarity index 100% rename from SpringBootContainerIO/SpringBootContainerIO-CalculatorService-GET.JPG rename to SpringBootContainerIO/[01] SpringBootContainerIO-CalculatorService-GET.JPG diff --git a/SpringBootContainerIO/SpringBootContainerIO-CalculatorServiceClient-GET.JPG b/SpringBootContainerIO/[02] SpringBootContainerIO-CalculatorClient-GET.JPG similarity index 100% rename from SpringBootContainerIO/SpringBootContainerIO-CalculatorServiceClient-GET.JPG rename to SpringBootContainerIO/[02] SpringBootContainerIO-CalculatorClient-GET.JPG diff --git a/SpringBootContainerIO/SpringBootContainerIO-CalculatorServiceClient-POST.JPG b/SpringBootContainerIO/[03] SpringBootContainerIO-CalculatorClient-POST.JPG similarity index 100% rename from SpringBootContainerIO/SpringBootContainerIO-CalculatorServiceClient-POST.JPG rename to SpringBootContainerIO/[03] SpringBootContainerIO-CalculatorClient-POST.JPG From be10a96bc12d3a7c1c1b5f9f13209606725fe0fa Mon Sep 17 00:00:00 2001 From: Rahul Vaish Date: Tue, 10 Sep 2019 23:46:46 +0530 Subject: [PATCH 5/9] Update application.properties --- .../CalculatorService/src/main/resources/application.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SpringBootContainerIO/CalculatorService/src/main/resources/application.properties b/SpringBootContainerIO/CalculatorService/src/main/resources/application.properties index 0109051..4c00e40 100644 --- a/SpringBootContainerIO/CalculatorService/src/main/resources/application.properties +++ b/SpringBootContainerIO/CalculatorService/src/main/resources/application.properties @@ -1 +1 @@ -server.port=8097 \ No newline at end of file +server.port=8080 From d9f028d0c48c6baa06c894e45070c7a0fd612899 Mon Sep 17 00:00:00 2001 From: Rahul Vaish Date: Tue, 10 Sep 2019 23:48:16 +0530 Subject: [PATCH 6/9] Update application.properties --- .../CalculatorService/src/main/resources/application.properties | 1 + 1 file changed, 1 insertion(+) diff --git a/SpringBootContainerIO/CalculatorService/src/main/resources/application.properties b/SpringBootContainerIO/CalculatorService/src/main/resources/application.properties index 4c00e40..dce7fae 100644 --- a/SpringBootContainerIO/CalculatorService/src/main/resources/application.properties +++ b/SpringBootContainerIO/CalculatorService/src/main/resources/application.properties @@ -1 +1,2 @@ server.port=8080 +# The port will be exposed as 8097 during docker run.Therefore, in the SBC, the hit is made on 8097. From 341732580c030870fbc1edbe690a4beda3121d1e Mon Sep 17 00:00:00 2001 From: Rahul Vaish Date: Tue, 10 Sep 2019 23:49:37 +0530 Subject: [PATCH 7/9] Update application.properties --- .../src/main/resources/application.properties | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/SpringBootContainerIO/CalculatorServiceClient/src/main/resources/application.properties b/SpringBootContainerIO/CalculatorServiceClient/src/main/resources/application.properties index f1c7972..01e9ee2 100644 --- a/SpringBootContainerIO/CalculatorServiceClient/src/main/resources/application.properties +++ b/SpringBootContainerIO/CalculatorServiceClient/src/main/resources/application.properties @@ -1,2 +1,3 @@ calculator.service.url=${CALCULATOR_SERVICE_URL} -server.port=8080 \ No newline at end of file +server.port=8080 +# The port will be exposed as 8023 during docker run.Therefore, the SBC hit is made on 8023. From fe560d35577ba9ea2176e369cbd1e45deedd6ee0 Mon Sep 17 00:00:00 2001 From: Rahul Date: Wed, 2 Oct 2019 14:17:56 +0530 Subject: [PATCH 8/9] SpringBootContainerIO --- .../.gitignore | 0 .../.mvn/wrapper/MavenWrapperDownloader.java | 0 .../.mvn/wrapper/maven-wrapper.jar | Bin .../.mvn/wrapper/maven-wrapper.properties | 0 .../Dockerfile | 0 .../mvnw | 0 .../mvnw.cmd | 0 .../pom.xml | 0 .../CalculatorServiceApplication.java | 0 .../CalculatorServiceController.java | 0 .../java/com/calculator/model/Number.java | 0 .../service/CalculatorServiceFloat.java | 0 .../service/CalculatorServiceInteger.java | 0 .../src/main/resources/application.properties | 1 + .../CalculatorServiceApplicationTests.java | 0 .../.gitignore | 0 .../.mvn/wrapper/MavenWrapperDownloader.java | 0 .../.mvn/wrapper/maven-wrapper.jar | Bin .../.mvn/wrapper/maven-wrapper.properties | 0 .../Dockerfile | 2 +- .../mvnw | 0 .../mvnw.cmd | 0 .../pom.xml | 0 .../com/calculator/CalculatorApplication.java | 0 .../com/calculator/CalculatorController.java | 0 .../PseudoServiceForCalculatorService.java | 4 ++-- .../java/com/calculator/model/Number.java | 0 .../src/main/resources/application.properties | 1 + .../CalculatorApplicationTests.java | 0 .../src/main/resources/application.properties | 2 -- .../docker-compose.yml | 20 ------------------ .../src/main/resources/application.properties | 3 --- .../[00] ContainerCommunication.JPG | Bin 71093 -> 0 bytes ...gBootContainerIO-CalculatorService-GET.JPG | Bin 43532 -> 0 bytes ...ngBootContainerIO-CalculatorClient-GET.JPG | Bin 44323 -> 0 bytes ...gBootContainerIO-CalculatorClient-POST.JPG | Bin 46180 -> 0 bytes 36 files changed, 5 insertions(+), 28 deletions(-) rename {SpringBootContainerIO/CalculatorService => CalculatorService}/.gitignore (100%) rename {SpringBootContainerIO/CalculatorService => CalculatorService}/.mvn/wrapper/MavenWrapperDownloader.java (100%) rename {SpringBootContainerIO/CalculatorService => CalculatorService}/.mvn/wrapper/maven-wrapper.jar (100%) rename {SpringBootContainerIO/CalculatorService => CalculatorService}/.mvn/wrapper/maven-wrapper.properties (100%) rename {SpringBootContainerIO/CalculatorService => CalculatorService}/Dockerfile (100%) rename {SpringBootContainerIO/CalculatorService => CalculatorService}/mvnw (100%) rename {SpringBootContainerIO/CalculatorService => CalculatorService}/mvnw.cmd (100%) rename {SpringBootContainerIO/CalculatorService => CalculatorService}/pom.xml (100%) rename {SpringBootContainerIO/CalculatorService => CalculatorService}/src/main/java/com/calculator/CalculatorServiceApplication.java (100%) rename {SpringBootContainerIO/CalculatorService => CalculatorService}/src/main/java/com/calculator/CalculatorServiceController.java (100%) rename {SpringBootContainerIO/CalculatorService => CalculatorService}/src/main/java/com/calculator/model/Number.java (100%) rename {SpringBootContainerIO/CalculatorService => CalculatorService}/src/main/java/com/calculator/service/CalculatorServiceFloat.java (100%) rename {SpringBootContainerIO/CalculatorService => CalculatorService}/src/main/java/com/calculator/service/CalculatorServiceInteger.java (100%) create mode 100644 CalculatorService/src/main/resources/application.properties rename {SpringBootContainerIO/CalculatorService => CalculatorService}/src/test/java/com/calculator/CalculatorServiceApplicationTests.java (100%) rename {SpringBootContainerIO/CalculatorServiceClient => CalculatorServiceClient}/.gitignore (100%) rename {SpringBootContainerIO/CalculatorServiceClient => CalculatorServiceClient}/.mvn/wrapper/MavenWrapperDownloader.java (100%) rename {SpringBootContainerIO/CalculatorServiceClient => CalculatorServiceClient}/.mvn/wrapper/maven-wrapper.jar (100%) rename {SpringBootContainerIO/CalculatorServiceClient => CalculatorServiceClient}/.mvn/wrapper/maven-wrapper.properties (100%) rename {SpringBootContainerIO/CalculatorServiceClient => CalculatorServiceClient}/Dockerfile (89%) rename {SpringBootContainerIO/CalculatorServiceClient => CalculatorServiceClient}/mvnw (100%) rename {SpringBootContainerIO/CalculatorServiceClient => CalculatorServiceClient}/mvnw.cmd (100%) rename {SpringBootContainerIO/CalculatorServiceClient => CalculatorServiceClient}/pom.xml (100%) rename {SpringBootContainerIO/CalculatorServiceClient => CalculatorServiceClient}/src/main/java/com/calculator/CalculatorApplication.java (100%) rename {SpringBootContainerIO/CalculatorServiceClient => CalculatorServiceClient}/src/main/java/com/calculator/CalculatorController.java (100%) rename {SpringBootContainerIO/CalculatorServiceClient => CalculatorServiceClient}/src/main/java/com/calculator/PseudoServiceForCalculatorService.java (88%) rename {SpringBootContainerIO/CalculatorServiceClient => CalculatorServiceClient}/src/main/java/com/calculator/model/Number.java (100%) create mode 100644 CalculatorServiceClient/src/main/resources/application.properties rename {SpringBootContainerIO/CalculatorServiceClient => CalculatorServiceClient}/src/test/java/com/calculator/CalculatorApplicationTests.java (100%) delete mode 100644 SpringBootContainerIO/CalculatorService/src/main/resources/application.properties delete mode 100644 SpringBootContainerIO/CalculatorServiceClient/docker-compose.yml delete mode 100644 SpringBootContainerIO/CalculatorServiceClient/src/main/resources/application.properties delete mode 100644 SpringBootContainerIO/[00] ContainerCommunication.JPG delete mode 100644 SpringBootContainerIO/[01] SpringBootContainerIO-CalculatorService-GET.JPG delete mode 100644 SpringBootContainerIO/[02] SpringBootContainerIO-CalculatorClient-GET.JPG delete mode 100644 SpringBootContainerIO/[03] SpringBootContainerIO-CalculatorClient-POST.JPG diff --git a/SpringBootContainerIO/CalculatorService/.gitignore b/CalculatorService/.gitignore similarity index 100% rename from SpringBootContainerIO/CalculatorService/.gitignore rename to CalculatorService/.gitignore diff --git a/SpringBootContainerIO/CalculatorService/.mvn/wrapper/MavenWrapperDownloader.java b/CalculatorService/.mvn/wrapper/MavenWrapperDownloader.java similarity index 100% rename from SpringBootContainerIO/CalculatorService/.mvn/wrapper/MavenWrapperDownloader.java rename to CalculatorService/.mvn/wrapper/MavenWrapperDownloader.java diff --git a/SpringBootContainerIO/CalculatorService/.mvn/wrapper/maven-wrapper.jar b/CalculatorService/.mvn/wrapper/maven-wrapper.jar similarity index 100% rename from SpringBootContainerIO/CalculatorService/.mvn/wrapper/maven-wrapper.jar rename to CalculatorService/.mvn/wrapper/maven-wrapper.jar diff --git a/SpringBootContainerIO/CalculatorService/.mvn/wrapper/maven-wrapper.properties b/CalculatorService/.mvn/wrapper/maven-wrapper.properties similarity index 100% rename from SpringBootContainerIO/CalculatorService/.mvn/wrapper/maven-wrapper.properties rename to CalculatorService/.mvn/wrapper/maven-wrapper.properties diff --git a/SpringBootContainerIO/CalculatorService/Dockerfile b/CalculatorService/Dockerfile similarity index 100% rename from SpringBootContainerIO/CalculatorService/Dockerfile rename to CalculatorService/Dockerfile diff --git a/SpringBootContainerIO/CalculatorService/mvnw b/CalculatorService/mvnw similarity index 100% rename from SpringBootContainerIO/CalculatorService/mvnw rename to CalculatorService/mvnw diff --git a/SpringBootContainerIO/CalculatorService/mvnw.cmd b/CalculatorService/mvnw.cmd similarity index 100% rename from SpringBootContainerIO/CalculatorService/mvnw.cmd rename to CalculatorService/mvnw.cmd diff --git a/SpringBootContainerIO/CalculatorService/pom.xml b/CalculatorService/pom.xml similarity index 100% rename from SpringBootContainerIO/CalculatorService/pom.xml rename to CalculatorService/pom.xml diff --git a/SpringBootContainerIO/CalculatorService/src/main/java/com/calculator/CalculatorServiceApplication.java b/CalculatorService/src/main/java/com/calculator/CalculatorServiceApplication.java similarity index 100% rename from SpringBootContainerIO/CalculatorService/src/main/java/com/calculator/CalculatorServiceApplication.java rename to CalculatorService/src/main/java/com/calculator/CalculatorServiceApplication.java diff --git a/SpringBootContainerIO/CalculatorService/src/main/java/com/calculator/CalculatorServiceController.java b/CalculatorService/src/main/java/com/calculator/CalculatorServiceController.java similarity index 100% rename from SpringBootContainerIO/CalculatorService/src/main/java/com/calculator/CalculatorServiceController.java rename to CalculatorService/src/main/java/com/calculator/CalculatorServiceController.java diff --git a/SpringBootContainerIO/CalculatorService/src/main/java/com/calculator/model/Number.java b/CalculatorService/src/main/java/com/calculator/model/Number.java similarity index 100% rename from SpringBootContainerIO/CalculatorService/src/main/java/com/calculator/model/Number.java rename to CalculatorService/src/main/java/com/calculator/model/Number.java diff --git a/SpringBootContainerIO/CalculatorService/src/main/java/com/calculator/service/CalculatorServiceFloat.java b/CalculatorService/src/main/java/com/calculator/service/CalculatorServiceFloat.java similarity index 100% rename from SpringBootContainerIO/CalculatorService/src/main/java/com/calculator/service/CalculatorServiceFloat.java rename to CalculatorService/src/main/java/com/calculator/service/CalculatorServiceFloat.java diff --git a/SpringBootContainerIO/CalculatorService/src/main/java/com/calculator/service/CalculatorServiceInteger.java b/CalculatorService/src/main/java/com/calculator/service/CalculatorServiceInteger.java similarity index 100% rename from SpringBootContainerIO/CalculatorService/src/main/java/com/calculator/service/CalculatorServiceInteger.java rename to CalculatorService/src/main/java/com/calculator/service/CalculatorServiceInteger.java diff --git a/CalculatorService/src/main/resources/application.properties b/CalculatorService/src/main/resources/application.properties new file mode 100644 index 0000000..a3ac65c --- /dev/null +++ b/CalculatorService/src/main/resources/application.properties @@ -0,0 +1 @@ +server.port=8080 \ No newline at end of file diff --git a/SpringBootContainerIO/CalculatorService/src/test/java/com/calculator/CalculatorServiceApplicationTests.java b/CalculatorService/src/test/java/com/calculator/CalculatorServiceApplicationTests.java similarity index 100% rename from SpringBootContainerIO/CalculatorService/src/test/java/com/calculator/CalculatorServiceApplicationTests.java rename to CalculatorService/src/test/java/com/calculator/CalculatorServiceApplicationTests.java diff --git a/SpringBootContainerIO/CalculatorServiceClient/.gitignore b/CalculatorServiceClient/.gitignore similarity index 100% rename from SpringBootContainerIO/CalculatorServiceClient/.gitignore rename to CalculatorServiceClient/.gitignore diff --git a/SpringBootContainerIO/CalculatorServiceClient/.mvn/wrapper/MavenWrapperDownloader.java b/CalculatorServiceClient/.mvn/wrapper/MavenWrapperDownloader.java similarity index 100% rename from SpringBootContainerIO/CalculatorServiceClient/.mvn/wrapper/MavenWrapperDownloader.java rename to CalculatorServiceClient/.mvn/wrapper/MavenWrapperDownloader.java diff --git a/SpringBootContainerIO/CalculatorServiceClient/.mvn/wrapper/maven-wrapper.jar b/CalculatorServiceClient/.mvn/wrapper/maven-wrapper.jar similarity index 100% rename from SpringBootContainerIO/CalculatorServiceClient/.mvn/wrapper/maven-wrapper.jar rename to CalculatorServiceClient/.mvn/wrapper/maven-wrapper.jar diff --git a/SpringBootContainerIO/CalculatorServiceClient/.mvn/wrapper/maven-wrapper.properties b/CalculatorServiceClient/.mvn/wrapper/maven-wrapper.properties similarity index 100% rename from SpringBootContainerIO/CalculatorServiceClient/.mvn/wrapper/maven-wrapper.properties rename to CalculatorServiceClient/.mvn/wrapper/maven-wrapper.properties diff --git a/SpringBootContainerIO/CalculatorServiceClient/Dockerfile b/CalculatorServiceClient/Dockerfile similarity index 89% rename from SpringBootContainerIO/CalculatorServiceClient/Dockerfile rename to CalculatorServiceClient/Dockerfile index 77b8708..43f2da6 100644 --- a/SpringBootContainerIO/CalculatorServiceClient/Dockerfile +++ b/CalculatorServiceClient/Dockerfile @@ -1,4 +1,4 @@ FROM java:8 -EXPOSE 8080 +EXPOSE 8090 ADD /target/CalculatorClient.jar CalculatorClient.jar ENTRYPOINT ["java", "-jar", "CalculatorClient.jar"] \ No newline at end of file diff --git a/SpringBootContainerIO/CalculatorServiceClient/mvnw b/CalculatorServiceClient/mvnw similarity index 100% rename from SpringBootContainerIO/CalculatorServiceClient/mvnw rename to CalculatorServiceClient/mvnw diff --git a/SpringBootContainerIO/CalculatorServiceClient/mvnw.cmd b/CalculatorServiceClient/mvnw.cmd similarity index 100% rename from SpringBootContainerIO/CalculatorServiceClient/mvnw.cmd rename to CalculatorServiceClient/mvnw.cmd diff --git a/SpringBootContainerIO/CalculatorServiceClient/pom.xml b/CalculatorServiceClient/pom.xml similarity index 100% rename from SpringBootContainerIO/CalculatorServiceClient/pom.xml rename to CalculatorServiceClient/pom.xml diff --git a/SpringBootContainerIO/CalculatorServiceClient/src/main/java/com/calculator/CalculatorApplication.java b/CalculatorServiceClient/src/main/java/com/calculator/CalculatorApplication.java similarity index 100% rename from SpringBootContainerIO/CalculatorServiceClient/src/main/java/com/calculator/CalculatorApplication.java rename to CalculatorServiceClient/src/main/java/com/calculator/CalculatorApplication.java diff --git a/SpringBootContainerIO/CalculatorServiceClient/src/main/java/com/calculator/CalculatorController.java b/CalculatorServiceClient/src/main/java/com/calculator/CalculatorController.java similarity index 100% rename from SpringBootContainerIO/CalculatorServiceClient/src/main/java/com/calculator/CalculatorController.java rename to CalculatorServiceClient/src/main/java/com/calculator/CalculatorController.java diff --git a/SpringBootContainerIO/CalculatorServiceClient/src/main/java/com/calculator/PseudoServiceForCalculatorService.java b/CalculatorServiceClient/src/main/java/com/calculator/PseudoServiceForCalculatorService.java similarity index 88% rename from SpringBootContainerIO/CalculatorServiceClient/src/main/java/com/calculator/PseudoServiceForCalculatorService.java rename to CalculatorServiceClient/src/main/java/com/calculator/PseudoServiceForCalculatorService.java index b3dcb84..b0d0c82 100644 --- a/SpringBootContainerIO/CalculatorServiceClient/src/main/java/com/calculator/PseudoServiceForCalculatorService.java +++ b/CalculatorServiceClient/src/main/java/com/calculator/PseudoServiceForCalculatorService.java @@ -13,8 +13,8 @@ public class PseudoServiceForCalculatorService { public String callService(String firstNumber, String secondNumber, String operationPath) { Client client = Client.create(); - //String calculatorServiceURL="http://localhost:8097"; - String calculatorServiceURL="http://192.168.99.100:8097"; + // On MAC PC, IP of Container worked for me ! + String calculatorServiceURL="http://192.168.99.100:8080"; WebResource webResource = client.resource(calculatorServiceURL + operationPath); String input = "{\"firstNumber\":\"" + firstNumber + "\",\"secondNumber\":\"" + secondNumber + "\"}"; diff --git a/SpringBootContainerIO/CalculatorServiceClient/src/main/java/com/calculator/model/Number.java b/CalculatorServiceClient/src/main/java/com/calculator/model/Number.java similarity index 100% rename from SpringBootContainerIO/CalculatorServiceClient/src/main/java/com/calculator/model/Number.java rename to CalculatorServiceClient/src/main/java/com/calculator/model/Number.java diff --git a/CalculatorServiceClient/src/main/resources/application.properties b/CalculatorServiceClient/src/main/resources/application.properties new file mode 100644 index 0000000..e86bbd0 --- /dev/null +++ b/CalculatorServiceClient/src/main/resources/application.properties @@ -0,0 +1 @@ +server.port=8090 \ No newline at end of file diff --git a/SpringBootContainerIO/CalculatorServiceClient/src/test/java/com/calculator/CalculatorApplicationTests.java b/CalculatorServiceClient/src/test/java/com/calculator/CalculatorApplicationTests.java similarity index 100% rename from SpringBootContainerIO/CalculatorServiceClient/src/test/java/com/calculator/CalculatorApplicationTests.java rename to CalculatorServiceClient/src/test/java/com/calculator/CalculatorApplicationTests.java diff --git a/SpringBootContainerIO/CalculatorService/src/main/resources/application.properties b/SpringBootContainerIO/CalculatorService/src/main/resources/application.properties deleted file mode 100644 index dce7fae..0000000 --- a/SpringBootContainerIO/CalculatorService/src/main/resources/application.properties +++ /dev/null @@ -1,2 +0,0 @@ -server.port=8080 -# The port will be exposed as 8097 during docker run.Therefore, in the SBC, the hit is made on 8097. diff --git a/SpringBootContainerIO/CalculatorServiceClient/docker-compose.yml b/SpringBootContainerIO/CalculatorServiceClient/docker-compose.yml deleted file mode 100644 index 9891e0f..0000000 --- a/SpringBootContainerIO/CalculatorServiceClient/docker-compose.yml +++ /dev/null @@ -1,20 +0,0 @@ -version: "3" -services: - consumer: - image: calculatorserviceclient - ports: - - "8093:8080" - networks: - - consumer-producer - depends_on: - - producer - - producer: - image: rahulvaish/springbootcalculatorservice - ports: - - "8097:8080" - networks: - - consumer-producer - -networks: - consumer-producer: \ No newline at end of file diff --git a/SpringBootContainerIO/CalculatorServiceClient/src/main/resources/application.properties b/SpringBootContainerIO/CalculatorServiceClient/src/main/resources/application.properties deleted file mode 100644 index 01e9ee2..0000000 --- a/SpringBootContainerIO/CalculatorServiceClient/src/main/resources/application.properties +++ /dev/null @@ -1,3 +0,0 @@ -calculator.service.url=${CALCULATOR_SERVICE_URL} -server.port=8080 -# The port will be exposed as 8023 during docker run.Therefore, the SBC hit is made on 8023. diff --git a/SpringBootContainerIO/[00] ContainerCommunication.JPG b/SpringBootContainerIO/[00] ContainerCommunication.JPG deleted file mode 100644 index 43da5977457ee0def6f7aa6039f218c154b2f323..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 71093 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 diff --git a/SpringBootContainerIO/[02] SpringBootContainerIO-CalculatorClient-GET.JPG b/SpringBootContainerIO/[02] SpringBootContainerIO-CalculatorClient-GET.JPG deleted file mode 100644 index de140898c3b73ee8549b54cce6fc92406fed72b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44323 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 diff --git a/SpringBootContainerIO/[03] SpringBootContainerIO-CalculatorClient-POST.JPG b/SpringBootContainerIO/[03] SpringBootContainerIO-CalculatorClient-POST.JPG deleted file mode 100644 index 6ee23051d97be78da065334cdd7481d32f7df86a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46180 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 From f59363f0d39957b375c1bdca7ee7a2a9b5f5ecef Mon Sep 17 00:00:00 2001 From: rahulvaish Date: Mon, 2 Jan 2023 16:02:08 -0500 Subject: [PATCH 9/9] SB Inter communication --- CalculatorService/Dockerfile | 2 +- CalculatorService/pom.xml | 66 +++------------- .../CalculatorServiceController.java | 72 +++--------------- .../java/com/calculator/model/Number.java | 27 +++++-- .../service/CalculatorServiceFloat.java | 76 ------------------- .../service/CalculatorServiceInteger.java | 71 ----------------- .../src/main/resources/application.properties | 2 +- .../CalculatorServiceApplicationTests.java | 5 +- CalculatorServiceClient/Dockerfile | 2 +- CalculatorServiceClient/pom.xml | 71 +++-------------- .../com/calculator/CalculatorApplication.java | 8 ++ .../com/calculator/CalculatorController.java | 48 ++---------- .../PseudoServiceForCalculatorService.java | 22 ++---- .../java/com/calculator/model/Number.java | 26 +++++-- .../CalculatorApplicationTests.java | 7 +- 15 files changed, 96 insertions(+), 409 deletions(-) delete mode 100644 CalculatorService/src/main/java/com/calculator/service/CalculatorServiceFloat.java delete mode 100644 CalculatorService/src/main/java/com/calculator/service/CalculatorServiceInteger.java diff --git a/CalculatorService/Dockerfile b/CalculatorService/Dockerfile index db4beb1..3b30e41 100644 --- a/CalculatorService/Dockerfile +++ b/CalculatorService/Dockerfile @@ -1,4 +1,4 @@ -FROM java:8 +FROM openjdk:17 EXPOSE 8080 ADD /target/CalculatorService.jar CalculatorService.jar ENTRYPOINT ["java", "-jar", "CalculatorService.jar"] \ No newline at end of file diff --git a/CalculatorService/pom.xml b/CalculatorService/pom.xml index 2d0d65a..68c5599 100644 --- a/CalculatorService/pom.xml +++ b/CalculatorService/pom.xml @@ -1,40 +1,28 @@ + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - - com.calculator - CalculatorService - 0.0.1-SNAPSHOT - jar - - CalculatorService - Demo project for Spring Boot - org.springframework.boot spring-boot-starter-parent - 2.0.4.RELEASE + 3.0.1 - + jar + com.calculator + CalculatorService + 0.0.1-SNAPSHOT + CalculatorService + Demo project for Spring Boot - UTF-8 - UTF-8 - 1.8 + 17 - org.springframework.boot spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-tomcat - - + org.springframework.boot spring-boot-starter-test @@ -48,40 +36,8 @@ org.springframework.boot spring-boot-maven-plugin - - - com.spotify - dockerfile-maven-plugin - 1.3.4 - - ${docker.image.prefix}/${project.artifactId} - - - - org.apache.maven.plugins - maven-dependency-plugin - - - unpack - package - - unpack - - - - - ${project.groupId} - ${project.artifactId} - ${project.version} - - - - - - CalculatorService - - \ No newline at end of file + diff --git a/CalculatorService/src/main/java/com/calculator/CalculatorServiceController.java b/CalculatorService/src/main/java/com/calculator/CalculatorServiceController.java index b368fd3..bb2d323 100644 --- a/CalculatorService/src/main/java/com/calculator/CalculatorServiceController.java +++ b/CalculatorService/src/main/java/com/calculator/CalculatorServiceController.java @@ -1,72 +1,20 @@ package com.calculator; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RestController; - +import org.springframework.web.bind.annotation.*; import com.calculator.model.Number; -import com.calculator.service.CalculatorServiceFloat; -import com.calculator.service.CalculatorServiceInteger; @RestController public class CalculatorServiceController { - @Autowired - CalculatorServiceFloat calculatorServiceFloat; - @Autowired - CalculatorServiceInteger calculatorServiceInteger; - - - @RequestMapping("/") - public String welcome() { - return "Calculator Service Application"; - } - - // ----------CalculatorServiceFloat------------- - - @RequestMapping(value = "/addition/float/", method = RequestMethod.POST, consumes = "application/json", produces = "application/json") - public String floatAddition(@RequestBody Number number) { - return String.valueOf(calculatorServiceFloat.addition(number.getFirstNumber(), number.getSecondNumber())); - } - - @RequestMapping(value = "/substraction/float/", method = RequestMethod.POST, consumes = "application/json", produces = "application/json") - public String floatSubstraction(@RequestBody Number number) { - return String.valueOf(calculatorServiceFloat.substraction(number.getFirstNumber(), number.getSecondNumber())); - } - - @RequestMapping(value = "/multiplication/float/", method = RequestMethod.POST, consumes = "application/json", produces = "application/json") - public String floatMultiplication(@RequestBody Number number) { - return String.valueOf(calculatorServiceFloat.multiplication(number.getFirstNumber(), number.getSecondNumber())); - } - @RequestMapping(value = "/division/float/", method = RequestMethod.POST, consumes = "application/json", produces = "application/json") - public String floatDivision(@RequestBody Number number) { - return String.valueOf(calculatorServiceFloat.division(number.getFirstNumber(), number.getSecondNumber())); + @PostMapping("/addition/") + public Number addTwoNumbers(@RequestBody Number number) { + if(number != null){ + if(number.getFirstNumber() != null && number.getSecondNumber() != null){ + number.setResult(number.getFirstNumber() + number.getSecondNumber()); + return number; + } + } + return null; } - - // ----------CalculatorServiceInteger------------- - - @RequestMapping(value = "/addition/int/", method = RequestMethod.POST, consumes = "application/json", produces = "application/json") - public String intAddition(@RequestBody Number number) { - return String.valueOf(calculatorServiceInteger.addition(number.getFirstNumber(), number.getSecondNumber())); - } - - @RequestMapping(value = "/substraction/int/", method = RequestMethod.POST, consumes = "application/json", produces = "application/json") - public String intSubstraction(@RequestBody Number number) { - return String.valueOf(calculatorServiceInteger.substraction(number.getFirstNumber(), number.getSecondNumber())); - } - - @RequestMapping(value = "/multiplication/int/", method = RequestMethod.POST, consumes = "application/json", produces = "application/json") - public String intMultiplication(@RequestBody Number number) { - return String - .valueOf(calculatorServiceInteger.multiplication(number.getFirstNumber(), number.getSecondNumber())); - } - - @RequestMapping(value = "/division/int/", method = RequestMethod.POST, consumes = "application/json", produces = "application/json") - public String intDivision(@RequestBody Number number) { - return String.valueOf(calculatorServiceInteger.division(number.getFirstNumber(), number.getSecondNumber())); - } - } diff --git a/CalculatorService/src/main/java/com/calculator/model/Number.java b/CalculatorService/src/main/java/com/calculator/model/Number.java index 7366abb..d22977f 100644 --- a/CalculatorService/src/main/java/com/calculator/model/Number.java +++ b/CalculatorService/src/main/java/com/calculator/model/Number.java @@ -1,20 +1,31 @@ package com.calculator.model; public class Number { - String firstNumber; - String secondNumber; - - public String getFirstNumber() { + Integer firstNumber; + Integer secondNumber; + Integer result; + + public Integer getFirstNumber() { return firstNumber; } - public void setFirstNumber(String firstNumber) { + + public void setFirstNumber(Integer firstNumber) { this.firstNumber = firstNumber; } - public String getSecondNumber() { + + public Integer getSecondNumber() { return secondNumber; } - public void setSecondNumber(String secondNumber) { + + public void setSecondNumber(Integer secondNumber) { this.secondNumber = secondNumber; } - + + public Integer getResult() { + return result; + } + + public void setResult(Integer result) { + this.result = result; + } } diff --git a/CalculatorService/src/main/java/com/calculator/service/CalculatorServiceFloat.java b/CalculatorService/src/main/java/com/calculator/service/CalculatorServiceFloat.java deleted file mode 100644 index 44f4542..0000000 --- a/CalculatorService/src/main/java/com/calculator/service/CalculatorServiceFloat.java +++ /dev/null @@ -1,76 +0,0 @@ -package com.calculator.service; - -import org.springframework.stereotype.Service; - -@Service -public class CalculatorServiceFloat { - - public String addition(String firstNumber, String secondNumber) { - if (firstNumber != null && secondNumber != null) { - try { - float val1 = Float.parseFloat(firstNumber); - float val2 = Float.parseFloat(secondNumber); - float sum = val1 + val2; - return String.valueOf(sum); - } catch (NumberFormatException exception) { - return "ERROR: Enter the floating numbers"; - } - } - else { - return "ERROR: Computing numbers can not be null"; - } - } - - public String substraction(String firstNumber, String secondNumber) { - if (firstNumber != null && secondNumber != null) { - try { - float val1 = Float.parseFloat(firstNumber); - float val2 = Float.parseFloat(secondNumber); - float sub = val1 - val2; - return String.valueOf(sub); - } catch (NumberFormatException exception) { - return "ERROR: Enter the floating numbers"; - } - } - else { - return "ERROR: Computing numbers can not be null"; - } - } - - public String multiplication(String firstNumber, String secondNumber) { - if (firstNumber != null && secondNumber != null) { - try { - float val1 = Float.parseFloat(firstNumber); - float val2 = Float.parseFloat(secondNumber); - float mul = val1 * val2; - return String.valueOf(mul); - } catch (NumberFormatException exception) { - return "ERROR: Enter the floating numbers"; - } - } - else { - return "ERROR: Computing numbers can not be null"; - } - } - - public String division(String firstNumber, String secondNumber) { - if (firstNumber != null && secondNumber != null) { - try { - float val1 = Float.parseFloat(firstNumber); - float val2 = Float.parseFloat(secondNumber); - if (val2 != 0 || val2 != 0.0) { - float div = val1 / val2; - return String.valueOf(div); - } else { - return String.valueOf(0); - } - } catch (NumberFormatException exception) { - return "ERROR: Enter the floating numbers"; - } - } - else { - return "ERROR: Computing numbers can not be null"; - } - } - -} diff --git a/CalculatorService/src/main/java/com/calculator/service/CalculatorServiceInteger.java b/CalculatorService/src/main/java/com/calculator/service/CalculatorServiceInteger.java deleted file mode 100644 index 17fcf77..0000000 --- a/CalculatorService/src/main/java/com/calculator/service/CalculatorServiceInteger.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.calculator.service; -import org.springframework.stereotype.Service; - -@Service -public class CalculatorServiceInteger { - - public String addition(String firstNumber, String secondNumber) { - if (firstNumber != null && secondNumber != null) { - try { - int val1 = Integer.parseInt(firstNumber); - int val2 = Integer.parseInt(secondNumber); - int sum = val1 + val2; - return String.valueOf(sum); - } catch (NumberFormatException exception) { - return "ERROR: Enter the int numbers"; - } - } else { - return "ERROR: Computing numbers can not be null"; - } - - } - - public String substraction(String firstNumber, String secondNumber) { - if (firstNumber != null && secondNumber != null) { - try { - int val1 = Integer.parseInt(firstNumber); - int val2 = Integer.parseInt(secondNumber); - int sub = val1 - val2; - return String.valueOf(sub); - } catch (NumberFormatException exception) { - return "ERROR: Enter the int numbers"; - } - } else { - return "ERROR: Computing numbers can not be null"; - } - } - - public String multiplication(String firstNumber, String secondNumber) { - if (firstNumber != null && secondNumber != null) { - try { - int val1 = Integer.parseInt(firstNumber); - int val2 = Integer.parseInt(secondNumber); - int mul = val1 * val2; - return String.valueOf(mul); - } catch (NumberFormatException exception) { - return "ERROR: Enter the int numbers"; - } - } else { - return "ERROR: Computing numbers can not be null"; - } - } - - public String division(String firstNumber, String secondNumber) { - if (firstNumber != null && secondNumber != null) { - try { - int val1 = Integer.parseInt(firstNumber); - int val2 = Integer.parseInt(secondNumber); - if (val2 != 0 || val2 != 0.0) { - int div = val1 / val2; - return String.valueOf(div); - } else { - return String.valueOf(0); - } - } catch (NumberFormatException exception) { - return "ERROR: Enter the int numbers"; - } - } else { - return "ERROR: Computing numbers can not be null"; - } - } -} diff --git a/CalculatorService/src/main/resources/application.properties b/CalculatorService/src/main/resources/application.properties index a3ac65c..4c00e40 100644 --- a/CalculatorService/src/main/resources/application.properties +++ b/CalculatorService/src/main/resources/application.properties @@ -1 +1 @@ -server.port=8080 \ No newline at end of file +server.port=8080 diff --git a/CalculatorService/src/test/java/com/calculator/CalculatorServiceApplicationTests.java b/CalculatorService/src/test/java/com/calculator/CalculatorServiceApplicationTests.java index 5449609..0a3cadb 100644 --- a/CalculatorService/src/test/java/com/calculator/CalculatorServiceApplicationTests.java +++ b/CalculatorService/src/test/java/com/calculator/CalculatorServiceApplicationTests.java @@ -1,11 +1,8 @@ package com.calculator; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; -@RunWith(SpringRunner.class) @SpringBootTest public class CalculatorServiceApplicationTests { diff --git a/CalculatorServiceClient/Dockerfile b/CalculatorServiceClient/Dockerfile index 43f2da6..c965e79 100644 --- a/CalculatorServiceClient/Dockerfile +++ b/CalculatorServiceClient/Dockerfile @@ -1,4 +1,4 @@ -FROM java:8 +FROM openjdk:17 EXPOSE 8090 ADD /target/CalculatorClient.jar CalculatorClient.jar ENTRYPOINT ["java", "-jar", "CalculatorClient.jar"] \ No newline at end of file diff --git a/CalculatorServiceClient/pom.xml b/CalculatorServiceClient/pom.xml index 5ec8912..d4380ed 100644 --- a/CalculatorServiceClient/pom.xml +++ b/CalculatorServiceClient/pom.xml @@ -1,52 +1,33 @@ + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - - com.calculator - CalculatorClient - 0.0.1-SNAPSHOT - jar - - CalculatorClient - Demo project for Spring Boot - org.springframework.boot spring-boot-starter-parent - 2.0.4.RELEASE + 3.0.1 - + jar + com.calculator + CalculatorClient + 0.0.1-SNAPSHOT + CalculatorClient + Demo project for Spring Boot - UTF-8 - UTF-8 - 1.8 + 17 - org.springframework.boot spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-tomcat - - + org.springframework.boot spring-boot-starter-test test - - - com.sun.jersey - jersey-client - 1.8 - - @@ -55,40 +36,8 @@ org.springframework.boot spring-boot-maven-plugin - - - com.spotify - dockerfile-maven-plugin - 1.3.4 - - ${docker.image.prefix}/${project.artifactId} - - - - org.apache.maven.plugins - maven-dependency-plugin - - - unpack - package - - unpack - - - - - ${project.groupId} - ${project.artifactId} - ${project.version} - - - - - - CalculatorClient - diff --git a/CalculatorServiceClient/src/main/java/com/calculator/CalculatorApplication.java b/CalculatorServiceClient/src/main/java/com/calculator/CalculatorApplication.java index 5c189d0..36e9067 100644 --- a/CalculatorServiceClient/src/main/java/com/calculator/CalculatorApplication.java +++ b/CalculatorServiceClient/src/main/java/com/calculator/CalculatorApplication.java @@ -2,6 +2,8 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.Bean; +import org.springframework.web.client.RestTemplate; @SpringBootApplication public class CalculatorApplication { @@ -9,4 +11,10 @@ public class CalculatorApplication { public static void main(String[] args) { SpringApplication.run(CalculatorApplication.class, args); } + + @Bean + public RestTemplate restTemplate() { + return new RestTemplate(); + } + } diff --git a/CalculatorServiceClient/src/main/java/com/calculator/CalculatorController.java b/CalculatorServiceClient/src/main/java/com/calculator/CalculatorController.java index 518c4a4..9a5e8a2 100644 --- a/CalculatorServiceClient/src/main/java/com/calculator/CalculatorController.java +++ b/CalculatorServiceClient/src/main/java/com/calculator/CalculatorController.java @@ -1,10 +1,7 @@ package com.calculator; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import com.calculator.model.Number; @@ -19,45 +16,10 @@ public String welcome() { return "Calculator Client Application"; } - @RequestMapping(value = "/addition/float/", method = RequestMethod.POST, consumes = "application/json", produces = "application/json") - public String floatAddition(@RequestBody Number number) { - return pseudoServiceForCalculatorService.callService(number.getFirstNumber(), number.getSecondNumber(),"/addition/float/"); + @PostMapping("/addition/") + public Number addTwoNumbers(@RequestBody Number number) { + Number num = pseudoServiceForCalculatorService.callService(number); + return num; } - @RequestMapping(value = "/substraction/float/", method = RequestMethod.POST, consumes = "application/json", produces = "application/json") - public String floatSubstraction(@RequestBody Number number) { - return pseudoServiceForCalculatorService.callService(number.getFirstNumber(), number.getSecondNumber(),"/substraction/float/"); - } - - @RequestMapping(value = "/multiplication/float/", method = RequestMethod.POST, consumes = "application/json", produces = "application/json") - public String floatMultiplication(@RequestBody Number number) { - return pseudoServiceForCalculatorService.callService(number.getFirstNumber(), number.getSecondNumber(),"/multiplication/float/"); - } - - @RequestMapping(value = "/division/float/", method = RequestMethod.POST, consumes = "application/json", produces = "application/json") - public String floatDivision(@RequestBody Number number) { - return pseudoServiceForCalculatorService.callService(number.getFirstNumber(), number.getSecondNumber(),"/division/float/"); - } - - // ----------------------------------- - - @RequestMapping(value = "/addition/int/", method = RequestMethod.POST, consumes = "application/json", produces = "application/json") - public String intAddition(@RequestBody Number number) { - return pseudoServiceForCalculatorService.callService(number.getFirstNumber(), number.getSecondNumber(),"/addition/int/"); - } - - @RequestMapping(value = "/substraction/int/", method = RequestMethod.POST, consumes = "application/json", produces = "application/json") - public String intSubstraction(@RequestBody Number number) { - return pseudoServiceForCalculatorService.callService(number.getFirstNumber(), number.getSecondNumber(),"/substraction/int/"); - } - - @RequestMapping(value = "/multiplication/int/", method = RequestMethod.POST, consumes = "application/json", produces = "application/json") - public String intMultiplication(@RequestBody Number number) { - return pseudoServiceForCalculatorService.callService(number.getFirstNumber(), number.getSecondNumber(),"/multiplication/int/"); - } - - @RequestMapping(value = "/division/int/", method = RequestMethod.POST, consumes = "application/json", produces = "application/json") - public String intDivision(@RequestBody Number number) { - return pseudoServiceForCalculatorService.callService(number.getFirstNumber(), number.getSecondNumber(),"/division/int/"); - } } diff --git a/CalculatorServiceClient/src/main/java/com/calculator/PseudoServiceForCalculatorService.java b/CalculatorServiceClient/src/main/java/com/calculator/PseudoServiceForCalculatorService.java index b0d0c82..29ce835 100644 --- a/CalculatorServiceClient/src/main/java/com/calculator/PseudoServiceForCalculatorService.java +++ b/CalculatorServiceClient/src/main/java/com/calculator/PseudoServiceForCalculatorService.java @@ -1,26 +1,20 @@ package com.calculator; -import com.sun.jersey.api.client.Client; -import com.sun.jersey.api.client.ClientResponse; -import com.sun.jersey.api.client.WebResource; -import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.core.env.Environment; import org.springframework.stereotype.Service; +import org.springframework.web.client.RestTemplate; +import com.calculator.model.Number; @Service public class PseudoServiceForCalculatorService { - public String callService(String firstNumber, String secondNumber, String operationPath) { - Client client = Client.create(); - // On MAC PC, IP of Container worked for me ! - String calculatorServiceURL="http://192.168.99.100:8080"; - WebResource webResource = client.resource(calculatorServiceURL + operationPath); - String input = "{\"firstNumber\":\"" + firstNumber + "\",\"secondNumber\":\"" + secondNumber + "\"}"; - - ClientResponse response = webResource.type("application/json").post(ClientResponse.class, input); - return response.getEntity(String.class); + @Autowired + RestTemplate restTemplate; + public Number callService(Number number) { + + Number sum = restTemplate.postForObject("http://calculatorservice:8080/addition/",number, Number.class); + return sum; } } \ No newline at end of file diff --git a/CalculatorServiceClient/src/main/java/com/calculator/model/Number.java b/CalculatorServiceClient/src/main/java/com/calculator/model/Number.java index aabd575..d22977f 100644 --- a/CalculatorServiceClient/src/main/java/com/calculator/model/Number.java +++ b/CalculatorServiceClient/src/main/java/com/calculator/model/Number.java @@ -1,19 +1,31 @@ package com.calculator.model; public class Number { - String firstNumber; - String secondNumber; - - public String getFirstNumber() { + Integer firstNumber; + Integer secondNumber; + Integer result; + + public Integer getFirstNumber() { return firstNumber; } - public void setFirstNumber(String firstNumber) { + + public void setFirstNumber(Integer firstNumber) { this.firstNumber = firstNumber; } - public String getSecondNumber() { + + public Integer getSecondNumber() { return secondNumber; } - public void setSecondNumber(String secondNumber) { + + public void setSecondNumber(Integer secondNumber) { this.secondNumber = secondNumber; } + + public Integer getResult() { + return result; + } + + public void setResult(Integer result) { + this.result = result; + } } diff --git a/CalculatorServiceClient/src/test/java/com/calculator/CalculatorApplicationTests.java b/CalculatorServiceClient/src/test/java/com/calculator/CalculatorApplicationTests.java index fe127c4..d911a78 100644 --- a/CalculatorServiceClient/src/test/java/com/calculator/CalculatorApplicationTests.java +++ b/CalculatorServiceClient/src/test/java/com/calculator/CalculatorApplicationTests.java @@ -1,11 +1,8 @@ package com.calculator; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; -@RunWith(SpringRunner.class) @SpringBootTest public class CalculatorApplicationTests { @@ -13,4 +10,4 @@ public class CalculatorApplicationTests { public void contextLoads() { } -} +} \ No newline at end of file