我真的在两个不同的堆栈之间撕裂,用于构建一个大型应用程序.一方面有这个选项:
node.js路径对我很有吸引力,因为我可以在coffeescript中编写所有服务器端代码,视图和客户端代码,我已经知道了.如果我沿着这条路走下去,我仍然不能100%确定我会采取哪种数据库路径.mongoose使得存储数据变得快速而简单,但考虑到我想到的数据模型(非常SQLish),缺乏真正的关系可能更难以工作.
Play Framework路径也很有吸引力,因为我在使用Java时非常了解框架,但我对Scala知之甚少,因此在学习该语言的过程中会对生产力产生影响.Anorm数据库访问层很吸引人,因为我可以手工编写我喜欢的SQL,并将结果自动映射到对象,这样可以省去很多工作.
我一直倾向于node.js,但我并没有在最好的数据库访问层上出售.任何人都有任何经验,可以分享一些见解?
随着最近发布的Play Framework 2.0,我想知道是否有人可以从高层次的角度总结Play Framework 1和2之间的主要区别.
我已经编译了一些(播放1.0 - >播放2.0):
还有什么 ?阿卡?
这是我的模特:
class User {...}
class Book {
User author;
int number;
}
Run Code Online (Sandbox Code Playgroud)
每个书籍编号从每位作者1开始,并向上递增.所以我们将获得John Grisham的书籍1,2,3,George Martin的书籍1 ...等等......
是否有一个我可以放置的独特约束Book,这可以保证我们没有同一作者的两本具有相同编号的书籍?类似@Column(unique = true),但约束只适用于复合Author X number?
我打电话给这样的网络服务:
WS
.url(url)
.get
.map { response => // error occurs on this line
response.status match {
case 200 => Right(response.json)
case status => Left(s"Problem accessing api, status '$status'")
}
}
Run Code Online (Sandbox Code Playgroud)
完整的错误: Error: Cannot find an implicit ExecutionContext, either require one yourself or import ExecutionContext.Implicits.global
我希望能够使用-Xfatal-warnings和-Ywarn-unused-import,问题是,编译器是在其中包含了我的应用程序播放路由文件触发的错误:
[error] /path/to/app/conf/routes: Unused import
[error] /path/to/app/conf/routes: Unused import
[error] /path/to/app/conf/routes:1: Unused import
[error] GET /document/:id my.app.controllers.MyController.getById(id: Int)
Run Code Online (Sandbox Code Playgroud)
其他路线也一样.
有可能告诉scalac忽略文件吗?
Scala版本是2.11.8.
我正在使用Play构建一个Java Web应用程序!框架.我在playapps.net上托管它.在提供的内存消耗图表上,我一直困惑不已.这是一个示例:

该图表来自一致但名义上的活动期.我没有做任何事情来触发内存的衰减,所以我认为这是因为垃圾收集器运行,因为它几乎达到了允许的内存消耗.
我的问题:
System.gc(),范围从中性("它只是运行GC的请求,所以JVM可能只是忽略你")完全反对("依赖的代码System.gc()从根本上被打破") .或者我不在这里,我应该在我自己的代码中寻找导致此行为和间歇性性能损失的缺陷? 更新
我已经在PlayApps.net上开启了一个关于这个问题的讨论,并在这里提到了一些观点; 特别是@Affe关于完整GC设置非常保守的评论,以及@ G_H关于初始和最大堆大小设置的评论.
这是讨论的链接,但遗憾的是您需要一个playapps帐户才能查看.
当我得到它时,我会在这里报告反馈; 非常感谢大家的回答,我已经从中学到了很多东西!
解决方案
Playapps支持,这仍然很好,对我没有很多建议,他们唯一的想法是,如果我广泛使用缓存,这可能会使对象保持活动的时间超过需要,但事实并非如此.我还是学到了很多东西(呜呜!),我给了@Ryan Amos绿色支票,因为我提出了他System.gc()每半天打电话的建议,现在工作正常.
该游戏框架提供了以下简要概述,但与Groovy的模板引擎(您可以在Spring MVC,如果你想获得)外,春天似乎提供了所有相同的功能和更多...
修复错误并点击重新加载!编辑Java文件,保存,刷新浏览器并立即查看结果!无需编译,部署或重新启动服务器.Spring会这样做,这会让人讨厌.
无状态模型 Play是一个真正的"无分享"系统.准备好REST,可以通过在多个服务器上运行同一应用程序的多个实例来轻松扩展.典型的Spring应用程序具有无状态应用程序层; 它不是纯粹的RESTful,除非你想成为,但是Spring已经"准备好了REST".
高效模板系统基于Groovy作为表达式语言的干净模板系统.它提供模板继承,包含和标签.Spring使用Java,但Groovy也是一个选项.
快速解决错误发生错误时,播放会显示源代码和包含问题的确切行.甚至在模板中.Spring也是如此.
创建一个很酷的Web应用程序所需的一切提供与Hibernate,OpenID,Memcached ......以及插件系统的集成.Spring集成了一切甚至更多.
使用Java的纯Java代码,使用任何Java库并使用您首选的IDE进行开发.与eclipse或netbeans很好地集成.Spring也是纯Java.
真快速启动速度快,运行速度快!主观,但春天很快.
那么Play Framework实际上与Spring MVC有什么不同呢?
简而言之,Spring可以做什么Play框架不能(反之亦然)?
如何将Play JSON库(play.api.libs.json)添加到我的sbt项目中?
当我将以下内容添加到我的plugins.sbt文件中时:
addSbtPlugin("play" % "sbt-plugin" % "2.1.0")
Run Code Online (Sandbox Code Playgroud)
我遇到了这个错误:
[warn] ::::::::::::::::::::::::::::::::::::::::::::::
[warn] :: UNRESOLVED DEPENDENCIES ::
[warn] ::::::::::::::::::::::::::::::::::::::::::::::
[warn] :: play#sbt-plugin;2.1.0: not found
[warn] ::::::::::::::::::::::::::::::::::::::::::::::
Run Code Online (Sandbox Code Playgroud)
我没有找到这个库的解析器,否则我会添加它并运行sbt update.请注意,我resolvers包括http://repo.typesafe.com/typesafe/releases/.
我需要以最少的仪式获得一个简单的JSON序列化解决方案.所以我很高兴找到即将推出的Play 2.2库.这与普通案例类完美匹配,例如
import play.api.libs.json._
sealed trait Foo
case class Bar(i: Int) extends Foo
case class Baz(f: Float) extends Foo
implicit val barFmt = Json.format[Bar]
implicit val bazFmt = Json.format[Baz]
Run Code Online (Sandbox Code Playgroud)
但是以下失败了:
implicit val fooFmt = Json.format[Foo] // "No unapply function found"
Run Code Online (Sandbox Code Playgroud)
我如何设置所谓的缺失提取器Foo?
或者你会推荐任何其他独立的库,或多或少全自动处理我的情况?我不关心是在编译时使用宏还是在运行时使用反射,只要它开箱即用即可.
我是Play框架的新手并尝试在我的本地机器中模仿helloworld示例,但是我遇到了一个错误:

路线:
# Home page
GET / controllers.Application.index
# Hello action
GET /hello controllers.Application.sayHello
# Map static resources from the /public folder to the /assets URL path
GET /assets/*file controllers.Assets.versioned(path="/public", file: Asset)
Run Code Online (Sandbox Code Playgroud)
控制器:
package controllers
import play.api.mvc._
import play.api.data._
import play.api.data.Forms._
import views._
class Application extends Controller {
val helloForm = Form(
tuple(
"name" -> nonEmptyText,
"repeat" -> number(min = 1, max = 100),
"color" -> optional(text)
)
)
def index = Action {
Ok(html.index(helloForm))
}
def sayHello …Run Code Online (Sandbox Code Playgroud) playframework ×10
scala ×4
java ×3
sbt ×2
anorm ×1
coffeescript ×1
forms ×1
jpa ×1
json ×1
memory ×1
mongodb ×1
node.js ×1
persistence ×1
scalac ×1
spring-mvc ×1