我正在使用Play编写一个用Scala编写的Web应用程序!框架和Akka.代码基本上是这样组织的:播放控制器向Akka演员发送消息.反过来,参与者与持久层交谈,该层提取数据库访问.在应用程序中使用这些组件的典型示例:
class OrderController(orderActor: ActorRef) extends Controller {
def showOrders(customerId: Long) = {
implicit request => Async {
val futureOrders = orderActor ? FindOrdersByCustomerId(id)
// Handle the result, showing the orders list to the user or showing an error message.
}
}
}
object OrderActor extends Actor {
def receive = {
case FindOrdersByCustomerId(id) =>
sender ! OrderRepository.findByCustomerId(id)
case InsertOrder(order) =>
sender ! OrderRepository.insert(order)
//Trigger some notification, like sending an email. Maybe calling another actor.
}
}
object OrderRepository {
def …Run Code Online (Sandbox Code Playgroud) 假设我有以下课程:
public class Foo {
private List<Integer> list = Lists.newArrayList(1, 2, 3, 4, 5);
private Iterator<Integer> iterator = Iterators.cycle(list);
public void bar(){
Integer value = iterator.next();
doSomethingWithAnInteger(value);
}
}
Run Code Online (Sandbox Code Playgroud)
如果一个Foo实例被两个线程同时访问,我需要每个线程从中获取不同的值iterator.next().该bar()方法是否必须同步?或者iterator.next()保证是线程安全的?
在这个例子中,我使用ArrayList作为底层的Iterable.循环迭代器的线程安全性是否依赖于特定的可迭代实现?
谢谢.
我正在开发一个包含大量复杂Hibernate标准查询的Java应用程序.我想测试这些标准,以确保他们选择正确的,只有正确的对象.当然,其中一种方法是建立内存数据库(例如HSQL),并在每次测试中使用条件对该数据库进行往返,然后断言查询结果符合我的期望.
但我正在寻找一个更简单的解决方案,因为Hibernate标准只是一种关于Java对象的特殊逻辑谓词.因此,理论上,它们可以在不访问任何数据库的情况下进行测试.例如,假设有一个名为的实体Cat:
class Cat {
Cat(String name, Integer age){
this.name = name;
this.age = age;
}
...
}
Run Code Online (Sandbox Code Playgroud)
我想做这样的事情来创建条件查询:
InMemoryCriteria criteria = InMemoryCriteria.forClass(Cat.class)
.add(Restrictions.like("name", "Fritz%"))
.add(Restrictions.or(
Restrictions.eq("age", new Integer(0)),
Restrictions.isNull("age")))
assertTrue(criteria.apply(new Cat("Foo", 0)))
assertTrue(criteria.apply(new Cat("Fritz Lang", 12)))
assertFalse(criteria.apply(new Cat("Foo", 12)))
Run Code Online (Sandbox Code Playgroud)
标准可以在生产代码中使用,如下所示:
criteria.getExecutableCriteria(session); //similar to DetachedCriteria
Run Code Online (Sandbox Code Playgroud)
是否有任何Java库可以进行此类测试?
我已经在Clojure上编程了一段时间在Intellij IDEA上.我喜欢这种语言,到目前为止,IDEA是我最喜欢的IDE.但令我烦恼的一件事是无法从IDE运行测试并看到红色/绿色/橙色条.那有插件吗?或者,至少,一些聪明的伎俩?
在使用Intellij IDEA插件一段时间后,我注意到具有外部依赖项的插件工作正常,即使这些依赖项未与插件本身捆绑在一起,也不会在任何地方公开声明.
选择一个随机的例子:GenerateToString插件除其他外依赖于log4j.但是如果你看一下jar文件,你会看到它只包含它自己的类加上一些资源(图像和html文件)和元数据(强制性的plugin.xml和MANIFEST.MF),其中没有任何一个对log4j的引用.并且该jar文件是您安装插件所需的唯一内容.
怎么可能?IDEA如何管理这些依赖项,以便它不会ClassNotFoundException在运行时抛出类似的东西?
假设我为Monad类型定义了一个类型类的实例Future:
val futureMonad = new Monad[Future] {
override def point[A](a: ? A): Future[A] =
Future(a)
override def bind[A, B](fa: Future[A])(f: A => Future[B]): Future[B] =
fa flatMap f
}
Run Code Online (Sandbox Code Playgroud)
严格来说,这不是一个单子,因为它违反了左翼身份的法则:
futureMonad.point(a) bind f == f(a)
Run Code Online (Sandbox Code Playgroud)
如果f抛出异常,左侧表达式的结果将失败Future,而右侧将抛出异常.
但是这种违规的实际意义是什么?由于这种"不良行为",系统可以通过哪些方式失败?
根据该方法的Scala文档Range.end,它返回"范围的独占结束".那么为什么它为符号to和until符号返回相同的值?例如:
Welcome to Scala version 2.9.2 (Java HotSpot(TM) Server VM, Java 1.7.0).
Type in expressions to have them evaluated.
Type :help for more information.
scala> (1 to 10).end
res0: Int = 10
scala> (1 until 10).end
res1: Int = 10
Run Code Online (Sandbox Code Playgroud)
不应该res0 == 11?
我正在编写一个 Greasemonkey 用户脚本,该脚本应该使用 jQuery 并在 Google Chrome 和 Firefox 上运行。
我已经看到了几个如何做到这一点的例子,其中包括关于 SO 的非常好的答案。所有这些都归结为调用“注入脚本”函数,并将另一个回调函数作为参数传递。
该回调函数内的代码是“魔法”发生的地方,包括访问jQuery( $) 对象。
这个解决方案效果很好。但是,使用它的后果之一是回调函数外部定义的函数无法从回调函数内部调用:
function doSomethingImportantThatIWantToUnitTest(){ ... }
function with_jquery(callback) {
var script = document.createElement("script");
script.type = "text/javascript";
script.textContent = "(" + callback.toString() + ")(jQuery)";
document.body.appendChild(script);
};
with_jquery(function ($) {
doSomethingImportantThatIWantToUnitTest(); // <---- meh. Not defined!
});
Run Code Online (Sandbox Code Playgroud)
所以,我只能使用回调函数中定义的函数。但反过来,这些函数也不能从外部调用。特别是,例如,它们不能从单元测试中调用,这对我来说非常烦人。
有没有办法为 Chrome 编写 Greasemonkey 脚本并对其进行单元测试?
我正在客户端使用Valum实现Ajax文件上传并播放!服务器端2.0.4.我的动作方法如下所示:
def ajaxup = Action(parse.temporaryFile) { request =>
try {
request.body.moveTo(new File("/somepath/foo.jpg"))
} catch {
case e: Exception => Logger.error(e.getMessage)
}
Ok("File uploaded")
}
Run Code Online (Sandbox Code Playgroud)
上传工作正常,也就是文件名称下正确保存foo.jpg上/somepath/.但它也引发了异常:
Path(/somepath/foo.jpg) exists but replace parameter is false
Run Code Online (Sandbox Code Playgroud)
我怎么能避免这种情况?我是否需要在我正在创建的文件上设置任何属性?
Siphon的serialize方法接收一个视图和一组选项作为参数.如果该视图有多个表单,它将扫描它并序列化它找到的第一个表单.但我有几种形式的视图,我想选择它应该序列化的特定形式.Siphon有可能吗?
scala ×4
java ×2
unit-testing ×2
akka ×1
backbone.js ×1
clojure ×1
file-upload ×1
greasemonkey ×1
guava ×1
ide ×1
iterator ×1
jquery ×1
monads ×1
range ×1
typeclass ×1
userscripts ×1