2011-08-10 18 views
2

Akka TypedActors(1.1.2)を使用しようとしています。私のようなインターフェースを持っていますAkka TypedActorの 'Unit'メソッドはタイムアウトしますが、非同期である必要があります。

trait Namespace { 
    def cellCount: Int 
    def isEmpty: Boolean 
    def cell(key: String): Option[CellOperations[_]] 
    def cellsLike(key: String): List[CellOperations[_]] 
    def updateOrCreateCell[T](n: String, v: Option[T]=None, d:List[DataOps[T]]=List.empty[DataOps[T]]) 
} 

私はよく定義されたNamespaceImplを持っています。

class NamespaceImpl extends TypedActor with Namespace with Logging { 
    ... 
} 

そして、私は春を通じて俳優を作成します。

実行時に
<akka:typed-actor id="namespace" 
        interface="com.fi.depends.namespace.akka.Namespace" 
        implementation="com.fi.depends.namespace.akka.NamespaceImpl" 
        timeout="10000" 
        scope="singleton"> 
</akka:typed-actor> 

方法は、型ユニットであるため、私は定期的に、私の理解に今までに起こるべきでない、updateOrCreateCellへの呼び出しにタイムアウトと私はそれが生成すると非同期呼び出しを期待しています。私が見るスタックトレースで

akka.dispatch.FutureTimeoutException: Futures timed out after [10000] milliseconds 
[NYCWD2328_1c52ee80-c372-11e0-8343-0023ae9118d8] 
    at akka.dispatch.DefaultCompletableFuture.await(Future.scala:718) 
    at akka.actor.ScalaActorRef$class.$bang$bang(ActorRef.scala:1332) 
    at akka.actor.LocalActorRef.$bang$bang(ActorRef.scala:587) 
    at akka.actor.ActorAspect.localDispatch(TypedActor.scala:966) 
    at akka.actor.TypedActorAspect.dispatch(TypedActor.scala:904) 
    at akka.actor.TypedActorAspect.invoke(TypedActor.scala:899) 
    at com.fi.depends.namespace.akka.Namespace$$ProxiedByAWDelegation$$1314085842186_1__786390915__878797045___AW_JoinPoint.proceed(Unknown Source) 
    at com.fi.depends.namespace.akka.Namespace$$ProxiedByAWDelegation$$1314085842186_1__786390915__878797045___AW_JoinPoint.invoke(Unknown Source) 
    at com.fi.depends.namespace.akka.Namespace$$ProxiedByAWDelegation$$1314085842186.updateOrCreateCell$default$3(Unknown Source) 

私が見ているという事実「ScalaActorRefの$クラスの$ビッグバン$バン」何かが非常に間違っていることを私に伝えます。

ご協力いただければ幸いです。

答えて

0

「updateOrCreateCell」の戻り値の型をUnitに指定するとどうなりますか?

+0

こんにちはViktor - 私はそれを試み、同じ例外と同じスタックトレースを得ました。私はこの問題がある最小限のテストケースを見つけるために私の特定のアプリケーションの細部を取り除こうとしていますが、今週末までにはそれを達成できません。 (私はAkkaに既存のScala Actorsアプリケーションを移植しようとしています。型付きアクターをあきらめたくないからです。 – Jim

+0

1.2のストレートTypedActorsで問題を再現しようとしました。 -RC2と私はできませんでした。 Btw、Akka 2.0のために、ブランドスパンキンの新しいTypedActorの実装があることを知っていますか?:https://github.com/jboner/akka/blob/86bd9aaa51fda375a1d04cb87019441a9ca56fed/akka-actor/src/main/scala/akka /actor/TypedActor.scala –

0

スレッドネクロは最高ですが、先日も同様の例外が発生しましたが、いつか誰かを助けるかもしれないと考えました。 :)

NamespaceImplにオーバーライドされたreceiveメソッドがありますか?

:これはあなたが receiveを上書きし、まだあなたがしたい場合は、それにものを行うことができる方法です。ところで

が...私がやった 原因は、(TypedActorに俳優から切り替え)、それはあなたのためにやったように、それは正確に物事を台無しに
override def receive = { 
    super.receive andThen { 
    case message => { 
     logger.debug("Received message: " + message) 
    } 
    } 
} 
関連する問題