Tag: playframework 2.0

Play / Akka与Java OutputStreams集成

我在写一个游戏! 暴露REST API的应用程序,允许用户生成PDF报告。 我受到使用旧Java API进行实际报告生成的要求的限制。 该库有一个方法generate(OutputStream out, …) ,即它需要一个java.io.OutputStream来编写生成的报告。 我的问题是将它与Play / Akka集成以提供Chunked Encoding中的内容。 为此,我需要创建一个Enumerator[Array[Byte]] ,它以某种方式包含Java库中的OutputStream 。 我提出了一个使用PipedOutputSteam / PipedInputStream二人组的工作解决方案,使用Enumerator.fromStream将库的输出传递给Enumerator.fromStream 。 我想知道是否有更好的方法来实现这一点,但我似乎无法在Akka或Play中找到一个明确的例子! 将枚举器与OutputStream集成的文档。 我知道Java库的阻塞IO是设计更好的解决方案的限制因素,但也许有一种更简洁的方法来做到这一点。 有什么想法吗? 跟进 假设我使用Enumerator.outputStream ,那么将实际报告生成移动到另一个actor(可能在另一台机器上)的安全方法是什么? 例如,我猜测发送OutputStream是不安全的(并且只能在本地工作)。

在后续Java调用Play 2.0的fakeRequest中保持会话

我正在寻找一种在我的Java测试中使用Play 2.0的fakeRequest时保留会话的方法,但是在基于Scala的JAR中调用方法时我的尝试失败了。 基于Scala问题中提到的拉取请求, 在测试期间向会话添加值(FakeRequest,FakeApplication) ,我认为以下内容可能适用于Java: public Session getSession(Result result) { play.api.mvc.Cookies scalaCookies = play.api.test.Helpers.cookies(result.getWrappedResult()); play.api.mvc.Cookie scalaSessionCookie = scalaCookies.get(play.api.mvc.Session.COOKIE_NAME()).get(); scala.Option optionalCookie = scala.Option.apply(scalaSessionCookie); // Compiles fine, but fails with NoSuchMethodError: play.api.mvc.Session scalaSession = play.api.mvc.Session.decodeFromCookie(optionalCookie); return new play.mvc.Http.Session(Scala.asJava(scalaSession.data())); } 这编译得很好,但在运行测试时它让我: java.lang.NoSuchMethodError: play.api.mvc.Session.decodeFromCookie(Lscala/Option;)Lplay/api/mvc/Session; 作为Scala newby,我真的不知道我是否接近。 我认为 ,Scala会话确实通过CookieBaker公开(特征)该方法 。 请注意,我不一定要找到一种方法来运行上面的代码; 以上只是获得会议的第一步(可能)。 接下来我可能会尝试使用类似play.api.mvc.Session.encodeAsCookie(session)类的东西将它传递给后续请求。 喜欢ZenTasks演示 : @Test public void testLoginAndMore() { […]

Java / Scala Future由回调驱动

精简版: 如何创建在回调触发器上完成的Promise ? 长版: 我正在开发一个处理第三方SOAP服务的应用程序。 用户的请求同时委托多个SOAP服务,聚合结果并发送回用户。 系统需要是可扩展的,并且应该允许多个并发用户。 当每个用户请求最终触发大约10个Web服务调用并且每个呼叫阻塞大约1秒时,系统需要设计为具有非阻塞I / O. 我在Play Framework(Java)中使用Apache CXF用于此系统。 我已设法生成异步WS客户端代理并启用异步传输。 我无法弄清楚当我委托多个Web服务代理时如何将Future转换为Play的线程,结果将作为回调获得。 选项1:使用返回Java Future的异步方法调用。 正如java.util.concurrent.Future线程的scala.concurrent.Future包装器中所描述的那样,我们无法将Java Future转换为Scala Future。 从Future获得结果的唯一方法是执行阻止调用者的Future.get() 。 由于CXF生成的代理返回Java Future,因此排除了此选项。 选项2:使用Scala Future。 由于CXF生成代理接口,我不确定是否有任何方式可以干预并返回Scala Future(AFAIK Akka使用Scala Futures)而不是Java Future? 选项3:使用回调方法。 由CXF生成的返回Java Future的异步方法也需要一个回调对象,我想这将在结果准备好时提供回调。 要使用这种方法,我需要返回一个等待我收到回调的Future。 我认为选项3最有希望,虽然我对如何返回一个将在收到回调时完成的Promise没有任何想法。 我可能有一个线程等待一段while(true)并等待,直到结果可用。 再一次,我不知道如何在不阻塞线程的情况下进入wait ? 简而言之,我正在尝试构建一个系统,该系统正在进行大量的SOAP Web服务调用,其中每个调用都会占用大量时间。 在大量并发Web服务调用的情况下,系统可能很容易耗尽线程。 我正在寻找一种基于非阻塞I / O的解决方案,它可以同时允许许多正在进行的Web服务调用。

Play Framework Routes无效

我只是想跟随Play框架的ZenTasks教程( http://www.playframework.com/documentation/2.1.0/JavaGuide4 )。 我似乎无法让登录页面工作。 我正在使用play ~run命令运行这个项目。 导航到http://localhost:9000/login出错 Action not found For request ‘GET /login’ These routes have been tried, in this order: 1 GET/controllers.Application.index() 2 GET/assets/$filecontrollers.Assets.at(path:String = “/public”, file:String)` 我的路线文件看起来像 # Routes # This file defines all application routes (Higher priority routes first) # ~~~~ # Home page GET / controllers.Application.index() # User athentication GET […]

如何在Playframework2中的i18n中使用单引号?

在使用法语应用程序(法语充满单引号)时,我需要使用单引号和许多其他强调字符的i18n。 所以这里是我的messages.fr-FR文件的摘录: some.key=C’est la vie! 这是输出: Cest la vie! 如何在邮件中使用包含单引号的字符串? 已经尝试过那些: some.key=C\’est la vie! –> C\est la vie! some.key=”C’est la vie!” –> “Cest la vie!” 编辑 :感谢KDavid提供的链接,我能够找到解决方案。 你必须加倍单引号。 C”est la vie! –> C’est la vie!

如何在Ebean中对相关实体进行排序?

我正在使用Play Framework和Ebean ORM。 说,我有2个相关的实体类(Card.java和FinalMark.java) Card.java @Entity public class Card extends Model { private static final long serialVersionUID = 1L; @Id . . . @OneToMany(mappedBy = “card”) public List finalMarks; . . . public static Finder find = new Finder(Integer.class, Card.class); } FinalMark.java @Entity public class FinalMark extends Model { private static final long serialVersionUID = […]

玩! 框架 – 处理POST请求

这是处理登录POST请求的路由: POST /login/submit controllers.Users.loginSubmit(user : String, password : String) 这是login.scala.html: 我有两个问题: 什么应该是行动的价值? 是“登录/提交”? 如何传递此表单以在loginSubmit函数中处理? 谢谢

播放2.0 / 2.1 for Java和dependency injection

我们有一个新的Play 2.0项目,我们计划在添加一些复杂的第三方集成代码时引入DI。 有一个适用于Play 2.0的Guice插件,但看起来它在2.1时已经过时了,我有一种预感2.1不再那么远了。 https://github.com/typesafehub/play-plugins/tree/master/guice Guice是Play 2.0 / 2.1的安全赌注,还是我们应该考虑其他选择?

播放框架会话和cookie如何工作?

游戏如何validationcookie? 我注意到,在我重新启动服务器后,我仍然登录,即使我没有在数据库中预先存在任何会话数据。 我还注意到我可以将服务器上的日期设置为大于cookie的exipry日期,但我仍然登录了。 我注销了(将cookie保存到文本文件中),浏览器丢失了cookie。 然后我从文本文件中重新创建了cookie,然后我再次登录。 cookie看起来像这样: PLAY_SESSION = e6443c88da7xxxxxxxxxxxxxxxxxxxxxxxxxxxxx-的userid%3A1 // My logout code def logout() = Action { Ok(“”).withNewSession } 从文档中 丢弃整个会话 有特殊操作丢弃整个会话: Ok(“Bye”).withNewSession

无法在Play 2中使用多个ebean数据库

我们正在使用Play Framework 2.0.3建立一个稍微复杂的项目。 我们需要访问几个数据库(预先存在),并希望使用框架内置工具(即EBean)来实现。 我们尝试在“models”包中创建所有模型类,然后将每个类的FQN映射到application.conf中相应的EBean属性: ebean.firstDB=”models.ClassA,models.ClassB,models.ClassC” ebean.secondDB=”models.ClassD” ebean.thirdDB=”models.ClassE,models.ClassF” 这似乎不起作用: PersistenceException: Error with [models.SomeClass] It has not been enhanced but it’s superClass [class play.db.ebean.Model] is? (You are not allowed to mix enhancement in a single inheritance hierarchy) marker[play.db.ebean.Model] className[models.SomeClass] 我们检查并重新检查,配置正常! 然后,我们尝试为每个数据库模型类使用不同的Java包,并在application.conf中相应地映射它们: ebean.firstDB = “packageA.*” ebean.secondDB = “packageB.*” ebean.thirdDB = “packageC.*” 这在从数据库中读取信息时工作正常,但是当您尝试保存/更新对象时,我们得到: PersistenceException: The default EbeanServer has […]