Reactive Programming

For The JVM

Deven Phillips

Senior Software Engineer

Sungard Availability Services

July 2015

Java Users Group of Greater Louisville

What Is Reactive?

1. Responsive

2. Resilient

3. Elastic

4. Message Driven

http://www.reactivemanifesto.org/

Responsive

1. Fast Failure

2. Reliable Timeouts

3. Builds Confidence

Resilient

1. Replication

2. Containment

3. Isolation

4. Recovery

5. Testing

Elastic

1. Sharding

2. Replication

3. Scaling

4. Monitoring

Message Driven

1. Location Transparency

2. Loose Coupling

3. Fault Isolation

4. Error Delegation

So, what is reactive?

"Reactive programming is programming with asynchronous data streams..." - André Staltz

https://gist.github.com/staltz/868e7e9bc2a7b8c1f754

Reactive Tools

For The JVM

  • RxJava
  • Quasar
  • Akka/Play
  • Vert.X

RxJava

/*
 * Fetch a list of Wikipedia articles asynchronously, with error handling.
 */
def fetchWikipediaArticleAsynchronouslyWithErrorHandling(String... wikipediaArticleNames) {
    return Observable.create({ subscriber ->
        Thread.start {
            try {
                for (articleName in wikipediaArticleNames) {
                    if (true == subscriber.isUnsubscribed()) {
                        return;
                    }
                    subscriber.onNext(new URL("http://en.wikipedia.org/wiki/"+articleName).getText());
                }
                if (false == subscriber.isUnsubscribed()) {
                    subscriber.onCompleted();
                }
            } catch(Throwable t) {
                if (false == subscriber.isUnsubscribed()) {
                    subscriber.onError(t);
                }
            }
            return (subscriber);
        }
    });
}

Quasar

  • Fibers
  • Actors
  • Behaviors
  • Supervisors
  • Channels

Vert.X

  • Verticles
  • Event Bus
  • Buffers
  • Supervisor
  • Polyglot

Akka/Play Framework

  • Actors
  • Message Bus
  • Supervisors
  • Activator

Which Is The Best?

That's up to you to decide...

 

The answer varies depending on the application and the team and the company you are working for!

Let's Look At Some Code!

Reactive Programming For The JVM

By Deven Phillips

Reactive Programming For The JVM

A basic introduction to reactive programming concepts and tools for the Java Virtual Machine

  • 1,604