Skip to content

Commit

Permalink
Converted all TypedActor tests to interface-impl, code and tests compile
Browse files Browse the repository at this point in the history
  • Loading branch information
Jonas Bonér committed Jul 27, 2010
1 parent add7702 commit e33e92c
Show file tree
Hide file tree
Showing 37 changed files with 484 additions and 398 deletions.
Expand Up @@ -4,11 +4,12 @@
import org.apache.camel.Header;

import se.scalablesolutions.akka.actor.annotation.consume;
import se.scalablesolutions.akka.actor.*;

/**
* @author Martin Krasser
*/
public class PojoBase {
public class PojoBase extends TypedActor implements PojoBaseIntf {

public String m1(String b, String h) {
return "m1base: " + b + " " + h;
Expand Down
@@ -0,0 +1,21 @@
package se.scalablesolutions.akka.camel;

import org.apache.camel.Body;
import org.apache.camel.Header;

import se.scalablesolutions.akka.actor.annotation.consume;

/**
* @author Martin Krasser
*/
public interface PojoBaseIntf {

public String m1(String b, String h);
@consume("direct:m2base")
public String m2(@Body String b, @Header("test") String h);
@consume("direct:m3base")
public String m3(@Body String b, @Header("test") String h);
@consume("direct:m4base")
public String m4(@Body String b, @Header("test") String h);
public void m5(@Body String b, @Header("test") String h);
}
Expand Up @@ -4,11 +4,12 @@
import org.apache.camel.Header;

import se.scalablesolutions.akka.actor.annotation.consume;
import se.scalablesolutions.akka.actor.*;

/**
* @author Martin Krasser
*/
public class PojoImpl implements PojoIntf {
public class PojoImpl extends TypedActor implements PojoIntf {

public String m1(String b, String h) {
return "m1impl: " + b + " " + h;
Expand Down
@@ -1,11 +1,11 @@
package se.scalablesolutions.akka.camel;

import se.scalablesolutions.akka.actor.annotation.consume;
import se.scalablesolutions.akka.actor.*;

/**
* @author Martin Krasser
*/
public class Pojo {
public class PojoNonConsumer extends TypedActor implements PojoNonConsumerIntf {

public String foo(String s) {
return String.format("foo: %s", s);
Expand Down
@@ -0,0 +1,9 @@
package se.scalablesolutions.akka.camel;

/**
* @author Martin Krasser
*/
public interface PojoNonConsumerIntf {

public String foo(String s);
}
@@ -1,11 +1,12 @@
package se.scalablesolutions.akka.camel;

import se.scalablesolutions.akka.actor.annotation.consume;
import se.scalablesolutions.akka.actor.*;

/**
* @author Martin Krasser
*/
public class PojoRemote {
public class PojoRemote extends TypedActor implements PojoRemoteIntf {

@consume("direct:remote-active-object")
public String foo(String s) {
Expand Down
@@ -0,0 +1,12 @@
package se.scalablesolutions.akka.camel;

import se.scalablesolutions.akka.actor.annotation.consume;

/**
* @author Martin Krasser
*/
public interface PojoRemoteIntf {

@consume("direct:remote-active-object")
public String foo(String s);
}
@@ -1,11 +1,12 @@
package se.scalablesolutions.akka.camel;

import se.scalablesolutions.akka.actor.annotation.consume;
import se.scalablesolutions.akka.actor.*;

/**
* @author Martin Krasser
*/
public class PojoSingle {
public class PojoSingle extends TypedActor implements PojoSingleIntf {

@consume("direct:foo")
public void foo(String b) {
Expand Down
@@ -0,0 +1,12 @@
package se.scalablesolutions.akka.camel;

import se.scalablesolutions.akka.actor.annotation.consume;

/**
* @author Martin Krasser
*/
public interface PojoSingleIntf {

@consume("direct:foo")
public void foo(String b);
}
Expand Up @@ -4,8 +4,9 @@
import org.apache.camel.Header;

import se.scalablesolutions.akka.actor.annotation.consume;
import se.scalablesolutions.akka.actor.*;

public class PojoSub extends PojoBase {
public class PojoSub extends PojoBase implements PojoSubIntf {

@Override
@consume("direct:m1sub")
Expand Down
@@ -0,0 +1,18 @@
package se.scalablesolutions.akka.camel;

import org.apache.camel.Body;
import org.apache.camel.Header;

import se.scalablesolutions.akka.actor.annotation.consume;

public interface PojoSubIntf extends PojoBaseIntf {
@consume("direct:m1sub")
public String m1(@Body String b, @Header("test") String h);

@Override
public String m2(String b, String h);

@Override
@consume("direct:m3sub")
public String m3(@Body String b, @Header("test") String h);
}
4 changes: 2 additions & 2 deletions akka-camel/src/test/scala/CamelServiceFeatureTest.scala
Expand Up @@ -122,7 +122,7 @@ class CamelServiceFeatureTest extends FeatureSpec with BeforeAndAfterAll with Gi

given("an typed actor registered after CamelService startup")
var latch = service.expectEndpointActivationCount(3)
val obj = TypedActor.newInstance(classOf[PojoBase])
val obj = TypedActor.newInstance(classOf[PojoBaseIntf], classOf[PojoBase])
assert(latch.await(5000, TimeUnit.MILLISECONDS))

when("requests are sent to published methods")
Expand All @@ -148,7 +148,7 @@ class CamelServiceFeatureTest extends FeatureSpec with BeforeAndAfterAll with Gi

given("an typed actor registered after CamelService startup")
var latch = service.expectEndpointActivationCount(3)
val obj = TypedActor.newInstance(classOf[PojoBase])
val obj = TypedActor.newInstance(classOf[PojoBaseIntf], classOf[PojoBase])
assert(latch.await(5000, TimeUnit.MILLISECONDS))

when("the typed actor is stopped")
Expand Down
10 changes: 5 additions & 5 deletions akka-camel/src/test/scala/ConsumerMethodRegisteredTest.scala
Expand Up @@ -12,8 +12,8 @@ class ConsumerMethodRegisteredTest extends JUnitSuite {
import ConsumerMethodRegisteredTest._

val remoteAddress = new InetSocketAddress("localhost", 8888);
val remoteAspectInit = AspectInit(classOf[String], null, Some(remoteAddress), 1000)
val localAspectInit = AspectInit(classOf[String], null, None, 1000)
val remoteAspectInit = AspectInit(classOf[String], null, null, Some(remoteAddress), 1000)
val localAspectInit = AspectInit(classOf[String], null, null, None, 1000)

val ascendingMethodName = (r1: ConsumerMethodRegistered, r2: ConsumerMethodRegistered) =>
r1.method.getName < r2.method.getName
Expand Down Expand Up @@ -44,9 +44,9 @@ class ConsumerMethodRegisteredTest extends JUnitSuite {
}

object ConsumerMethodRegisteredTest {
val activePojoBase = TypedActor.newInstance(classOf[PojoBase])
val activePojoSub = TypedActor.newInstance(classOf[PojoSub])
val activePojoIntf = TypedActor.newInstance(classOf[PojoIntf], new PojoImpl)
val activePojoBase = TypedActor.newInstance(classOf[PojoBaseIntf], classOf[PojoBase])
val activePojoSub = TypedActor.newInstance(classOf[PojoSubIntf], classOf[PojoSub])
val activePojoIntf = TypedActor.newInstance(classOf[PojoIntf], classOf[PojoImpl])

@AfterClass
def afterClass = {
Expand Down
8 changes: 4 additions & 4 deletions akka-camel/src/test/scala/PublishRequestorTest.scala
Expand Up @@ -32,8 +32,8 @@ class PublishRequestorTest extends JUnitSuite {
}

@Test def shouldReceiveConsumerMethodRegisteredEvent = {
val obj = TypedActor.newInstance(classOf[PojoSingle])
val init = AspectInit(classOf[PojoSingle], null, None, 1000)
val obj = TypedActor.newInstance(classOf[PojoSingleIntf], classOf[PojoSingle])
val init = AspectInit(classOf[PojoSingleIntf], null, null, None, 1000)
val latch = (publisher !! SetExpectedTestMessageCount(1)).as[CountDownLatch].get
requestor ! AspectInitRegistered(obj, init)
assert(latch.await(5000, TimeUnit.MILLISECONDS))
Expand All @@ -45,8 +45,8 @@ class PublishRequestorTest extends JUnitSuite {
}

@Test def shouldReceiveConsumerMethodUnregisteredEvent = {
val obj = TypedActor.newInstance(classOf[PojoSingle])
val init = AspectInit(classOf[PojoSingle], null, None, 1000)
val obj = TypedActor.newInstance(classOf[PojoSingleIntf], classOf[PojoSingle])
val init = AspectInit(classOf[PojoSingleIntf], null, null, None, 1000)
val latch = (publisher !! SetExpectedTestMessageCount(1)).as[CountDownLatch].get
requestor ! AspectInitUnregistered(obj, init)
assert(latch.await(5000, TimeUnit.MILLISECONDS))
Expand Down
2 changes: 1 addition & 1 deletion akka-camel/src/test/scala/RemoteConsumerTest.scala
Expand Up @@ -58,7 +58,7 @@ class RemoteConsumerTest extends FeatureSpec with BeforeAndAfterAll with GivenWh
feature("Client-initiated remote consumer typed actor") {
scenario("access published remote consumer method") {
given("a client-initiated remote consumer typed actor")
val consumer = TypedActor.newRemoteInstance(classOf[PojoRemote], host, port)
val consumer = TypedActor.newRemoteInstance(classOf[PojoRemoteIntf], classOf[PojoRemote], host, port)

when("remote consumer publication is triggered")
var latch = service.expectEndpointActivationCount(1)
Expand Down
Expand Up @@ -17,9 +17,9 @@ class TypedActorComponentFeatureTest extends FeatureSpec with BeforeAndAfterAll
import CamelContextManager.template

override protected def beforeAll = {
val activePojo = TypedActor.newInstance(classOf[Pojo]) // not a consumer
val activePojoBase = TypedActor.newInstance(classOf[PojoBase])
val activePojoIntf = TypedActor.newInstance(classOf[PojoIntf], new PojoImpl)
val activePojo = TypedActor.newInstance(classOf[PojoNonConsumerIntf], classOf[PojoNonConsumer]) // not a consumer
val activePojoBase = TypedActor.newInstance(classOf[PojoBaseIntf], classOf[PojoBase])
val activePojoIntf = TypedActor.newInstance(classOf[PojoIntf], classOf[PojoImpl])

val registry = new SimpleRegistry
registry.put("pojo", activePojo)
Expand Down
11 changes: 9 additions & 2 deletions akka-core/src/main/scala/actor/TypedActor.scala
Expand Up @@ -385,8 +385,15 @@ object TypedActor extends Logging {

private[akka] def newTypedActor(targetClass: Class[_]): TypedActor = {
val instance = targetClass.newInstance
if (instance.isInstanceOf[TypedActor]) instance.asInstanceOf[TypedActor]
else throw new IllegalArgumentException("Actor [" + targetClass.getName + "] is not a sub class of 'TypedActor'")
val typedActor =
if (instance.isInstanceOf[TypedActor]) instance.asInstanceOf[TypedActor]
else throw new IllegalArgumentException("Actor [" + targetClass.getName + "] is not a sub class of 'TypedActor'")
typedActor.init
import se.scalablesolutions.akka.stm.local.atomic
atomic {
typedActor.initTransactionalState
}
typedActor
}

private[akka] def supervise(restartStrategy: RestartStrategy, components: List[Supervise]): Supervisor =
Expand Down
@@ -1,86 +1,12 @@
package se.scalablesolutions.akka.actor;

import se.scalablesolutions.akka.actor.annotation.transactionrequired;
import se.scalablesolutions.akka.actor.annotation.inittransactionalstate;
import se.scalablesolutions.akka.stm.*;

@transactionrequired
public class NestedTransactionalTypedActor {
private TransactionalMap<String, String> mapState;
private TransactionalVector<String> vectorState;
private Ref<String> refState;
private boolean isInitialized = false;

@inittransactionalstate
public void init() {
if (!isInitialized) {
mapState = new TransactionalMap();
vectorState = new TransactionalVector();
refState = new Ref();
isInitialized = true;
}
}

public String getMapState(String key) {
return (String) mapState.get(key).get();
}


public String getVectorState() {
return (String) vectorState.last();
}


public String getRefState() {
return (String) refState.get().get();
}


public void setMapState(String key, String msg) {
mapState.put(key, msg);
}


public void setVectorState(String msg) {
vectorState.add(msg);
}


public void setRefState(String msg) {
refState.swap(msg);
}


public void success(String key, String msg) {
mapState.put(key, msg);
vectorState.add(msg);
refState.swap(msg);
}


public String failure(String key, String msg, TypedActorFailer failer) {
mapState.put(key, msg);
vectorState.add(msg);
refState.swap(msg);
failer.fail();
return msg;
}


public void thisMethodHangs(String key, String msg, TypedActorFailer failer) {
setMapState(key, msg);
}

/*
public void clashOk(String key, String msg, InMemClasher clasher) {
mapState.put(key, msg);
clasher.clash();
}
public void clashNotOk(String key, String msg, InMemClasher clasher) {
mapState.put(key, msg);
clasher.clash();
this.success("clash", "clash");
}
*/
public interface NestedTransactionalTypedActor {
public String getMapState(String key);
public String getVectorState();
public String getRefState();
public void setMapState(String key, String msg);
public void setVectorState(String msg);
public void setRefState(String msg);
public void success(String key, String msg);
public String failure(String key, String msg, TypedActorFailer failer);
}

0 comments on commit e33e92c

Please sign in to comment.