Functional wrapper for Hazelcast in Scala
Scala Java
Switch branches/tags
Nothing to show
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
src
.gitignore
README

README

DISCLAIMER: EXPERIMENTAL CODE. USE IT ON YOUR OWN RISK

API for Hazelcast in Scala that will add abstractions for working in concurrent and distributed
environment in a functional manner (distributed dataflow, actors backed with Hazelcast executors),
and functional wrappers for Hazelcast distributed collections.

==================================================================================================

================== EXAMPLE. Distributed PI calculation on a cluster. =============================

==================================================================================================

object Pi {

  val N = 10000

  def calculate(start: Int): Double = (start until (start + N))
    .map(i => 4.0 * (1 - (i % 2) * 2) / (2 * i + 1)).sum

}

"Reduce tasks in a parallel (Pi calculation)" in additionalInstance {

  val result = reduce(
    HazelcastUtil.clusterMembersList.zipWithIndex.map {
      case (member, index) =>
        distributedTask {
          () => Pi.calculate(index * Pi.N)
        } onMember member
    }
  )(_ + _)()

  result.get must be closeTo (3.141 +/- 0.001)

}

==================================================================================================

==================================== EXAMPLE. Chaining tasks =====================================

==================================================================================================


"Join tasks in a parallel" in {
  val taskA = distributedTask {
    () => 1
  }.onMember(Hazelcast.getCluster.getLocalMember)

  val taskB = distributedTask {
    () => "2"
  }.onMember(Hazelcast.getCluster.getLocalMember)

  val taskC = distributedTask {
    () => 1
  }.onMember(Hazelcast.getCluster.getLocalMember)

  taskA
    .join(taskB)(_.toString + _)
    .join(taskC)(_.length + _)
    .map(_.toDouble)().get must be equalTo 3d
}


==================================================================================================

You can find more exciting examples in specs (https://github.com/remeniuk/hazelcast-scala/tree/master/src/test/scala/org/scalaby/hazelcastwf).