JavaアプリケーションでTypedactorを使用するにはどうすればよいですか?
-
27-10-2019 - |
質問
私はaを実装しようとします TypedActor
Javaで例に従います タイプされた俳優(Java). 。しかし、私は苦労しています。私が追加しました 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タイプの俳優1.1-m1の依存関係であることに注意してください。
<dependency org="org.codehaus.aspectwerkz" name="aspectwerkz" rev="2.2.3" force="true" conf="compile->compile(*),master(*);runtime->runtime(*)"/>
<dependency org="aopalliance" name="aopalliance" rev="1.0" force="true" conf="compile->compile(*),master(*);runtime->runtime(*)"/>
<dependency org="org.guiceyfruit" name="guice-all" rev="2.0" force="true" conf="compile->compile(*),master(*);runtime->runtime(*)"/>
<dependency org="se.scalablesolutions.akka" name="akka-stm" rev="1.1-M1" force="true" conf="compile->compile(*),master(*);runtime->runtime(*)"/>
<dependency org="org.scala-lang" name="scala-library" rev="2.9.0.RC1" force="true" conf="compile->compile(*),master(*);runtime->runtime(*)"/>
所属していません StackOverflow