JavaアプリケーションでTypedactorを使用するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/5829909

  •  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.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タイプの俳優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(*)"/>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top