vert-x / mod-lang-scala

Vert.x 2.x is deprecated - use instead
https://github.com/vert-x3/vertx-lang-scala
Apache License 2.0
77 stars 29 forks source link

= Vert.x 2.x is deprecated - use instead https://github.com/vert-x3/vertx-lang-scala

== Scala Module for Vert.x

Scala language implementation for Vert.x.

=== Versions

Vert.x Scala 1.0.x is designed for Vert.x 2.1 and works with Scala 2.10

=== Quickstart

To use it, we've added a first "Hello World"-like example to the https://github.com/vert-x/vertx-examples/blob/master/src/raw/scala[Vert.x Examples repository] which can be run like this:

  1. Clone or download the https://github.com/vert-x/vertx-examples[Vert.x Examples Git repository]

  2. Change directory to src/raw/scala and type: + ............................................................................... [VERTX_HOME]/bin/vertx run http/Server.scala ............................................................................... +

  3. Go to http://localhost:8080/ and you should see the message: ""This is a Verticle script!"

=== Using the Vert.x Scala API

The best places to look for examples on how to use the Vert.x Scala API are the https://github.com/vert-x/vertx-examples/blob/master/src/raw/scala[Vert.x Examples repository] and the https://github.com/vert-x/mod-lang-scala/tree/master/src/test/scala/org/vertx/scala/tests[Vert.x Scala testsuite]. Please inspect those if you have any doubts. The following sub sections explain some of the items to bear in mind when using this API.

==== Type annotations for handlers in for overloaded methods

In some cases, the Scala compiler can fail to detect the type of a particular handler, for example:

+ ............................................................................... val datagramSocket = vertx.createDatagramSocket() datagramSocket.send("hello", "127.0.0.1", 1234, { h: AsyncResult[DatagramSocket] => ... } ............................................................................... +

In this example, send method call explicitly needs to define the type annotation for the async result handler. This is because there's an overloaded method that sends a org.vertx.scala.core.buffer.Buffer instead of a String.

A possible workaround would have been to use function currying, but doing so would limit the API capability to add scala.concurrent.Future based methods, which are better suited for implementing handlers.

=== Plugging Vert.x Scala language extension

Vert.x 2.1 comes with Vert.x Scala language support embedded within it, but if you want to test a different version of the Vert.x Scala language implementation, follow these instructions:

  1. Download a Vert.x distribution.
  2. Open [VERTX_HOME]/conf/langs.properties file and modify this line to match the Vert.x Scala version to test: + ............................................................................... scala=io.vertx~lang-scala~X.Y.Z:org.vertx.scala.platform.impl.ScalaVerticleFactory ............................................................................... +

Optionally, if you're testing a locally built Vert.x Scala extension, you'll need to do the following steps additionally:

  1. Download latest http://www.scala-sbt.org/download.html[SBT release]
  2. Put [SBT_HOME]/bin/sbt or [SBT_HOME]/bin/sbt.bar into your path
  3. Clone the Vert.x Scala source repository 4a. If you want build plugin with the base Scala version used (e.g. 2.10), execute: + ............................................................................... $ sbt clean publishM2 $ [VERTX_HOME]/bin/vertx install io.vertx~lang-scala_2.10~X.Y.Z ............................................................................... + 4b. On the other hand, if you want build plugin with a cross compiled Scala version (e.g. 2.11), execute: + ............................................................................... $ sbt clean +publishM2 $ [VERTX_HOME]/bin/vertx install io.vertx~lang-scala_2.11~X.Y.Z ............................................................................... +

For more information on building Vert.x Scala, check the contributing guide.