# Notes of JCConf 2017

_This post is for memo of JCConf 2017, the meeting agenda can be referenced_ [_here_](http://jcconf.tw/2017/schedule-1.html)_._

## **Topic: Introduction to Java Platform Module System (Project Jigsaw)**

### The advantage of Java 9

* Dependency management V.S. classpath declaration (painful when projects grows big, can refer to the part of: [JAR/Classpath地狱](http://www.infoq.com/cn/articles/Project-Jigsaw-Coming-in-Java-9))
* Modularization for adaption to different runtime environments, such like a mobile device (can refer the part of: [The primary features supporting modularization](https://www.javaworld.com/article/2878952/java-platform/modularity-in-java-9.html)).

### Implementation Detail

* Node.js style module descriptor (requires, exports, uses, provides...)
* [Getting Started with Java 9 Modules](https://labs.consol.de/development/2017/02/13/getting-started-with-java9-modules.html)

### Useful Tools

* Jlink - Running your application with minimal load (can refer to the part of: [The Linker](http://openjdk.java.net/projects/jigsaw/quick-start)).
* Jdeps - CLI for display dependencies between jars ([reference](https://dzone.com/articles/jdeps-jdk-8-command-line)).

## **Topic: Start developing Microservices with Spring Boot and Spring Cloud**

This talk not only addresses on spring boot development but also great philosophy of software development.

### Warming up

Why microservice? Agility, Scalability (reliability also, of course).

Monolithic V.S. microservice is like: painting V.S. diorama

The spirit of software developing: [守破離](https://ihower.tw/blog/archives/6981). (The debate about TDD is extremely the case.)

### Development with Spring boot

Using [Spring initializer](https://github.com/ysfang82/development-notes/tree/2d273d404ea9cafe2e75c67d0a92894d877bc38a/h%20ttps:/start.spring.io) to create a porject workplace.

In most of the cases, the application includes web + data:

* spring-boot-starter-web
* spring-boot-starter-data-jpa

ORM tool selection: [MyBatis vs hibernate](https://www.zhihu.com/question/21104468)

Test your app with spring test:

* spring-boot-starter-test

Spring Cloud (microservice ready framework)

Using [Eureka](https://spring.io/guides/gs/service-registration-and-discovery) (a service discovery server)

Message queue tool:

* [Spring AMQP](https://projects.spring.io/spring-amqp/)
* [Spring Cloud Stream](https://cloud.spring.io/spring-cloud-stream)

### Closing up

A beautiful say: "Start simple, not small."

## **Topic: Start Spring Reactive Programming**

What does "reactive" mean? Event-driven (take ideas from Node.js: Async, Non-blocking IO)

Reference:

* [Reactive Manifesto](https://www.reactivemanifesto.org)
* [Reactive與Java 9](http://www.ithome.com.tw/voice/112435)
* [Spring web reactive module](https://docs.spring.io/spring-framework/docs/5.0.0.M1/spring-framework-reference/html/web-reactive.html)
