Tag: playframework

有没有办法编译隐藏源代码?

使用Play或Grails或任何其他JVM框架; 有没有办法(或者是什么方式)完全编译生成的war / jar文件,以便隐藏源代码,而不可能反编译? 或者甚至在编译之后,是否可以轻松地反编译并获取字符串和类? 例如db connection等。 谢谢。

发生了OutOfMemoryError:Play框架中的Java堆空间

我正在用java创建基于游戏的Web应用程序。 当我运行它时出现错误,出现以下错误: Execution exception (In /app/controllers/Application.java around line 12) OutOfMemoryError occured : Java heap space play.exceptions.JavaExecutionException: Java heap space at play.mvc.ActionInvoker.invoke(ActionInvoker.java:227) at Invocation.HTTP Request(Play!) Caused by: java.lang.OutOfMemoryError: Java heap space at java.util.Arrays.copyOfRange(Arrays.java:3209) at java.lang.String.(String.java:215) at java.lang.StringBuffer.toString(StringBuffer.java:585) at java.io.StringWriter.toString(StringWriter.java:193) at play.templates.GroovyTemplate.internalRender(GroovyTemplate.java:248) at play.templates.Template.render(Template.java:26) at play.mvc.results.RenderTemplate.(RenderTemplate.java:24) at play.mvc.Controller.renderTemplate(Controller.java:657) at play.mvc.Controller.renderTemplate(Controller.java:637) at play.mvc.Controller.render(Controller.java:692) at controllers.Application.index(Application.java:12) at play.mvc.ActionInvoker.invokeWithContinuation(ActionInvoker.java:540) at […]

通过Play Controller-Action中的#flatMap()链接Promise

我想问一下我的工作是否合适,或者是否有更好/更有效/更简单的方法。 场景: 用户使用电子邮件地址和密码登录,将路由到login() – 操作 如果用户已在数据库中并且密码已经过哈希处理,请使用DB-user进行身份validation并返回结果承诺 如果用户不在数据库中或没有密码哈希,请使用login-data执行Web服务请求并从响应中解析状态 – >返回Status -instance 检查用户的状态并返回结果承诺 码: public Promise login() { Promise userPromise = Promise.promise(() -> User.findByName(login.emailAddress)); return userPromise.flatMap(user -> { if (user != null && user.hasPassword()) { if (user.authenticate(login.password)) { return Promise.pure(ok(“login successful”))); } // password did not match return Promise.pure(unauthorized()); } // user has no password-hash stored, so […]

非常慢的播放框架2.3请求处理代码

我面临的方法表现极慢: HttpRequestDecoder.unfoldAndFireMessageReceived() 和 Future$PromiseCompletingRunnable.run() 这两种方法使用服务器中每个事务的大约一半时间。 它发生在低营养和高使用时间。 例如,凌晨1点,只有我对应用程序的请求,我得到了新的遗物图形,如下所示: 在这个事务中,只有这两个方法消耗1秒,甚至更慢,通过hibernate访问数据库! 再一次,应用程序中只有一个用户。 如果交易较重,则需要更多时间: 在这种情况下,当我自己的代码消耗1.5秒,总共4秒时,这两种方法平均消耗2.5秒。 我觉得那个时刻可能只是误导了新的遗物标准。 也许newrelic会显示这些方法名称,但它确实是我编写的代码。 所以我决定得到一个像这样的自定义指标: playController(){ //Start timer //do the job //stop the timer() and send metric to new relic //return; } 结果是我的代码耗时1.5秒。 所以这次是真正的游戏请求处理程序。 这种行为在高负荷时会杀死我的应用。 当throghput每分钟大约500个请求(实际上不是高吞吐量!)时,这两种方法可能消耗长达20秒,但我的代码保持稳定在最多3秒。 我真的不认为这是一个线程问题,因为它甚至在有一个用户的时候就会发生,但是当有很多并发请求时它会变得很麻烦。 我尝试改变“同步应用程序”的线程数量,例如文档提及,但我没有得到任何性能改变,它甚至变得更糟。 我真的很担心这个问题,因为在两年多的游戏邮件列表中有类似的情况而没有答案!: http://grokbase.com/t/gg/play-framework/159bzf7r9p/help-to-understand-newrelic-report-for-slow-transactions-2-1-4 在StackOverflow中甚至有一个类似的问题,但对于没有回答且没有明显活动的游戏2.1: 使用Play Framework作为后端的NewRelic中的交易缓慢 什么可能导致这种行为的想法?

Play Framework 2.2.1 – 将非播放Java项目添加为子项目

我正在尝试将非播放Java项目添加为子项目。 主项目是Play Java Application,子项目与main-project位于同一目录中。 我按照这里给出的指示。 我的build.sbt看起来像 import play.Project._ name := “main-project” version := “1.0” libraryDependencies ++= Seq(javaJdbc, javaEbean) playJavaSettings lazy val mainProject = project.in(file(“.”)) .aggregate(subProject) .depends(subProject) lazy val subProject = project.in(file(“../sub-projects/sub-project-1”)) 这是我的目录结构 D: |– projects | |– main-project | |– sub-projects | | | |– sub-project-1 | | | |– sub-project-2 当我尝试编译主项目时,我收到以下错误。 [info] Loading project […]

渲染Play框架2.0模板的一部分

我正在尝试从控制器调用渲染中的标签(函数)而不是模板。 这样我可以使用它来从ajax调用中对页面进行部分渲染。 当然,我可以在几个模板中分离表单的组件,并在那些上调用渲染,但我认为它会更清洁。 我试图做的是如下: formpage.scala.htm @() … @content … @********************************** * Helper generating form * ***********************************@ @content() = { @Messages(“employees”) @form(routes.AppController.save()) { @inputText… … } 并使用ajax渲染内容函数,而不必将其分离到单独的文件中。 这样我就可以渲染模板的一部分而不会在多个文件中将其分段。

在Play中处理字段集! 框架2.3(Java)

我想弄清楚怎么玩! 处理使用多个具有相同名称的字段的表单。 例如,看一下这个表单片段: Select product… @for(product<-Product.findAll()) { @product.name } Member price Public price Add line… 我使用括号表示法,因为用户可以通过单击“添加行…”按钮添加任意数量的订单行。 单击按钮时,JavaScript函数克隆 并将其附加到下方。 基本上,提交的表单包含多个订单行。 现在我想要做的是收集控制器中的所有数据,但我无法弄清楚如何做到这一点。 有人建议我在控制器中做这样的事情: public static Result createOrder(String[] quantity, String[] productId, String[] price) { for(int i=0; i<quantity.length; i++){ … } for(int i=0; i<productId.length; i++){ … } for(int i=0; i<price.length; i++){ … } } 但问题是它需要我为Array[String]类型实现自定义隐式QueryStringBindable 。 对于这样一个基本function来说,这不是太多了吗? 所以我的问题是如何处理具有可变数量的具有相同名称的参数的表单? 比如,如何实现购物车,您可以在其中创建多个订单行(以完全随机的顺序),然​​后提交它们以创建订单? […]

安装play框架mongodb morphia模块

我正在使用具有mongodb作为后端的播放框架进行应用程序开发,我已经在我的ubuntu以及windows上成功安装了mongodb和playframework,但是如果我想使用mongodb我需要使用morphia模块的play框架,我已经下载了morphia模块并尝试安装,但它给我一个这样的错误, root@ubuntu:~/apps/tmp1# play install morphia [info] Loading project definition from /root/apps/tmp1/project [info] Set current project to tmp1 (in build file:/root/apps/tmp1/) [error] Not a valid command: install (similar: initialize, inspect, shell) [error] Not a valid project ID: install [error] Not a valid configuration: install (similar: optional) [error] Not a valid key: install (similar: initialize, dist, stage) […]

使用play-framework 2.5连接MySQL数据库

我正在尝试将MySQL数据库与Play-framework-Java 2.5.4 连接起来 。 我收到此错误 , either dataSource or dataSourceClassName is required 这些是我在App.conf文件中使用的连接代码, db { db.default.driver=com.mysql.jdbc.Driver db.default.url=”jdbc:mysql://localhost:3306/playdb” db.default.user=”root” db.default.password=”9413678957″ } 但它连接时给我以下错误: caused by: java.lang.IllegalArgumentException: either dataSource or dataSourceClassName is required at com.zaxxer.hikari.HikariConfig.validate(HikariConfig.java:785) at play.api.db.HikariCPConfig.toHikariConfig(HikariCPModule.scala:141) at play.api.db.HikariCPConnectionPool$$anonfun$1.apply(HikariCPModule.scala:57) at play.api.db.HikariCPConnectionPool$$anonfun$1.apply(HikariCPModule.scala:54) at scala.util.Try$.apply(Try.scala:192) at play.api.db.HikariCPConnectionPool.create(HikariCPModule.scala:54) at play.api.db.PooledDatabase.createDataSource(Databases.scala:199) at play.api.db.DefaultDatabase.dataSource$lzycompute(Databases.scala:123) at play.api.db.DefaultDatabase.dataSource(Databases.scala:121) at play.api.db.DefaultDatabase.getConnection(Databases.scala:142) 当我用相同的连接到mysql数据库时 (与在App.conf中相同) url(jdbc:mysql:// localhost:3306 / […]

将项目添加到购物车时,playframework中的function测试失败

我写了一个function测试来检查将商品添加到购物车。对于能够将商品添加到购物车的用户,他需要登录。所以,我创建了一个登录用户的方法和另一种添加商品的方法。之前在测试中的addtocart方法之后,我正在检查购物车内容的大小。当我在开发模式下运行应用程序时,addtocartfunction没有任何问题(我也可以检查数据库 – 这是postgres而不是内存数据库)。addtocart在测试中失败了。 将项目添加到购物车的控制器方法 public static void addItemToCart(Long productId,Long cartId,String quantity) { Product product = Product.findById(productId); ShopCart cart = ShopCart.findById(cartId); int qty = Integer.parseInt(quantity); CartItem cartItem = new CartItem(product,qty); cart.addItem(cartItem); cart.save(); System.out.println(“Controller::addItemToCart()::cart id=”+cart.id+” has=”+cart.cartItems.size()+” items); } 我的测试方法是 @Test public void testUserCanAddItemsToCart() { Fixtures.loadModels(“data.yml”); User user = User.find(“byEmail”,”user@shop.com”).first(); loginAsCustomer(“user@shop.com”,”userpass”); ShopCart usercart = new ShopCart(user); usercart.save(); System.out.println(“BEFORE […]