在Java Play 2.1.1应用程序中,我收到以下错误:
[myproject] $ update
[info] Updating {file:/C:/path/myproject/}myproject...
[info] Resolving ...
[error] impossible to get artifacts when data has not been loaded. IvyNode = com.google.guava#guava;12.0
[error] (*:update) java.lang.IllegalStateException: impossible to get artifacts when data has not been loaded. IvyNode = com.google.guava#guava;12.0
[error] Total time: 230 s, completed 17.05.2013 19:16:41
Run Code Online (Sandbox Code Playgroud)
Build.scala
"com.google.guava" % "guava" % "14.0.1",
"org.mydependency" % "mydependency" % "1.0-SNAPSHOT" changing() exclude("org.jboss.netty","netty") exclude("com.google.guava", "guava") exclude("log4j", "log4j"),
Run Code Online (Sandbox Code Playgroud)
导致此错误的事情(之前一切正常)是mydependency中的依赖项更改:
旧:
<dependency>
<groupId>com.thinkaurelius.titan</groupId>
<artifactId>titan-berkeleyje</artifactId>
<version>0.3.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
新:
<dependency>
<groupId>com.thinkaurelius.titan</groupId>
<artifactId>titan-cassandra</artifactId>
<version>0.3.1</version>
</dependency> …Run Code Online (Sandbox Code Playgroud) 当且仅当有空闲cpu时,如何扩展以使用更多线程?类似于ThreadPoolExecutor的东西,当cpu核心空闲时使用更多线程,如果没有则更少或仅使用一个线程.
当前情况:我的Java服务器应用程序处理请求并提供结果.有一个ThreadPoolExecutor按照以下原则为具有合理数量的最大线程的请求提供服务:cpu核心数=最大线程数.执行的工作很重,并且有一些磁盘IO(DB).代码是线性的,单线程的.单个请求需要50到500毫秒才能处理.有时每分钟只有几个请求,有时同时有30个请求.具有12个内核的现代服务器可以很好地处理负载.吞吐量很好,延迟还可以.
期望的改进:当请求数量较少时,大多数情况下都是如此,许多cpu核心处于空闲状态.在这种情况下,可以通过为单个请求多线程运行一些代码来改进延迟.一些原型设计显示了改进,但是一旦我测试了更多的并发请求,服务器就会变成香蕉.吞吐量下降,内存消耗过高.30个同时请求共享队列10意味着10个最多可以运行而20个正在等待,并且10个中的每一个一次最多使用8个线程用于并行,对于具有12个内核的机器来说似乎太多了(其中6是虚拟的).
在我看来,这似乎是一个常见的用例,但我无法通过搜索找到信息.
1)请求计数一个想法是计算当前处理的请求数.如果为1或低则执行更多并行操作,如果为高则不执行任何操作并继续执行单线程,如前所述.这听起来很简单.缺点是:请求计数器重置不能包含错误,最后想一想.它实际上并没有检查可用的cpu,也许另一个进程也使用cpu.在我的情况下,机器专用于这个应用程序,但仍然.
2)实际的cpu查询我认为正确的方法是只询问cpu,然后再决定.由于Java7有OperatingSystemMXBean.getSystemCpuLoad(),请参阅http://docs.oracle.com/javase/7/docs/jre/api/management/extension/com/sun/management/OperatingSystemMXBean.html#getSystemCpuLoad() 但我可以找不到任何提到getSystemCpuLoad和ThreadPoolExecutor的网页,或类似的关键字组合,这告诉我这不是一条好路.JavaDoc说"返回"整个系统最近的cpu使用情况",我想知道"最近的cpu使用情况"是什么意思,最近的情况以及调用的成本.
我暂时搁置了这个问题,看看是否会有更多的输入.不.虽然我不喜欢技术问题的"无能为力"的答案,但我现在接受霍尔格的回答.他有良好的声誉,良好的论据,其他人已经批准了他的答案.我自己曾经尝试过2个想法.我查询任务中的getSystemCpuLoad()来决定他们自己的ExecutorService有多大.正如Holger所写,当存在SINGLE ExecutorService时,可以很好地管理资源.但是一旦任务开始他们自己的任务,他们就不能 - 这对我来说没有用.
问题是:如何检索播放正在侦听的端口号,无论它是如何定义的(配置,命令行参数,或根本没有).
此答案使用Play Framework检索应用程序中的端口号必须是Play v1,因为该代码无法编译.
在Play 2 Java中有:
Integer port = Play.application().configuration().getInt("http.port");
Run Code Online (Sandbox Code Playgroud)
这不会返回实际的端口号,至少在所有情况下都不会.如果Play运行如下:
run 80 -Dhttp.address=example.com
Run Code Online (Sandbox Code Playgroud)
然后它返回null.
如果Play运行为
run -Dhttp.port 80 -Dhttp.address=example.com
Run Code Online (Sandbox Code Playgroud)
然后在默认端口(9000)上开始播放.
正如biesior指出的那样,两次提到港口是有效的:
play -Dhttp.port=80 "run 80"
Run Code Online (Sandbox Code Playgroud)
这当然不是最佳的,因为一个是Play实际使用的,另一个是它报告的内容.
但它会回答我关于开发模式的问题.但是,正如文档所说,Play永远不应该使用runprod 运行.那么start命令的等价物是什么,没有更好,更安全的方法吗?(我对Java版本很感兴趣,但其他人也可能想了解Scala.)
我的JSON数据进来了 request().body().asFormUrlEncoded().get("records")
[{"string":"foo","termId":"793340"},{"string":"bar","termId":"460288"}]
Run Code Online (Sandbox Code Playgroud)
我的表单定义:
public static class MyForm {
@Constraints.Required
public List<Map<String,String>> records;
public String someField;
}
Run Code Online (Sandbox Code Playgroud)
它不会records自动绑定.然后我尝试使用POJO:
public static class Record {
public String string;
public String termId;
public void setString(String string) {
this.string = string;
}
public void setTermId(String termId) {
this.termId = termId;
}
}
Run Code Online (Sandbox Code Playgroud)
并改编形式:
public static class MyForm {
@Constraints.Required
public List<Record> records;
public String someField;
}
Run Code Online (Sandbox Code Playgroud)
它也不会自动绑定数据.对于这个简单的用例,我真的需要使用像jackson这样的低级API吗?任何指针?找不到复制/粘贴例子,从杰克逊我org.codehaus.jackson和com.fasterxml.jackson我的类路径.
更新2013-05-10:添加了一个辅助字段,someField以澄清这records只是一个字段,而不是整个数据结构.下面的答案(我在这个编辑屏幕上看不到答案,所以没关系,只有一个)有效,但只有记录.这是一个例子:
private List<Record> recordsFromRequest() {
String[] jsonData …Run Code Online (Sandbox Code Playgroud) 问题:drop keyspace MyKeyspace;挂起.
环境: 这是一个虚拟机中的Ubuntu 12.04 64位,运行单个Cassandra实例(在开发机器上).
卡桑德拉是1.1.6:
myuser@myhost:~$ /usr/bin/nodetool -h localhost version
ReleaseVersion: 1.1.6
Run Code Online (Sandbox Code Playgroud)
大量可用磁盘空间:
myuser@myhost:~$ df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/myhost-root 100232772 3100308 92112816 4% /
udev 1016760 4 1016756 1% /dev
tmpfs 410340 268 410072 1% /run
none 5120 0 5120 0% /run/lock
none 1025844 0 1025844 0% /run/shm
/dev/sda1 233191 24999 195751 12% /boot
Run Code Online (Sandbox Code Playgroud)
机器闲置:
myuser@myhost:~$ uptime
21:24:50 up 3:46, 2 users, load average: 0.06, 0.04, 0.05
Run Code Online (Sandbox Code Playgroud)
我是怎么到达那里的:
机器正在运行另一个数据库,很长时间都没问题.现在我创建了一个新的密钥空间MyKeyspace,并运行一个Java程序来导入数据(使用titan图,但这无关紧要).导入了几千条记录(仅几个MB)后,导入程序不再进展,并记录了6次:
418455 [RetryService …Run Code Online (Sandbox Code Playgroud) 在Windows 7崩溃后,我的Play框架项目似乎被打破了.
我的版本:
play --version
sbt launcher version 0.12.2
Run Code Online (Sandbox Code Playgroud)
在我的项目文件夹中运行任何播放命令会出现此错误:
C:\dev\myproject>play clean
[info] Loading project definition from C:\dev\myproject\project
Error wrapping InputStream in GZIPInputStream: java.util.zip.ZipException: Not in GZIP format
at sbt.ErrorHandling$.translate(ErrorHandling.scala:13)
at sbt.WrapUsing.open(Using.scala:36)
at sbt.Using.apply(Using.scala:24)
at sbt.IO$$anonfun$gzipFileIn$1.apply(IO.scala:704)
at sbt.IO$$anonfun$gzipFileIn$1.apply(IO.scala:703)
at sbt.Using.apply(Using.scala:25)
at sbt.IO$.gzipFileIn(IO.scala:703)
at sbt.Sync$.readUncaught(Sync.scala:88)
at sbt.Sync$.readInfo(Sync.scala:84)
at sbt.Sync$$anonfun$apply$1.apply(Sync.scala:29)
at sbt.Sync$$anonfun$apply$1.apply(Sync.scala:23)
at sbt.Defaults$$anonfun$copyResourcesTask$1.apply(Defaults.scala:621)
at sbt.Defaults$$anonfun$copyResourcesTask$1.apply(Defaults.scala:617)
at sbt.Scoped$$anonfun$hf5$1.apply(Structure.scala:581)
at sbt.Scoped$$anonfun$hf5$1.apply(Structure.scala:581)
at scala.Function1$$anonfun$compose$1.apply(Function1.scala:49)
at sbt.Scoped$Reduced$$anonfun$combine$1$$anonfun$apply$12.apply(Structure.scala:311)
at sbt.Scoped$Reduced$$anonfun$combine$1$$anonfun$apply$12.apply(Structure.scala:311)
at sbt.$tilde$greater$$anonfun$$u2219$1.apply(TypeFunctions.scala:41)
at sbt.std.Transform$$anon$5.work(System.scala:71)
at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:232)
at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:232)
at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:18)
at sbt.Execute.work(Execute.scala:238)
at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:232)
at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:232) …Run Code Online (Sandbox Code Playgroud)