我正在创建一个 Maven arechtype,它生成一个带有 java 类的项目。
\n\n原型有一些自定义属性(archetype-metadata.xml 中的 requiredProperty)\n根据用户的选择,某些文件将是无用的(例如,如果用户不需要数据库,则数据库访问类),所以我想删除它们。
\n\n生成后是否可以运行清理挂钩脚本?
\n\n注意:如果不需要的话,在生成过程中不包含这些文件会更好,但我认为不可能声明一些可选文件,对吧?
\n\n谢谢
\n\nLo\xc3\xafc
\n我的Java Play2应用程序正在调用一些外部Web服务来通过同步第三方客户端库获取数据.对于这个应用程序,我需要高流量和可扩展性.
播放文档说:
您的代码可能阻止的情况包括:通过第三方客户端库使用REST/WebService API (即,不使用Play的异步WS API)[...]
请注意,您可能想要将您的阻止代码包装在Futures中.这不会使它成为非阻塞,它只是意味着阻塞将在不同的线程中发生[...]
相反,以下类型的IO不会阻塞: Play WS API,...
在Play2 Java应用程序中,使用promises使事情异步并不是很有用,因为默认的游戏池用于Futur任务.因此,使用大量Futur将导致与仅使用具有大型默认线程池的同步调用相同的事情:在同一池中大致相同数量的线程.
所以我的问题是:
非常感谢
卢瓦克
根据文档,使用actor的更简单方法是:
承诺promiseOfInt = Akka.future(new Callable(){public Integer call(){return ...;}});
但该文档还说,使用Java API,它将始终使用相同的线程池(播放默认线程池).
文档说,还有一个演员的Akka池.如何将此actor任务发送到Akka线程池,而不是阻止常见的用户操作?所以我可以调整Akka池并保持默认池小.
谢谢,Loic
我有一个Play 2.1 Java Web服务,它调用另一个Web服务.我的服务通过转换其他Web服务的XML响应来提供JSON.
最初,我使用Jersey-Client lib来调用我的第二个服务.由于这是一个阻塞调用,我修改了设置以允许并行500个线程.我用它做了很好的结果,我做了一个加特里拉测试并且速度非常快(在一台远程服务器上处理10 000个请求需要32秒).
然后我决定只使用异步调用来优化I/O. 现在我使用play.libs.WS客户端而不是使用默认线程池参数的jersey阻塞客户端.我使用promises来获取我的结果,但我的其余代码与以前完全相同.
奇怪的是,我的加特林测试(只是一个发送一些http GET请求的循环)的性能已经下降,速度慢了10倍......
我试图增加"默认调度程序"的线程数,但并不是更好.
可能是因为单个线程在WS调用之后处理XML和Json转换?
该应用程序的结构如下:
//controller :
Promise<Response> = myService.remoteEntities();
return async(promise.map(new Function<Response, Result>() {
public Result apply(Response response) {
List<Entity> entities = // ... XPATH and DOM parsing
return ok(jsonp(callback, toJson(entities)));
}
});
Run Code Online (Sandbox Code Playgroud)
myService.remoteEntities定义如下:
public Promise<List<Entity>> myServiceMethod {
return WS.url(url.toString())
}
Run Code Online (Sandbox Code Playgroud)
注意:myService是一个弹簧服务单例,我的路由/控制器使用带有'@'符号的spring我把它放在一个单独的类中,以便能够使用模拟测试
谢谢,Loïc
注意:我最初在此处发布了我的问题:https://groups.google.com/forum/?fromgroups =#!topic/play-frame/SDpPA6UPyFQ
这是有效的:
val values: List<String> = listOf("a", null, "b").filterNotNull()
Run Code Online (Sandbox Code Playgroud)
这不起作用:
fun <A> nonNullValues(values: List<A?>): List<A> = values.filterNotNull()
Run Code Online (Sandbox Code Playgroud)
编译器抱怨泛型类型:
Error:(8, 63) Kotlin: Type parameter bound for T in fun <T : kotlin.Any> kotlin.collections.Iterable<T?>.filterNotNull(): kotlin.collections.List<T>
is not satisfied: inferred type A is not a subtype of kotlin.Any
Run Code Online (Sandbox Code Playgroud)
这个工作正在:
fun <A: Any> nonNullValues(values: List<A?>): List<A> = values.filterNotNull()
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下为什么我需要告诉编译器A是Any的子类型吗?我认为每种类型都是Any的子类型......
谢谢!
让我们假设你有两个可以归零的功能,你不能编写这两个函数:
fun giveInt(x: Int):Int? = x+1
fun giveInt2(x: Int):Int? = x+2
Run Code Online (Sandbox Code Playgroud)
为了实现这个组合,我写了这个函数:
fun all(x:Int):Int? {
val y = giveInt(x)
if (y != null) return giveInt2(y) else return null;
}
val four = all(1)
Run Code Online (Sandbox Code Playgroud)
是否有可能构成2个空的值来获得另一个为空的没有明确的写作if (y != null)和return null?
在Scala我会做的事情如下:
def giveInt(x: Int):Option[Int] = Some(x+1)
def giveInt2(x: Int):Option[Int] = Some(x+2)
def all(x:Int): Option[Int] = giveInt(x).flatMap(giveInt2)
Run Code Online (Sandbox Code Playgroud)
我应该使用java Optional来实现这一点,还是可以使用?运算符?
谢谢 :)