小编Gon*_*hal的帖子

IllegalStateException:没有为Guava 12.0加载数据时无法获取工件?

在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)

ivy sbt playframework-2.1

32
推荐指数
2
解决办法
1万
查看次数

基于可用的免费cpu的Java并发

当且仅当有空闲cpu时,如何扩展以使用更多线程?类似于ThreadPoolExecutor的东西,当cpu核心空闲时使用更多线程,如果没有则更少或仅使用一个线程.

使用案例

当前情况:我的Java服务器应用程序处理请求并提供结果.有一个ThreadPoolExecutor按照以下原则为具有合理数量的最大线程的请求提供服务:cpu核心数=最大线程数.执行的工作很重,并且有一些磁盘IO(DB).代码是线性的,单线程的.单个请求需要50到500毫秒才能处理.有时每分钟只有几个请求,有时同时有30个请求.具有12个内核的现代服务器可以很好地处理负载.吞吐量很好,延迟还可以.

期望的改进:当请求数量较少时,大多数情况下都是如此,许多cpu核心处于空闲状态.在这种情况下,可以通过为单个请求多线程运行一些代码来改进延迟.一些原型设计显示了改进,但是一旦我测试了更多的并发请求,服务器就会变成香蕉.吞吐量下降,内存消耗过高.30个同时请求共享队列10意味着10个最多可以运行而20个正在等待,并且10个中的每一个一次最多使用8个线程用于并行,对于具有12个内核的机器来说似乎太多了(其中6是虚拟的).

在我看来,这似乎是一个常见的用例,但我无法通过搜索找到信息.

IDEAS

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使用情况"是什么意思,最近的情况以及调用的成本.

UPDATE

我暂时搁置了这个问题,看看是否会有更多的输入.不.虽然我不喜欢技术问题的"无能为力"的答案,但我现在接受霍尔格的回答.他有良好的声誉,良好的论据,其他人已经批准了他的答案.我自己曾经尝试过2个想法.我查询任务中的getSystemCpuLoad()来决定他们自己的ExecutorService有多大.正如Holger所写,当存在SINGLE ExecutorService时,可以很好地管理资源.但是一旦任务开始他们自己的任务,他们就不能 - 这对我来说没有用.

java concurrency performance multithreading

9
推荐指数
1
解决办法
272
查看次数

在Play Framework 2应用程序中检索端口号

问题是:如何检索播放正在侦听的端口号,无论它是如何定义的(配置,命令行参数,或根本没有).

此答案使用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.)

playframework-2.0

7
推荐指数
1
解决办法
3023
查看次数

自动绑定复杂(JSON)表单数据

我的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.jacksoncom.fasterxml.jackson我的类路径.

更新2013-05-10:添加了一个辅助字段,someField以澄清这records只是一个字段,而不是整个数据结构.下面的答案(我在这个编辑屏幕上看不到答案,所以没关系,只有一个)有效,但只有记录.这是一个例子:

private List<Record> recordsFromRequest() {
    String[] jsonData …
Run Code Online (Sandbox Code Playgroud)

java json playframework-2.1

6
推荐指数
1
解决办法
4117
查看次数

删除键空间挂起

问题: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)

cassandra

3
推荐指数
1
解决办法
2409
查看次数

Play Framework命令使用ZipException中止

在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)

playframework-2.0

3
推荐指数
1
解决办法
2197
查看次数