2

Typed Actors(Java)TypedActorの例に従って、Javaでを実装しようとしています。しかし、私は苦労しています。、を追加しましたが、それだけでは不十分でした。Eclipseでエラーが発生したので、ビルドパスにも追加しました。akka-actor-1.1-M1.jarakka-typed-actor-1.1-M1.jarscala-library.jaraspectwerkz-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));
});

しかし、それはJavaではないと思いますclassOf[Service]。Scalaのように見えます。

TypedActorカスタムコンストラクターを使用してを実装するにはどうすればよいですか?

4

1 に答える 1

3

私が見る限り、あなたのコードは正しいです。デフォルト以外のコンストラクタを使用して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-actor1.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(*)"/>
于 2011-04-29T09:28:27.867 に答える