`
xiefeifeihu
  • 浏览: 99250 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论
文章列表
使用ExpandoMetaClass和Category可以实现元编程。ExpandoMetaClass可以动态添加和修改类的构造器,方法和属性。Category只能动态添加和修改类的方法。 当使用EMC动态添加或修改方法时,闭包Closure作为方法体被传入,它的delegate指向调用此方法的实例。 具体使用可参考:http://www.groovyq.net/node/75   1、为类添加方法(为String类添加String times(int count)方法) String.metaClass.times = {int count -> ...
  实现AOP的方式有很多种,像Spring的AOP,它只能拦截Spring托管的bean;Groovy AST Transformations、ASM等在编译阶段通过修改字节码也可以做AOP;JAVA HOOK也可以做,但比较麻烦。 Groovy MOP提供了一种很简单的方法实现AOP。   下面通过例子试用一下: 如果想动态拦截某个方法,不想改源代码(或者不能改源码,比如String已经是final类了),而能跟踪函数的执行时间(before invoke时记录开始时间,after invoke时记录完成时间,从而跟踪函数执行时间),可以用MOP实现。下面展示了3种方法: ...
  Externalizable是深度定制序列化。如果同时实现了这两个接口,则只会执行Externalizable。   Serializable可以仅仅标记可序列化,使用JDK默认的序列化方法,也可以定制。实现方法: private void writeObject(ObjectOutputStream oos) { // oos.defaultWriteObject(); // Write/save additional fields oos.writeUTF(value); } privat ...
基础数据类型,如String、Integer、Date、Boolean等它们可以很方便的映射到数据库: import grails.persistence.Entity @Entity class MyEntity { String code String name static constraints = { code(unique: true, minSize: 4, maxSize: 4) name(blank: false, maxSize: 255) } } 这些基础数据类型是JAV ...
假设有一个很耗时的运算,单台机器已经没法满足需求,这时你可以想到由多台计算机协作完成。具体怎么做呢。 举个很简单的例子,假设这个耗时的运算是从1加到100000,你现在有两台服务器,可以让这两台服务器分别完成从1加到50000,和从50001加到100000,然后本机完成这两个结果之和。   两台服务器分别启动两个akka Server,同时还有一个CalcActor。这个计算actor接收两个参数:Integer start和Integer end,可以从start一直加到end,最后将结果返回给发送者:getSender().tell(result)。 @Log4j ...
  Future用来获取某个并发操作的结果,这个结果可以同步(阻塞)或异步(非阻塞)的方式访问。   执行上下文 Future 需要一个ExecutionContext, 它与java.util.concurrent.Executor 很相像. 如果你在作用域内有一个 ActorSystem , 它可以用 ...
Akka 中的有类型 Actor 是 Active Objects 模式的一种实现. Smalltalk诞生之时,就已经缺省地将方法调用从同步操作发为异步派发。 有类型 Actor 由两 “部分” 组成, 一个public接口和一个实现, 如果你有 “企业级” Java的开发经验, 这对你应该非常熟悉。 对普通actor来说,你拥有一个外部API (public接口的实例) 来将方法调用异步地委托给其实现类的私有实例。 有类型Actor相对于普通Actor的优势在于有类型Actor拥有静态的契约, 你不需要定义你自己的消息, 它的劣势在于对你能做什么和不能做什么 ...
akka提供了两个关于时长的数据类型:Duration 和 Deadline,比如5秒钟这种含义。 Duration.Inf表示无限,Duration.MinusInf表示负无限 Deadline, 表示一个绝对的时间点,意义是最终期限,并且支持通过计算当前时间到deadline之间的差距来生成Duration 下面是使用方法:   import akka.util.Durationimport java.util.concurrent.TimeUnitimport akka.util.FiniteDurationimport akka.util.Deadlineimport a ...
Actor模型为编写并发和分布式系统提供了一种更高的抽象级别。它将开发人员从显式地处理锁和线程管理的工作中解脱出来,使编写并发和并行式系统更加容易。 Akka Actor的API与Scala Actor类似,并且从Erlang中借用了一些语法。   Actor类的定义 定义一个Actor类需要继承UntypedActor,并实现onReceive方法。   Props Props是一个用来在创建actor时指定选项的配置类。 以下是使用如何创建Props实例的示例. Props props1 = new Props();Props props2 = new Props( ...
  akka2使用Typesafe Config库,可以使用ConfigFactory.load()加载配置文件,默认加载classpath下的application.conf, application.json and application.properties文件。ActorSystem将会把这些配置和reference.conf合并(merge)起来。 ? 如果要写akka应用,将配置写在classpath根目录下的application.conf文件中。 如果要写基于akka的lib包,将配置写在jar包内的根目录下的reference.conf文件中. 问题:如 ...
  akka从1.2升级到现在的2.0.2后有了很大的改变。现在摸索一下如何使用。   Remoting可以方便地用于服务器之间通信。akka1.2可以使用clientActor.sendRequestReply将消息发送到服务器端,并且同步获取服务器端的返回消息。但是akka2已经不能这么用了,akka2使用tell方法给另一个Actor发消息。 tell有两个重载方法: /** * Sends the specified message to the sender, i.e. fire-and-forget semantics.<p/> * <pre> ...
  应用场景:服务端要处理大量的客户端的请求,并且处理请求耗费较长的时间。这时就需要使用并发处理。多线程是一种方法,这里使用Akka框架处理并发。(以下代码在Groovy1.7.5、akka-actors-1.2下运行成功)   这里有三个角色:Client、Master、Worker Client傻乎乎地发同步请求给Master,一直等到结果返回客户端才离开。 Master接收客户端发来的请求,然后将请求交给Worker处理,处理完成之后将结果返回给Client。 Worker负责具体的业务处理,它耗费的事件比较长。   所以这里的关键在于Master,如果Master线性地“ ...
AOP的关键在于拦截,如果在代码中直接写入要插入的代码则是最直接的AOP。这当然不是指在source中生写代码,而是希望在程序员不知觉的情况下修改了代码。 asm是个开源包,可以很方便地读写class的bytecode。网站是http://asm.ow2.org/。为了方便修改类建议下载Eclipse插件。 使用方法挺简单。首先实现一个ClassAdapter导出类,找到要修改的函数: public class SOClassAdapter extends ClassAdapter { public SOClassAdapter(ClassVisitor cv) { super(cv); ...
如果一个Remoting的service实现了某接口,并且有@Transactional的标注,那么客户端在调用服务器方法的时候很可能报找不到方法的错误。这是因为@Transactional默认使用jdk的动态代理,red5寻找方法的时候去找接口声明的方法。如果该方法没在接口中声明,自然就找不到。 要解决这个问题比较直接的方法是在接口中声明。这样做会比较繁琐。所有Remoting方法都得在接口中声明。 另一种方法是强制使用CGLib代理,这只需要简单配置即可,不必修改代码。配置方法是在Spring配置文件中加上: <aop:aspectj-autoproxy proxy-target-cl ...
在父类中能获取子类的属性吗?一般情况下是不行的,因为孩子尚未出世哪里来的属性。但有时需要在父类处理该类(包含子类)的所有属性,该怎么做呢,有种方法能解决——在父类中将子类的实例引用进来。假设BaseClass是基类,有个getAll方法用以获取该类的所有属性。SubClass继承子BaseClass,SSClass继承自SubClass,SSClass的实例调用getAll方法时获取SSClass及其父类的所有属性。具体做法如下: import java.lang.reflect.Field; public class BaseClass { private String a; ...
Global site tag (gtag.js) - Google Analytics