Distributed Java Programming – A new training topic

I was recently in Hamburg once again to deliver another IT training. This time around the topic was Java, a language I've long been familiar with.

But it wasn't just plain old Java; the participants were already well-versed in that. Instead, they wanted to learn how to build distributed systems using Java. Not only that, but they had a few very specific interests, which you see in the list below.

Distributed systems is a challenging topic to teach, especially because it encompasses so much stuff and I had only two days to cover the requested material. Here's what I managed to include:

Principles of networked and distributed systems

  • Definitions
  • Transparency
  • Benefits and challenges
  • Case study: The web

Distributed architecture and design patterns

  • Layer paradigm
  • Distributed operating systems
  • Interprocess communication
  • Remote invocation
  • Models (client/server, peer-to-peerm multi-server, proxy, mobile variants, thin clients)
  • Distributed design patterns


  • Thread vs. processes
  • Benefits and costs
  • Server threading architectures
  • Threads in Java

Lower-level concurrency mechanisms

  • Thread interference
  • Synchronising

Higher-level concurrency mechanisms

  • Locks
  • Executor, ExecutorService, ThreadPools
  • Futures
  • Concurrent collections


  • Addressing with sockets
  • UDP
  • TCP


  • Input and output streams
  • Stream readers and writers
  • Streaming with sockets
  • Streaming among multiple threads
  • Multicast


  • Serializable interface
  • Serialisation with references
  • Serialisation with inheritence
  • Best practices

Remote Method Invocation

  • Using the RMI registry
  • Remote interface
  • Creating a server
  • Creating a client

Case study: CORBA

Distributed object persistence

  • Java Persistence API
  • Hadoop
  • Distributed databases
  • Special topic: Distributed cache using memcached
  • Best practices for distributed caching



Leave a Reply

Your email address will not be published. Required fields are marked *