2015-06-17 19 views
5

Akka oyuncularıyla bir uygulama oluşturmak için çalışıyorum ve şimdi aktör tabanlı iş mantığını tamamladım, RESTful + websocket ön uç vermek istiyorum . Mevcut bir uygulama bağlamında Play'in nasıl kurulacağıyla ilgili talimatları bulmaya çalışıyorum. Bulabileceğiniz tek talimat, yeni Google Play uygulamaları oluşturma. Bunun nasıl yapılacağına dair bir belge var mı?Varolan SBT Scala uygulamasını Oynat

GÜNCELLEME: Bu soru, denetleyicileri aktör tabanlı iş mantığına bağlamaktan ziyade SBT kurulumuyla daha fazla ilgilidir. Ben activator new yaptıktan sonra aktivatör tarafından oluşturulan şeyler eklemek için build.sbt ve plugins.sbt değiştirmeye çalıştım ama IDEA yaklaşık Cannot resolve symbol PlayScala hakkında şikayet ediyor. Ayrıca aktörleri SBT-standardı src/main/scala'dan app/'a taşımayı merak ediyorum - app/actors (şablonlardan birinde gördüğüm gibi) veya app/models? İşte

var benim 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 

ve burada benim plugins.sbt geçerli:

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

'Bu düzeni kullanabilmek için disablePlugins (PlayLayoutPlugin)' https://www.playframework.com/documentation/2.4.x/Anatomy 'yi kullanın. – jilen

cevap

0

Bir Kısım sizin Businesslayer bağlamaktır - Denetleyici ile (aktör tabanlı iş mantığı ActorSystem) (play.api.mvc.Controller Play MVC'de.
Aşağıdaki örnek göstermek bunun nasıl:

  • Yönlendirici bir eylem çağrısı (bir kamu yöntem, her gelen HTTP isteği çevirir:

    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") 
    
        //... 
    } 
    

    sonra Play Framework hakkında bazı bilmeniz gereken kontrolör sınıfında.

  • Denetleyici bazı Eylemler içerir.
  • Bir Eylem sizin Businesslayer (Kişisel Aktör Sistemi) bazı işler yapmak ve bir Sonucu
Şimdi

tanımlamak bazı Yol Talebi Yolları Dönüş:

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

Ve Denetleyici'yi Eylem uygulamak:

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

Teşekkürler @ robert-halter, bu yararlıdır. Sorularım, SBT kurulumuyla ve dosyalarımı nereye koyacağım ile ilgili daha çok şey var. Varsayılan SBT yapılandırması kaynağımı src/main/scala'da kullanıyor, ancak Oynatımın farklı bir dosya yapısı var ve "DisPlugins (PlayLayoutPlugin)" işlevini kullanmam gerektiğini söylüyor. Ayrıca benim build.sbt ve benim plugins.sbt kurulumunu nasıl karıştırdım. Ben aktivatör ile yeni bir oyun uygulaması oluşturmaya çalıştım ve bu değişiklikleri benim varolan uygulamalar build.sbt ve plugins.sbt içine geçirdim, ama IDEA, 'PlayScala' sembolü çözülemiyor gibi bir şeyden şikayet ediyor: –

+0

Benim plugins.sbt ve build.sbt düzenledim Buradaki talimatlara göre https: // www.playframework.com/documentation/2.4.x/NewApplication' ve örnek kodunuzda '' Controller' ve 'Inject' için' 'sembolü '' çözümlenemiyorum. Benim build.sbt bana olsa 'PlayScala' için 'sembolü çözemez' değil. –

+1

@SameerParekhBrenn: 'play.PlayScala' bir Eklenti Adıdır. '' Controller' 'addSbtPlugin'den (" com.typesafe.play "%" sbt-plugin "%" 2.3.9 ")' '-> Bu IDEA IDE'nizde bir Sorun olabilir. "Enjekte" için [Enjekte Et] (http://stackoverflow.com/questions/19718662/cant-locate-import-javax-inject-inject-package) veya [Aktörlere Eklenti Örneği] bölümüne bakın (https: // www .playframework.com/documentation/2.4.x/ScalaPlugins) –

1

GÜNCELLEME Cevap:

Başlangıç ​​içinde Proje Dosyasında activator Sonra Web Uygulamasını run ile başlatın ve tarayıcıyı http://localhost:9000 ile açın. Bu, tüm bağımlılıkları yükler ve Scala Play Uygulamasını derler.

Bu, IDEA Ide öznitelikleri eksiklikleriyle ilgili sorunları düzeltmelidir.

Scala Play 2.4'te Proje Yerleşimleri arasında seçim yapabilirsiniz.

  • Proje düzeni app/
  • SBT ve Maven Project tarafından kullanılan Proje düzeni src/main/scala yeni ve deneysel ve sorunları olabilir.

(2.3 ve daha küçük Çal) orada burada sadece Proje düzeni app/

üç Paketler

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

önceden tanımlanmış olan önce.

Elbette kendi paketlerinizi de ekleyebilirsiniz, örneğin bir app/actors paketi.