2015-06-17 6 views
5

Ho lavorato alla creazione di un'applicazione con gli attori Akka e ora che ho completato la logica di business basata sugli attori mi piacerebbe dargli un front-end RESTful + websocket . Sto cercando di trovare le istruzioni su come configurare Play nel contesto di un'applicazione esistente. Le uniche istruzioni che ho trovato sono come creare nuove applicazioni di gioco. C'è qualche documentazione su come fare questo?Convertire un'applicazione SBT Scala esistente per giocare

AGGIORNAMENTO: Questa domanda ha più a che fare con l'installazione SBT che collegando i controllori alla logica di business basata sugli attori. Ho provato a modificare build.sbt e plugins.sbt per includere le cose che l'attivatore ha creato quando ho fatto activator new ma IDEA si lamenta di Cannot resolve symbol PlayScala. Inoltre mi sto chiedendo di spostare i miei attori dallo standard SBT src/main/scala a app/ - dovrebbe essere in app/actors (come ho visto in uno dei modelli) o in app/models?

Ecco la mia build.sbt:

name := "test" 

version := "1.0-SNAPSHOT" 

lazy val root = (project in file(".")).enablePlugins(play.PlayScala) 

scalaVersion := "2.11.6" 

libraryDependencies ++= Seq(
    jdbc, 
    cache, 
    ws, 
    specs2 % Test 
) 

resolvers += "scalaz-bintray" at "http://dl.bintray.com/scalaz/releases" 

scalaVersion := "2.11.6" 
resolvers += "repo.novus rels" at "http://repo.novus.com/releases/" 
resolvers += "repo.novus snaps" at "http://repo.novus.com/snapshots/" 
libraryDependencies += "org.scalatest" % "scalatest_2.11" % "2.2.1" % "test" 
libraryDependencies += "com.github.nscala-time" %% "nscala-time" % "1.8.0" 
libraryDependencies += "org.slf4j" % "slf4j-simple" % "1.6.4" 
libraryDependencies += "org.reactivemongo" %% "reactivemongo" % "0.10.5.0.akka23" 

routesGenerator := InjectedRoutesGenerator 

ed ecco la mia plugins.sbt: Parte

logLevel := Level.Warn 

// The Play plugin 
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.4.0") 

// web plugins 

addSbtPlugin("com.typesafe.sbt" % "sbt-coffeescript" % "1.0.0") 

addSbtPlugin("com.typesafe.sbt" % "sbt-less" % "1.0.6") 

addSbtPlugin("com.typesafe.sbt" % "sbt-jshint" % "1.0.3") 

addSbtPlugin("com.typesafe.sbt" % "sbt-rjs" % "1.0.7") 

addSbtPlugin("com.typesafe.sbt" % "sbt-digest" % "1.1.0") 

addSbtPlugin("com.typesafe.sbt" % "sbt-mocha" % "1.1.0") 
+0

'Per utilizzare questo layout, utilizzare disablePlugins (PlayLayoutPlugin)' https://www.playframework.com/documentation/2.4.x/Anatomy Si consiglia di dare un'occhiata a questo. – jilen

risposta

0

Uno è quello di collegare il Businesslayer (logica di business attore-based - un ActorSystem) con il controller (play.api.mvc.Controller) nel Play MVC.
La seguente esposizione di esempio come fare:

import play.api.mvc._ 
import akka.actor._ 
import javax.inject._ 

import actors.HelloActor 

@Singleton 
class Application @Inject() (system: ActorSystem) extends Controller { 

    val helloActor = system.actorOf(HelloActor.props, "hello-actor") 

    //... 
} 

allora avete bisogno di sapere un po 'di circa il quadro di gioco:

  • Il router traduce ogni richiesta HTTP in ingresso a una chiamata all'azione (un metodo pubblico in una classe controller).
  • Il controller contiene alcune azioni.
  • Un'azione Fare un po 'di lavoro nel vostro Businesslayer (il vostro attore System) e restituire un risultato

Ora definire alcuni Route Request Percorsi:

- GET /clients/all   controllers. ... .list() 
- GET /clients/:id   controllers. ... .show(id: Long) 

E realizzare l'azione nel controller:

import play.api.libs.concurrent.Execution.Implicits.defaultContext 
import scala.concurrent.duration._ 
import akka.pattern.ask 
implicit val timeout = 5.seconds 

def show(id: Long) = Action.async { 
    // This ist a ask pattern returns a Future 
    // Here ist the Connection between the Action from Play to your 
    // Actor System - your Business Layer 
    // map it to your own result type 
    (helloActor ? SayHello(id)).mapTo[String].map { message => 
    Ok(message) 
    } 
} 
+0

Grazie @ robert-halter, questo è utile. Le mie domande hanno più da fare in realtà con l'installazione SBT, e dove dovrei mettere i miei file. La configurazione SBT di default ha il mio sorgente in src/main/scala, ma Play ha una struttura di file diversa, e dice che dovrei 'disablePlugins (PlayLayoutPlugin)'. Inoltre sono confuso su come configurare il mio build.sbt e il mio plugins.sbt. Ho provato a creare una nuova app di gioco con attivatore e trasferire tali modifiche nelle mie applicazioni esistenti build.sbt e plugins.sbt, ma IDEA si lamenta di cose come 'Impossibile risolvere il simbolo PlayScala' –

+0

Ho modificato il mio plugins.sbt e build.sbt per le istruzioni qui 'https: // www.playframework.com/documentation/2.4.x/NewApplication' e ricevo' Can not resolve symbol' per 'Controller' e' Inject' nel codice di esempio. Tuttavia, il mio build.sbt non mi sta dando un 'Impossibile risolvere il simbolo' per' PlayScala'. –

+1

@SameerParekhBrenn: 'play.PlayScala' è un nome di plugin. 'Controller' proviene da' addSbtPlugin ("com.typesafe.play"% "sbt-plugin"% "2.3.9") '-> Questo può essere un problema nel tuo IDE IDEA. Per 'Inject' vedere [Cantt locate Inject] (http://stackoverflow.com/questions/19718662/cant-locate-import-javax-inject-inject-package) o [Plugin Example for Actors] (https: // www .playframework.com/documentation/2.4.x/ScalaPlugins) –

1

UPDATE risposta:

Start il file progetto activator Quindi avviare l'app Web con run e aprire il browser con http://localhost:9000 Carica tutte le dipendenze e compila l'applicazione di riproduzione Scala.

Questo dovrebbe risolvere i problemi di IDEA Ide sulle dipendenze mancanti.

In Scala Play 2.4 è possibile scegliere tra i layout del progetto.

  • il progetto di allestimento app/
  • il layout del progetto src/main/scala usata da SBT e Maven progetto è nuovo e sperimentale e può avere problemi.

Prima (Play 2.3 e più piccolo) là dove solo il layout del progetto app/

I tre pacchetti

app/controllers -> Application controllers 
app/models -> Application business layer 
app/views -> Templates 

sono predefiniti.

Naturalmente è possibile aggiungere i propri pacchetti, ad esempio un pacchetto app/actors.