final String firstname; private final String lastname; private final String ip; private final IpInfo ipInfo; // immutable inside private final javaslang.collection.List<Person> friends; // immutable // init constructor and only getters }
for entity No interoperable immutable collections: Javaslang, Guava, JDK9 If done right another challenges come: builders, aggregates, lenses Has better support in Scala, Clojure, Kotlin
features of your reactive library (like reactor-test) Test your resilience (with or without tools like Netflix's Chaos Monkey) Load test with expected throughput
Blocking IO libraries (such as JDBC) still possible Non-blocking functional programming might give mental overhead Not every application has high enough throughput Blocking can still be resilient, responsive and fast Use Resilience Patterns (such as Bulkheads, Circuit Breaker)