The Obligatory Hello World
Loading

The Obligatory Hello World

Since every programming paradigm needs to solve the tough problem of printing a well-known greeting to the console we’ll introduce you to the actor-based version.

import akka.actor.Actor
import akka.actor.Props

class HelloWorld extends Actor {

  override def preStart(): Unit = {
    // create the greeter actor
    val greeter = context.actorOf(Props[Greeter], "greeter")
    // tell it to perform the greeting
    greeter ! Greeter.Greet
  }

  def receive = {
    // when the greeter is done, stop this actor and with it the application
    case Greeter.Done  context.stop(self)
  }
}

The HelloWorld actor is the application’s “main” class; when it terminates the application will shut down—more on that later. The main business logic happens in the preStart method, where a Greeter actor is created and instructed to issue that greeting we crave for. When the greeter is done it will tell us so by sending back a message, and when that message has been received it will be passed into the behavior described by the receive method where we can conclude the demonstration by stopping the HelloWorld actor. You will be very curious to see how the Greeter actor performs the actual task:

object Greeter {
  case object Greet
  case object Done
}

class Greeter extends Actor {
  def receive = {
    case Greeter.Greet 
      println("Hello World!")
      sender ! Greeter.Done
  }
}

This is extremely simple now: after its creation this actor will not do anything until someone sends it a message, and if that happens to be an invitation to greet the world then the Greeter complies and informs the requester that the deed has been done.

As a Scala developer you will probably want to tell us that there is no main(Array[String]) method anywhere in these classes, so how do we run this program? The answer is that the appropriate main method is implemented in the generic launcher class akka.Main which expects only one command line argument: the class name of the application’s main actor. This main method will then create the infrastructure needed for running the actors, start the given main actor and arrange for the whole application to shut down once the main actor terminates. Thus you will be able to run the above code with a command similar to the following:

java -classpath <all those JARs> akka.Main com.example.HelloWorld

This conveniently assumes placement of the above class definitions in package com.example and it further assumes that you have the required JAR files for scala-library and akka-actor available. The easiest would be to manage these dependencies with a build tool, see Using a build tool.

Contents