如何在Java应用程序中使用TypedActor?

我尝试按照Typed Actors(Java)上的示例在Java中实现TypedActor 。 但我在苦苦挣扎。 我添加了akka-actor-1.1-M1.jarakka-typed-actor-1.1-M1.jarscala-library.jar但这还不够。 我在Eclipse中遇到错误,所以我还在构建路径中添加了aspectwerkz-2.0.jaraspectwerkz-core-2.0.jar

我尝试使用带有自定义构造函数的TypedActor。

但现在我在编译时遇到错误:

 Exception in thread "main" java.lang.NoSuchMethodError: org.codehaus.aspectwerkz.proxy.Proxy.newInstance([Ljava/lang/Class;[Ljava/lang/Object;ZZ)Ljava/lang/Object; at akka.actor.TypedActor$.newInstance(TypedActor.scala:596) at akka.actor.TypedActor$.newInstance(TypedActor.scala:634) at akka.actor.TypedActor.newInstance(TypedActor.scala) at com.example.actor.ActorTest.main(ActorTest.java:12) 

这是我的BaseActor代码:

 import akka.actor.TypedActor; public class BaseActor extends TypedActor implements BaseService { private String str; private int num; public BaseActor(String str, int num) { this.str = str; this.num = num; System.out.println("booted"); } public void testData(String str, int num) { System.out.println(this.str + " " + this.num); System.out.println(str + " " + num); } } 

我的服务interface

 public interface BaseService { public void testData(String str, int num); } 

还有一个测试类:

 import akka.actor.TypedActor; import akka.actor.TypedActorFactory; public class ActorTest { public static void main(String[] args) { BaseService service = TypedActor.newInstance(BaseService.class, new TypedActorFactory() { public TypedActor create() { return new BaseActor("someString", 12); } }); service.testData("Hello", 6); } } 

在他们写的例子中:

 Service service = TypedActor.newInstance(classOf[Service], new TypedActorFactory() { public TypedActor create() { return new ServiceWithConstructorArgsImpl("someString", 500L)); }); 

但我认为classOf[Service]不是Java,它看起来更像是Scala。

如何使用自定义构造函数实现TypedActor

据我所知,你的代码是正确的。 要使用非默认构造函数在Java中实例化TypedActor,您应该使用:

 BaseService service = TypedActor.newInstance(BaseService.class, new TypedActorFactory() { public TypedActor create() { return new BaseActor("someString", 12); } }); 

事实上,官方文件包含一个拼写错误。

你能尝试使用aspectwerkz-2.2.3吗? 我已经尝试过你的代码,它对我有用。 唯一的区别是我使用的aspectwerkz的版本。

另请注意,这些是akka-typed-actor 1.1-M1的依赖项: