Tag: playframework

我可以从任意异步任务访问Http.Context.current()吗?

我正在为移动应用程序的后端工作,该应用程序目前正在Play 2.1.1上运行。 作为处理某些请求的一部分,我们发送推送通知。 发送推送通知的下游请求应完全异步,并与移动客户端的始发请求 – 响应分离。 我想在发送下游请求时访问Http.Context.current()以访问我们在请求标头中传递的一些跟踪信息。 最初,代码看起来像这样,遵循Play中的建议! 文件 : PushNotificationRunnable sendNotificationTask = new … Akka.system().scheduler().scheduleOnce(Duration.apply(0, TimeUnit.MICROSECONDS), sendNotificationTask, Akka.system().dispatcher()); 探索play.libs.Akka帮助器引导我进入future方法,该方法采用可调用方式并返回Promise。 这个承诺允许我链接更多的代码。 在这里,我已经链接了一个Callback ,它可以访问Http.Context.current(),这要归功于Play的PromiseActor类中的设置代码。 这允许我在任务完成时记录一行,包括跟踪ID,但在任务期间我的日志行仍然无法访问跟踪信息。 PushNotificationCallable sendNotificationTask = new … Akka.future(sendNotificationTask).onRedeem(new F.Callback() { @Override public void invoke(Void aVoid) throws Throwable { Logger.info(“Completed sendNotificationTask from the service”); } }); 以下是一些缩写的应用程序日志,用于显示我当前所处的位置以及缺少的内容,第5列中的跟踪ID: 2013-07-26 11:31:06,885 DEBUG play-akka.actor.default-dispatcher-10 -2454018518484259555 [application] : […]

Play Framework 2.1 Java / Eclipse:自动重新加载不起作用

问题/: 正在编译视图,但是如果不手动重新启动服务器,则在浏览器中进行刷新将不会显示更改。 对控制器的更改使用~run自动编译,但只有手动重启服务器才会更新服务器上的内容。 只有在手动重新启动服务器后才会显示对conf下routes更改。 背景: 在OSX 10.8.3上运行 使用Eclipse Juno 4.2.2 使用play ~run启动服务器 仅重新启动服务器将显示视图,控制器,路由的更改 为了能够在每次尝试时不必重新启动服务器而进行更改(没有成功): 在控制台中: clean – > eclipse – > ~run 在控制台中: clean – > compile – > ~run 关机/重启电脑 Refresh using native hooks or polling勾选Refresh using native hooks or polling – >从Referenced Libraries删除classes_managed并手动添加它 问题: 如何恢复自动重新加载function? 除了Eclipse之外,如何在IDE上解决这个问题? 更多的信息: Playframework重新加载Mac OSX不起作用 使用Play框架在网络文件系统上自动重新加载 它们都指向JNotify作为自动重新加载不起作用的原因。 其中一个答案(没有足够的代表撰写评论)提到了如何“破解Play框架的sbt插件以使PlayReloader特性表现得好像JNotify不可用”。 怎么能实现这个目标?

使用Java Play Framework 2.3.x在控制器中unit testing文件上载

在大部分时间工作后,我觉得我非常接近如何测试接受来自JUnit的文件上传的控制器方法的解决方案。 我的juint测试代码如下: Map postData = makePostMap(uploadForm); File file = new File(“test/resources/shared/uploads/blank.csv”); TemporaryFile temporaryFile = new TemporaryFile(file); MultipartFormData.FilePart filePath = new MultipartFormData.FilePart( “file”, “file.csv”, new scala.Some(“text/csv”), temporaryFile); List fileParts = Lists.newArrayList(filePath); scala.collection.immutable.Seq files = JavaConversions.asScalaBuffer(fileParts).toList(); Map<String, scala.collection.immutable.Seq> postData2 = new HashMap(); for (String s : postData.keySet()) { postData2.put(s, JavaConversions.asScalaBuffer(Lists.newArrayList(postData.get(s))).toList()); } scala.collection.immutable.Map<String, scala.collection.immutable.Seq> scalaMap = JavaConversions.mapAsScalaMap(postData2).toMap(Predef.<Tuple2<String, scala.collection.immutable.Seq>>conforms()); […]

播放测试对象Yaml的框架图像BLOB文件

如何使用yaml结构设置Test Blob Image? 另外,BLOB文件的数据库结构是什么? (MySQL的)

播放持有http线程的延续

我们在我们的网络应用程序中实现了一项function,通过使用Play的延续来更新GUI以响应服务器中的新事件,就像聊天应用程序一样。 在生产中运行一段时间之后,我们开始体验服务器挂起,更具体地说,我们的Glassfish服务器的http连接器停止接受新请求。 线程转储向我们显示来自http线程池的所有http线程都在等待调用Play Promises。 我们的线程池有5个线程(默认编号),这意味着有5个客户端等待通知,并且服务器无法接受更多的http连接,除非某些实际客户端关闭其连接。 根据Play的文档关于继续/请求暂停,当通过调用await()暂停请求时,应该释放请求的线程。 这不是这里发生的事情。 参考: http : //www.playframework.org/documentation/1.2.3/asynchronous 我对Play的源代码做了一些研究,找不到任何提示。 我的代码似乎还可以,但我不确定(见下文)。 我希望有人可能会指出我可能做错了什么。 版本: Play 1.2.3 Glassfish 3.1.1 源代码: public class Sessions extends Controller { public static void waitFor(Query query, long lastSessionId, List openSessionIds) { String clientId = request.remoteAddress; List sessions = query .with(new UpdatedSessions(lastSessionId, openSessionIds)) .execute(); Logger.info(“%s -> Updated sessions since %s + […]

如何更改Play Framework 2“测试”设置以显示完整的堆栈跟踪?

我在Play框架中使用Java,并且我在通过IDE(IntelliJ)运行时通过了一些测试(function测试),但是当我通过控制台运行测试时失败了。 我的问题是测试日志中显示的堆栈跟踪只有2行,我需要完整的堆栈跟踪来查看那里发生了什么,我尝试了这里提到的任何设置组合: spec2设置都通过放置它们在build.sbt或在命令行中提供它们。 似乎没有效果! 这是我的build.sbt : version := “1.0-SNAPSHOT” libraryDependencies ++= Seq( javaJdbc, javaEbean, cache, filters ) logBuffered in Test := false testOptions += Tests.Argument(TestFrameworks.JUnit, “-v”) testOptions += Tests.Argument(“fullStackTrace”,”true”) traceLevel := 50 有谁可以帮助我吗? 我正在使用Typesafe激活器(播放2.2.2)。 谢谢

使用playframework实现购物车的建议

我正在学习使用playframework编写代码来实现一个webstore来销售items.I已经使用crud和secure模块实现了Admin区域。现在,我想创建一个shopping cart ,用户可以添加项目并继续结账。 我对电子商务的了解很少,但我已经阅读了一些教科书,这些教科书使用servlets实现购物车和一些网店function。在书中,购物车用于保存一Set CartItem ,每个包含Product的实例和用户将商品添加到购物车后,购物车存储在user session 。 因此,只要用户进入购物车详细信息页面,它就会显示所有添加的项目。只有当会话被清除时(由于服务器中定义的会话超时或订单下达时), CartItem被删除来自ShoppingCart 。 我想,我可以在playframework中使用Cache来完成上述操作。将一个CartItem添加到ShoppingCart实例后。我可以 shopcart.add(mycartItem); Cache.set(session.getId(), shopcart); .. 然后,在另一个页面中,我可以检索购物车及其内容,处理它们并清理购物车。 ShopCart cart = Cache.get(session.getId(),ShopCart.class); Set items = cart.getCartItems(); processOrder(items,userinfo); … cart.clearItems(); 这是正确的方法吗?如果我的想法不正确,请帮我提出建议。

如何使用@OneToMany集合进行分页

假设我有一个Post实体和一个Comment实体以及一对多的关系: @Entity class Post { … @OneToMany List comments; … } 我怎样才能实现这样的分页: Post post = //Find the post. return post.getComments().fetch(100, 10); // Find the 11th page (page size 10); 是否可以在JPA之上使用@OneToMany集合模拟动态分页,还是我们必须完全重写JPA的关联机制? (例如,创建一个可以管理分页,排序和搜索的PersistentList集合类型)。 PS:我最近发现了Play! 框架在JPA:Siena之上使用了一个非常有趣的库。 Siena非常易于使用,并且在JPA / Hibernate之上是一个很好的抽象。 但我找不到如何使用其关联进行分页。 更新: Play框架具有类似于Django的查询语法: Post.findAll().from(100).fetch(10); // paging 哪里 Post.findAll() 将返回一个JPAQuery对象,一个Play中的自定义查询类型。 但是有关联的集合,例如: Post.comments 将只返回一个List,它不支持分页或其他查询。 我想知道如何扩展它,所以 Post.comments 还将返回一个JPAQuery对象或类似的东西,然后你可以查询“查询”集合: Post.comments.from(100).fetch(10); 或插入新的评论而不实际获取任何评论: Post.comments.add(new Comment(…)); […]

如何在Play中将复选框绑定到布尔值! 骨架

我正在使用Play的应用程序! Framework有一个名为gift的对象,它带有一个名为Taken的布尔属性。 如何在我的视图中将此值的状态显示为复选框? 我试过了 :- 基于我从自动生成的CRUD表单中看到的示例,但是当属性为True时不检查复选框,这正是我的目标。 有人知道实现这个目的的正确方法吗?

如何用JavavalidationInstagram的实时API x-hub-signature?

我正在使用Play框架为Instagram实时API开发消费者。 但仍然无法正确执行x-hub-signaturevalidation。 那么,我们如何使用Java和Play框架执行Instagram x-hub-signaturevalidation呢? 这是我目前的代码: 在Play框架中,我使用此方法获取JSON有效内容: public static Result receiveInstaData(){ JsonNode json = request().body().asJson(); //obtain the x-hub-signature from the header //obtain the corresponding client secret VerificationResult verificationResult = SubscriptionUtil.verifySubscriptionPostSignature( clientSecret, json.toString(), xHubSignature); if(verificationResult.isSuccess()){ //do something } } 然后在SubscriptionUtil ,我使用以下代码执行validation: public static VerificationResult verifySubscriptionPostSignature(String clientSecret, String rawJsonData, String xHubSignature) { SecretKeySpec keySpec; keySpec = new SecretKeySpec(clientSecret.getBytes(“UTF-8”), […]