2015-06-17 16 views
5

Pracowałem nad budowaniem aplikacji z aktorami Akka, a teraz, gdy zakończyłem opartą na aktorach logikę biznesową, chciałbym nadać jej RESTful + websocket front-end . Próbuję znaleźć instrukcje, jak skonfigurować grę w kontekście istniejącej aplikacji. Jedyne instrukcje, jakie mogłem znaleźć, to tworzenie nowych aplikacji Play. Czy jest jakaś dokumentacja, jak to zrobić?Konwertuj istniejącą aplikację SBT Scala, aby grać

AKTUALIZACJA: To pytanie ma więcej wspólnego z konfiguracją SBT niż połączenie kontrolerów z logiką biznesową opartą na aktorze. Próbowałem zmodyfikować build.sbt i plugins.sbt, aby uwzględnić rzeczy, które aktywator zbudował, gdy robiłem activator new, ale IDEA narzeka na Cannot resolve symbol PlayScala. Zastanawiam się również nad przeniesieniem moich aktorów ze standardu SBT src/main/scala na app/ - czy powinien on być w app/actors (jak widziałem w jednym z szablonów) lub w app/models?

Oto mój 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 

i tu jest moje plugins.sbt:

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

'Aby wykorzystać ten układ, należy disablePlugins (PlayLayoutPlugin)' https://www.playframework.com/documentation/2.4.x/Anatomy Można spojrzeć na to. – jilen

Odpowiedz

0

jedna część jest podłączenie Businesslayer (aktor oparte logika Biznesu - ActorSystem) z kontrolera (play.api.mvc.Controller) w Play MVC.
Poniżej przedstawiono próbki, jak to zrobić:

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") 

    //... 
} 

to trzeba wiedzieć trochę o ramowych Play:

  • Router przekłada każde przychodzące żądanie HTTP do wywołania działania (metoda publicznych w klasie kontrolera).
  • Kontroler zawiera niektóre akcje.
  • działanie popracować w swoim Businesslayer (Your System aktor) i zwrócić wynik

teraz zdefiniować kilka Ścieżki Route żądanie:

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

i wdrożenie akcji w kontrolerze:

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

Dzięki @ robert-halter, jest to pomocne. Moje pytania mają więcej wspólnego z konfiguracją SBT i gdzie powinienem umieścić moje pliki. Domyślna konfiguracja SBT ma moje źródło w src/main/scala, ale Play ma inną strukturę plików i mówi, że powinienem "wyłączyćPlugins (PlayLayoutPlugin)". Również jestem zdezorientowany, jak skonfigurować mój build.sbt i mój plugins.sbt. Próbowałem stworzyć nową aplikację z aktywatorem i przenieść te zmiany do moich istniejących aplikacji build.sbt i plugins.sbt, ale IDEA narzeka na takie rzeczy jak "Nie mogę rozwiązać symbolu PlayScala" –

+0

Edytowałem moje plugins.sbt i build.sbt zgodnie z instrukcjami tutaj: https: // www.playframework.com/documentation/2.4.x/NewApplication' i otrzymuję komunikat "Can not resolve symbol' dla' Controller' i 'Inject' w twoim przykładowym kodzie. Mój build.sbt nie daje mi jednak 'Can not resolve symbol' dla' PlayScala'. –

+1

@SameerParekhBrenn: 'play.PlayScala' jest nazwą wtyczki. 'Controller' pochodzi z' addSbtPlugin ("com.typesafe.play"% "sbt-plugin"% "2.3.9") '-> To może być problem z IDE IDEA. Dla 'Inject' patrz [Cantt locate Inject] (http://stackoverflow.com/questions/19718662/cant-locate-import-javax-inject-inject-package) lub [Przykład wtyczki dla aktorów] (https: // www .playframework.com/documentation/2.4.x/ScalaPlugins) –

1

UPDATE Odpowiedź:

start w Twój plik projektu activator Następnie uruchom aplikację internetową za pomocą run i otwórz przeglądarkę za pomocą http://localhost:9000 To ładuje wszystkie zależności i kompiluje aplikację Scala Play.

To powinno poprawić IDEA Ide Problemy z brakującymi zależnościami.

W programie Scala Play 2.4 można wybrać między układami projektu.

  • Projekt układ app/
  • układ Projekt src/main/scala używane przez SBT i Maven projektu jest nowa i eksperymentalna i może mieć problemy.

Przed (Play 2.3 i mniejszy) tam gdzie tylko układ Projekt app/

Trzy pakiety

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

są predefiniowane.

Można oczywiście dodać własne pakiety, na przykład pakiet app/actors.

Powiązane problemy