Scala Support
Scala is a general-purpose programming language providing support for functional programming and a strong static type system. Designed to be concise,[10] many of Scala’s design decisions aimed to address criticisms of Java.
You can use Scala to create app modules.
| We can use Eclipse for Scala, but for best experience, use IntelliJ IDEA. |
Create Scala module
You can create a new application module using scala with following build.gradle:
apply plugin: 'scala'
apply plugin: 'com.axelor.app-module'
dependencies {
compile 'org.scala-lang:scala-library:2.11.8'
testCompile 'org.scalatest:scalatest_2.11:3.0.0'
}
That’s it. Your app module can now use Scala to implement business logic.
Create Services
Let’s create a simple HelloService using Scala:
HelloService.scala
package com.axelor.hello.service
trait HelloService {
def say(what: String): Unit
}
and an implementation:
HelloServiceImpl.scala
package com.axelor.hello.service
class HelloServiceImpl extends HelloService {
override def say(what: String): Unit = {
println(s"Say: ${what}")
}
}
Create Controllers
Let’s create a controller class HelloController that uses the above HelloService:
HelloController.scala
package com.axelor.hello.web
import javax.inject.Inject
import com.axelor.hello.db.Hello
import com.axelor.hello.service.HelloService
import com.axelor.rpc.{Response, ActionRequest, ActionResponse}
class HelloController @Inject() (service: HelloService) {
def say(req: ActionRequest, res: ActionResponse): Unit = {
val ctx = req.getContext.asType(classOf[Hello])
service.say(ctx.getMessage)
res.setStatus(Response.STATUS_SUCCESS)
}
}
Configure
Now it’s time to configure our scala services. Create a Guice module:
HelloModule.scala
package com.axelor.hello
import com.axelor.app.AxelorModule
import com.axelor.hello.service.{HelloService, HelloServiceImpl}
class HelloModule extends AxelorModule {
override protected def configure(): Unit = {
bind(classOf[HelloService]).to(classOf[HelloServiceImpl])
}
}
That’s it…