Giter Club home page Giter Club logo

brewery-monolith's Introduction

CircleCIQuality Gate Status

SFG Beer Works

SFG Beer works is a Spring Framework application used to demonstrate the interaction of microservices.

This application mimics a beer distribution pipeline. Beer consumers order beers from a pub. The pub, when needed will order more beer from a beer distributor. The distributor orders and receives beer from a brewery.

Primary author of SFG Beer Works lives in St Petersburg, Florida, US. St Petersburg enjoys a thriving craft beer scene. Breweries and beers in this application are modeled after real breweries and beers in the Tampa Bay area.

Brewery

The Brewery application is for a brewery brewing beer. This intended to be modeled after a traditional monolith application being migrated to microservices.

Features

  • Uses Spring MVC, Spring Security, Spring Data JPA, Hibernate
  • Shared shared relational database
  • Scheduled tasks to brew beer, mimic tasting room (creates demand, to consume inventory and trigger brewing)
  • Thymeleaf based UI w/Bootstrap 4

Distributor

The distributor is a beer distributor - designed to be between many Pub's and many Brewerys. The distributor accepts orders from pubs, places orders with Brewers, picks up orders from Breweries, delivers to Pubs.

Features

  • Uses Spring WebFlux (controllers)
  • Spring Data MongoDB
  • Spring Security

Pub

The Pub is a bar or tavern serving beer to Beer Consumers. Beer Consumers order beer from Pub, Pub places reorders from Distributors

Features

  • Uses Spring WebFlux (Functional)
  • Spring Data MongoDB
  • Spring Security

Beer Consumer

The Beer Consumer orders and consumes beers from Pubs. This service creates demand on the supply chain.

Features

  • Primary language is Kotlin
  • Spring WebClient

Common Features

Features common to all components.

Features

  • Java 11
  • Docker
  • JUnit 5 / Mockito
  • Spring Framework 5 / Spring Boot 2.1+
  • Project Lombok
  • Mapstruct

API Docs

Default Port Mappings - For Single Host

Service Name Port
Brewery Beer Service 8080
Brewery Order Service 8081
Brewery UI 8082
Distributor 8090
Pub 8091
Beer Consumer 8092

brewery-monolith's People

Contributors

springframeworkguru avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

brewery-monolith's Issues

Thread.sleep hack unnecessary

You don't need Thread.sleep in NewBeerOrderListener.listen if you replace @EventListener with @TransactionalEventListener and its default "AFTER_COMMIT" binding phase.

There is also no point in using AtomicIntegers as local variables, which by definition are not shared by multiple threads.

Project does not run

When running the project on my machine using Intelij Idea 2020.2 I get the following error:

java.lang.NoClassDefFoundError: Could not initialize class org.codehaus.groovy.vmplugin.v7.Java7
	at org.codehaus.groovy.vmplugin.VMPluginFactory.<clinit>(VMPluginFactory.java:43)
	at org.codehaus.groovy.reflection.GroovyClassValueFactory.<clinit>(GroovyClassValueFactory.java:35)
	at org.codehaus.groovy.reflection.ClassInfo.<clinit>(ClassInfo.java:107)
	at org.codehaus.groovy.reflection.ReflectionCache.getCachedClass(ReflectionCache.java:95)
	at org.codehaus.groovy.reflection.ReflectionCache.<clinit>(ReflectionCache.java:39)
	at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.registerMethods(MetaClassRegistryImpl.java:209)
	at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.<init>(MetaClassRegistryImpl.java:107)
	at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.<init>(MetaClassRegistryImpl.java:85)
	at groovy.lang.GroovySystem.<clinit>(GroovySystem.java:36)
	at org.springframework.beans.factory.groovy.GroovyBeanDefinitionReader.<init>(GroovyBeanDefinitionReader.java:150)
	at org.springframework.boot.BeanDefinitionLoader.<init>(BeanDefinitionLoader.java:84)
	at org.springframework.boot.SpringApplication.createBeanDefinitionLoader(SpringApplication.java:766)
	at org.springframework.boot.SpringApplication.load(SpringApplication.java:706)
	at org.springframework.boot.SpringApplication.prepareContext(SpringApplication.java:392)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:314)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1260)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1248)
	at guru.sfg.brewery.SfgBreweryUiApplication.main(SfgBreweryUiApplication.java:26)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:564)
	at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49)
2020-08-16 17:13:11.957 ERROR 13823 --- [  restartedMain] o.s.boot.SpringApplication               : Application run failed

java.lang.NoClassDefFoundError: Could not initialize class org.codehaus.groovy.reflection.ReflectionCache
	at org.codehaus.groovy.runtime.dgmimpl.NumberNumberMetaMethod.<clinit>(NumberNumberMetaMethod.java:33) ~[groovy-2.5.6.jar:2.5.6]
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:na]
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:na]
	at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:na]
	at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500) ~[na:na]
	at java.base/java.lang.reflect.ReflectAccess.newInstance(ReflectAccess.java:124) ~[na:na]
	at java.base/jdk.internal.reflect.ReflectionFactory.newInstance(ReflectionFactory.java:346) ~[na:na]
	at java.base/java.lang.Class.newInstance(Class.java:604) ~[na:na]
	at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.createMetaMethodFromClass(MetaClassRegistryImpl.java:257) ~[groovy-2.5.6.jar:2.5.6]
	at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.<init>(MetaClassRegistryImpl.java:110) ~[groovy-2.5.6.jar:2.5.6]
	at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.<init>(MetaClassRegistryImpl.java:85) ~[groovy-2.5.6.jar:2.5.6]
	at groovy.lang.GroovySystem.<clinit>(GroovySystem.java:36) ~[groovy-2.5.6.jar:2.5.6]
	at org.springframework.beans.factory.groovy.GroovyBeanDefinitionReader.<init>(GroovyBeanDefinitionReader.java:150) ~[spring-beans-5.1.6.RELEASE.jar:5.1.6.RELEASE]
	at org.springframework.boot.BeanDefinitionLoader.<init>(BeanDefinitionLoader.java:84) ~[spring-boot-2.1.4.RELEASE.jar:2.1.4.RELEASE]
	at org.springframework.boot.SpringApplication.createBeanDefinitionLoader(SpringApplication.java:766) ~[spring-boot-2.1.4.RELEASE.jar:2.1.4.RELEASE]
	at org.springframework.boot.SpringApplication.load(SpringApplication.java:706) ~[spring-boot-2.1.4.RELEASE.jar:2.1.4.RELEASE]
	at org.springframework.boot.SpringApplication.prepareContext(SpringApplication.java:392) ~[spring-boot-2.1.4.RELEASE.jar:2.1.4.RELEASE]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:314) ~[spring-boot-2.1.4.RELEASE.jar:2.1.4.RELEASE]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1260) ~[spring-boot-2.1.4.RELEASE.jar:2.1.4.RELEASE]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1248) ~[spring-boot-2.1.4.RELEASE.jar:2.1.4.RELEASE]
	at guru.sfg.brewery.SfgBreweryUiApplication.main(SfgBreweryUiApplication.java:26) ~[classes/:na]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
	at java.base/java.lang.reflect.Method.invoke(Method.java:564) ~[na:na]
	at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) ~[spring-boot-devtools-2.1.4.RELEASE.jar:2.1.4.RELEASE]

Start

This application is not possible to start:

java: Internal error in the mapping processor: java.lang.NullPointerException at org.mapstruct.ap.internal.processor.DefaultVersionInformation.createManifestUrl(DefaultVersionInformation.java:182) at org.mapstruct.ap.internal.processor.DefaultVersionInformation.openManifest(DefaultVersionInformation.java:153) at org.mapstruct.ap.internal.processor.DefaultVersionInformation.getLibraryName(DefaultVersionInformation.java:129) at org.mapstruct.ap.internal.processor.DefaultVersionInformation.getCompiler(DefaultVersionInformation.java:122) at org.mapstruct.ap.internal.processor.DefaultVersionInformation.fromProcessingEnvironment(DefaultVersionInformation.java:95) at org.mapstruct.ap.internal.processor.DefaultModelElementProcessorContext.<init>(DefaultModelElementProcessorContext.java:50) at org.mapstruct.ap.MappingProcessor.processMapperElements(MappingProcessor.java:218) at org.mapstruct.ap.MappingProcessor.process(MappingProcessor.java:156) at org.jetbrains.jps.javac.APIWrappers$ProcessorWrapper.process(APIWrappers.java:157) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at org.jetbrains.jps.javac.APIWrappers$1.invoke(APIWrappers.java:313) at org.mapstruct.ap.MappingProcessor.process(Unknown Source) at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:980) at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:896) at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1222) at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1335) at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1258) at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:936) at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.lambda$doCall$0(JavacTaskImpl.java:104) at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.handleExceptions(JavacTaskImpl.java:147) at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:100) at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:94) at org.jetbrains.jps.javac.JavacMain.compile(JavacMain.java:238) at org.jetbrains.jps.incremental.java.JavaBuilder.lambda$compileJava$2(JavaBuilder.java:518) at org.jetbrains.jps.incremental.java.JavaBuilder.invokeJavac(JavaBuilder.java:564) at org.jetbrains.jps.incremental.java.JavaBuilder.compileJava(JavaBuilder.java:516) at org.jetbrains.jps.incremental.java.JavaBuilder.compile(JavaBuilder.java:359) at org.jetbrains.jps.incremental.java.JavaBuilder.doBuild(JavaBuilder.java:284) at org.jetbrains.jps.incremental.java.JavaBuilder.build(JavaBuilder.java:238) at org.jetbrains.jps.incremental.IncProjectBuilder.runModuleLevelBuilders(IncProjectBuilder.java:1507) at org.jetbrains.jps.incremental.IncProjectBuilder.runBuildersForChunk(IncProjectBuilder.java:1141) at org.jetbrains.jps.incremental.IncProjectBuilder.buildTargetsChunk(IncProjectBuilder.java:1288) at org.jetbrains.jps.incremental.IncProjectBuilder.buildChunkIfAffected(IncProjectBuilder.java:1106) at org.jetbrains.jps.incremental.IncProjectBuilder.buildChunks(IncProjectBuilder.java:877) at org.jetbrains.jps.incremental.IncProjectBuilder.runBuild(IncProjectBuilder.java:459) at org.jetbrains.jps.incremental.IncProjectBuilder.build(IncProjectBuilder.java:197) at org.jetbrains.jps.cmdline.BuildRunner.runBuild(BuildRunner.java:131) at org.jetbrains.jps.cmdline.BuildSession.runBuild(BuildSession.java:334) at org.jetbrains.jps.cmdline.BuildSession.run(BuildSession.java:162) at org.jetbrains.jps.cmdline.BuildMain$MyMessageHandler.lambda$channelRead0$0(BuildMain.java:218) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:829)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.