2015-06-17 4 views
5

Я работаю над созданием приложения с аккордами Akka, и теперь, когда я закончил бизнес-логику, основанную на актерах, я бы хотел дать ей интерфейс RESTful + websocket , Я пытаюсь найти инструкции по настройке Play в контексте существующего приложения. Единственными инструкциями, которые я смог найти, является создание новых приложений Play. Есть ли какая-либо документация о том, как это сделать?Преобразование существующего приложения SBT Scala для воспроизведения

ОБНОВЛЕНИЕ: этот вопрос больше связан с настройкой SBT, чем подключение контроллеров к бизнес-логике, основанной на действиях. Я пытался изменить build.sbt и plugins.sbt, чтобы включить то, что создал активатор, когда я сделал activator new, но IDEA жалуется на Cannot resolve symbol PlayScala. Также мне интересно переместить моих актеров из SBT-стандарта src/main/scala в app/ - должно ли оно быть в app/actors (как я видел в одном из шаблонов) или в app/models?

Вот мой 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 

и вот мой 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

'Для использования этого макета используйте disablePlugins (PlayLayoutPlugin)' https://www.playframework.com/documentation/2.4.x/Anatomy. Вы можете посмотреть на это. – jilen

ответ

0

Одна часть для подключения Businesslayer (актер на основе бизнес-логики - это ActorSystem) с контроллером (play.api.mvc.Controller) в Play MVC.
В следующем примере показано, как сделать это:

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

    //... 
} 

, то вам нужно знать некоторые о Play Framework:

  • Маршрутизатор транслирует каждый входящий запрос HTTP для вызова действия (публичный метод в классе контроллера).
  • Контроллер содержит некоторые действия.
  • действие сделать некоторую работу в вашей Businesslayer (Your Actor System) и возвращает результат

Теперь определимся маршрут Запрос Дорожки:

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

и осуществлять действия в вашем контроллере:

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

Спасибо @ robert-halter, это полезно. Мои вопросы имеют больше общего с настройкой SBT, и я должен поместить свои файлы. Конфигурация SBT по умолчанию имеет мой источник в src/main/scala, но у Play есть другая файловая структура, и она говорит, что я должен 'disablePlugins (PlayLayoutPlugin)'. Также я смущен, как настроить мои build.sbt и мои plugins.sbt. Я попытался создать новое игровое приложение с активатором и перенести эти изменения в мои существующие приложения build.sbt и plugins.sbt, но IDEA жалуется на такие вещи, как 'Не удается разрешить символ PlayScala' –

+0

Я редактировал мои plugins.sbt и build.sbt в соответствии с инструкциями здесь 'https: // www.playframework.com/documentation/2.4.x/NewApplication', и я получаю' Невозможно разрешить символ' для 'Controller' и' Inject' в вашем примере кода. Мой build.sbt не дает мне «Не могу разрешить символ» для 'PlayScala'. –

+1

@SameerParekhBrenn: 'play.PlayScala' - это имя плагина. 'Controller' пришел из' addSbtPlugin ("com.typesafe.play"% "sbt-plugin"% "2.3.9") '-> Это может быть проблемой в IDEA IDE. Для 'Inject' см. [Cantt locate Inject] (http://stackoverflow.com/questions/19718662/cant-locate-import-javax-inject-inject-package) или [Пример плагина для актеров] (https: // www .playframework.com/documentation/2.4.x/ScalaPlugins) –

1

UPDATE Ответ:

Начало в ваш файл проекта activator Затем запустите веб-приложение с run и откройте окно браузера с помощью http://localhost:9000 Это загружает все зависимости и компилирует приложение Scala Play.

Это должно исправить ваши идеи IDEA Ide о недостатках зависимостей.

В Scala Play 2.4 вы можете выбирать между макетами проекта.

  • Проект макета app/
  • макет проекта src/main/scala используется SBT и Maven проекта является новым и экспериментальным и могут возникнуть проблемы.

До (Play 2.3 и меньше) там, где только макет проекта app/

три пакета

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

предопределены.

Вы можете, конечно, добавить свои собственные пакеты, например, пакет app/actors.

Смежные вопросы