2015-01-11 36 views
0

我是Ruby開發人員,而不是Java開發人員,因此我試圖找到最新的使用Scala Akka圖書館與JRuby但短缺。在JRuby中使用Akka 2.3.8的示例 - 具體使用Java :: AkkaActor :: Props

我有下面的代碼來代替......

require "java" 

    [ 
    "akka-2.3.8/lib/scala-library-2.11.4.jar", 
    "akka-2.3.8/lib/akka/akka-actor_2.11-2.3.8.jar", 
    "akka-2.3.8/lib/akka/config-1.2.1.jar" 
    ].each { |lib| $CLASSPATH << lib } 

    java_import java.lang.System 
    java_import "java.io.Serializable" 
    java_import "akka.actor.ActorRef" 
    java_import "akka.actor.ActorSystem" 
    java_import "akka.actor.Props" 
    java_import "akka.actor.UntypedActor" 

    class Greeting 
    include Serializable 

    attr_reader :who 

    def initialize(who) 
     @who = who 
    end 
    end 

    class GreetingActor < UntypedActor 
    class << self 
     alias_method :apply, :new 
     alias_method :create, :new 
    end 

    def onReceive(message) 
     puts "Hello " + message.who 
    end 
    end 

    system = ActorSystem.create("GreetingSystem") # <Java::AkkaActor::ActorSystemImpl:0x68c9133c> 
    props = Props.new(GreetingActor) # Java::AkkaActor::Props 
    greeter = system.actorOf(props, "greeter"); 
    greeter.tell(Greeting.new("Rocky Jaiswal")); 

    system.shutdown 
    system.await_termination 

...但是這導致了以下錯誤......

ArgumentError: wrong number of arguments (1 for 3) 
    (root) at size.rb:39 

此錯誤是由Props.new(GreetingActor)引起的,但閱讀Akka的文檔,目前還不清楚如何將該代碼翻譯成Ruby。

有誰知道如何解決這個問題?看着http://doc.akka.io/api/akka/2.3.1/index.html#akka.actor.Props我看不到這是如何關聯/映射到Ruby代碼。

我知道Celluloid ruby​​庫,但我想看看如何使用更低級的代碼來實現Actor模式。這似乎比我最初想象的更尷尬。

回答