# 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)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://ysfang82.gitbook.io/development-notes/conference-notes/notes-of-jcconf-2017.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
