Sometimes Java gets a bad rap from Agile software developers who suspect it to be a legacy technology on par with COBOL. I understand that being the most used language on the planet means there must be projects of all shapes and sizes out there, including lots of legacy.
That said, Java and the JVM comprise a huge and vibrant ecosystem producing value in all kind of domains from banking to Android applications and scientific software.
So I built a sample Game Of Life with what I believe are modern Java tecnologies:
- Java 8 with lambdas support
- Gradle for build automation and dependency resolution (substitutes include both Ant and Maven)
- Jetty as an embedded server to respond to HTTP requests
- Jersey for building the RESTful web services that calculate new generations of a plane, using JAX-RS
- Freemarker templating engine to build HTML
- Log4j 2 for logging, encapsulated behind the interface slf4j
On the testing side of things:
- JUnit 4 for unit testing infrastructure
- Mockito for Test Doubles
- JUnit Quickcheck for property-based testing
- Selenium for browser-based testing
Here's the result:
The application is self-contained and can be compiled, tested, and run without any IDE or previous machine setup except having a JDK 8 on your machine. See the project on Github for details.