如何在Java应用程序中使用TypedActor?
我尝试按照Typed Actors(Java)上的示例在Java中实现TypedActor
。 但我在苦苦挣扎。 我添加了akka-actor-1.1-M1.jar
, akka-typed-actor-1.1-M1.jar
, scala-library.jar
但这还不够。 我在Eclipse中遇到错误,所以我还在构建路径中添加了aspectwerkz-2.0.jar
和aspectwerkz-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的依赖项: