Skip to content

Commit d4b0d8f

Browse files
committed
Using interfaces instead of heritage
1 parent 63d647f commit d4b0d8f

File tree

10 files changed

+52
-77
lines changed

10 files changed

+52
-77
lines changed

.github/workflows/ci.yml

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
name: CI
2+
3+
on:
4+
push:
5+
branches: [main]
6+
pull_request:
7+
branches: [main]
8+
9+
jobs:
10+
build:
11+
runs-on: ubuntu-latest
12+
steps:
13+
- uses: actions/checkout@v3
14+
15+
- name: Set up JDK 11
16+
uses: actions/setup-java@v3
17+
with:
18+
java-version: '11'
19+
distribution: 'temurin'
20+
21+
- name: Run tests
22+
run: mvn compile && mvn test

README.md

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,7 @@ import io.eigr.spawn.java.demo.domain.Actor.State;
303303

304304
import static io.eigr.spawn.api.actors.behaviors.ActorBehavior.*;
305305

306-
public final class JoeActor extends StatefulActor<State> {
306+
public final class JoeActor implements StatefulActor<State> {
307307

308308
@Override
309309
public ActorBehavior configure(BehaviorCtx context) {
@@ -345,19 +345,19 @@ package io.eigr.spawn.java.demo;
345345
import io.eigr.spawn.api.actors.StatefulActor;
346346
import io.eigr.spawn.java.demo.domain.Actor.State;
347347

348-
public final class JoeActor extends StatefulActor<State> {
348+
public final class JoeActor implements StatefulActor<State> {
349349
// ...
350350
}
351351
```
352352

353-
The `JoeActor` class extends `StatefulActor<State>`. `StatefulActor` is a generic class provided by the Spawn API,
353+
The `JoeActor` class implements `StatefulActor<State>` interface. `StatefulActor` is a generic interface provided by the Spawn API,
354354
which takes a type parameter for the state. In this case, the state type is `io.eigr.spawn.java.demo.domain.Actor.State`
355355
defined in above protobuf file.
356356

357357
***Configure Actor Behavior***
358358

359359
```java
360-
public final class JoeActor extends StatefulActor<State> {
360+
public final class JoeActor implements StatefulActor<State> {
361361
@Override
362362
public ActorBehavior configure(BehaviorCtx context) {
363363
return new NamedActorBehavior(
@@ -382,7 +382,7 @@ This `configure` method is overridden from `StatefulActor` and is used to config
382382
***Handle request***
383383

384384
```java
385-
public final class JoeActor extends StatefulActor<State> {
385+
public final class JoeActor implements StatefulActor<State> {
386386
//
387387
private Value setLanguage(ActorContext<State> context, Request msg) {
388388
if (context.getState().isPresent()) {
@@ -534,7 +534,7 @@ import io.eigr.spawn.java.demo.domain.Actor.State;
534534

535535
import static io.eigr.spawn.api.actors.behaviors.ActorBehavior.action;
536536
import static io.eigr.spawn.api.actors.behaviors.ActorBehavior.name;
537-
public final class JoeActor extends StatefulActor<State> {
537+
public final class JoeActor implements StatefulActor<State> {
538538

539539
private String defaultMessage;
540540

@@ -648,7 +648,7 @@ import io.eigr.spawn.java.demo.domain.Actor.State;
648648

649649
import static io.eigr.spawn.api.actors.behaviors.ActorBehavior.action;
650650
import static io.eigr.spawn.api.actors.behaviors.ActorBehavior.name;
651-
public final class JoeActor extends StatefulActor<State> {
651+
public final class JoeActor implements StatefulActor<State> {
652652

653653
private String defaultMessage;
654654

@@ -738,14 +738,14 @@ recommended for handling serverless loads.
738738

739739
In addition to these types, Spawn also allows the developer to choose Stateful actors, who need to maintain the state,
740740
or Stateless, those who do not need to maintain the state.
741-
For this the developer just needs to make extend of the correct base class. For example, I could declare a Serverless Actor using the following code:
741+
For this the developer just needs to make extend of the correct base interface. For example, I could declare a Serverless Actor using the following code:
742742

743743
```java
744744
package io.eigr.spawn.java.demo.actors;
745745

746746
import io.eigr.spawn.api.actors.ActorContext;
747747
import io.eigr.spawn.api.actors.StatelessActor;
748-
import io.eigr.spawn.api.actors.Value;F
748+
import io.eigr.spawn.api.actors.Value;
749749
import io.eigr.spawn.api.actors.behaviors.ActorBehavior;
750750
import io.eigr.spawn.api.actors.behaviors.BehaviorCtx;
751751
import io.eigr.spawn.api.actors.behaviors.NamedActorBehavior;
@@ -756,7 +756,7 @@ import io.eigr.spawn.java.demo.domain.Actor.Request;
756756
import static io.eigr.spawn.api.actors.behaviors.ActorBehavior.action;
757757
import static io.eigr.spawn.api.actors.behaviors.ActorBehavior.name;
758758

759-
public final class StatelessNamedActor extends StatelessActor {
759+
public final class StatelessNamedActor implements StatelessActor {
760760

761761
@Override
762762
public ActorBehavior configure(BehaviorCtx context) {
@@ -826,7 +826,7 @@ import io.eigr.spawn.java.demo.domain.Actor.State;
826826

827827
import static io.eigr.spawn.api.actors.behaviors.ActorBehavior.*;
828828

829-
public final class LoopActor extends StatefulActor<State> {
829+
public final class LoopActor implements StatefulActor<State> {
830830

831831
@Override
832832
public ActorBehavior configure(BehaviorCtx context) {
@@ -872,7 +872,7 @@ import io.eigr.spawn.java.demo.domain.Actor.State;
872872

873873
import static io.eigr.spawn.api.actors.behaviors.ActorBehavior.*;
874874

875-
public final class JoeActor extends StatefulActor<State> {
875+
public final class JoeActor implements StatefulActor<State> {
876876

877877
@Override
878878
public ActorBehavior configure(BehaviorCtx context) {
@@ -928,7 +928,7 @@ import io.eigr.spawn.java.demo.domain.Actor.State;
928928

929929
import static io.eigr.spawn.api.actors.behaviors.ActorBehavior.*;
930930

931-
public final class RoutingActor extends StatefulActor<State> {
931+
public final class RoutingActor implements StatefulActor<State> {
932932

933933
@Override
934934
public ActorBehavior configure(BehaviorCtx context) {
@@ -974,7 +974,7 @@ import io.eigr.spawn.java.demo.domain.Actor.State;
974974

975975
import static io.eigr.spawn.api.actors.behaviors.ActorBehavior.*;
976976

977-
public final class PipeActor extends StatefulActor<State> {
977+
public final class PipeActor implements StatefulActor<State> {
978978

979979
@Override
980980
public ActorBehavior configure(BehaviorCtx context) {
@@ -1037,7 +1037,7 @@ import io.eigr.spawn.java.demo.domain.Actor.State;
10371037

10381038
import static io.eigr.spawn.api.actors.behaviors.ActorBehavior.*;
10391039

1040-
public final class JoeActor extends StatefulActor<State> {
1040+
public final class JoeActor implements StatefulActor<State> {
10411041

10421042
@Override
10431043
public ActorBehavior configure(BehaviorCtx context) {
@@ -1170,7 +1170,7 @@ import io.eigr.spawn.java.demo.domain.Actor.State;
11701170

11711171
import static io.eigr.spawn.api.actors.behaviors.ActorBehavior.*;
11721172

1173-
public final class MikeActor extends StatefulActor<State> {
1173+
public final class MikeActor implements StatefulActor<State> {
11741174

11751175
@Override
11761176
public ActorBehavior configure(BehaviorCtx context) {

src/main/java/io/eigr/spawn/api/actors/BaseActor.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
import io.eigr.spawn.api.actors.behaviors.ActorBehavior;
44
import io.eigr.spawn.api.actors.behaviors.BehaviorCtx;
55

6-
public abstract class BaseActor {
6+
public interface BaseActor {
77

8-
public abstract ActorBehavior configure(BehaviorCtx ctx);
8+
ActorBehavior configure(BehaviorCtx ctx);
99

10-
public abstract Boolean isStateful();
10+
Boolean isStateful();
1111

1212
}

src/main/java/io/eigr/spawn/api/actors/StatefulActor.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,14 @@
22

33
import java.lang.reflect.ParameterizedType;
44

5-
public abstract class StatefulActor<S> extends BaseActor {
6-
public Class<S> getStateType() {
5+
public interface StatefulActor<S> extends BaseActor {
6+
default Class<S> getStateType() {
77
return (Class<S>) ((ParameterizedType)
88
getClass().getGenericSuperclass())
99
.getActualTypeArguments()[0];
1010
}
11-
1211
@Override
13-
public Boolean isStateful() {
12+
default Boolean isStateful() {
1413
return true;
1514
}
16-
1715
}
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package io.eigr.spawn.api.actors;
22

3-
public abstract class StatelessActor extends BaseActor {
3+
public interface StatelessActor extends BaseActor {
44
@Override
5-
public Boolean isStateful() {
5+
default Boolean isStateful() {
66
return false;
77
}
88
}

src/test/java/io/eigr/spawn/MyTestActorEntity.java

Lines changed: 0 additions & 45 deletions
This file was deleted.

src/test/java/io/eigr/spawn/test/actors/ActorWithConstructor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
import static io.eigr.spawn.api.actors.behaviors.ActorBehavior.action;
1515
import static io.eigr.spawn.api.actors.behaviors.ActorBehavior.name;
16-
public final class ActorWithConstructor extends StatefulActor<State> {
16+
public final class ActorWithConstructor implements StatefulActor<State> {
1717

1818
private String defaultMessage;
1919

src/test/java/io/eigr/spawn/test/actors/JoeActor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
import static io.eigr.spawn.api.actors.behaviors.ActorBehavior.*;
1515

16-
public final class JoeActor extends StatefulActor<State> {
16+
public final class JoeActor implements StatefulActor<State> {
1717

1818
@Override
1919
public ActorBehavior configure(BehaviorCtx context) {

src/test/java/io/eigr/spawn/test/actors/StatelessNamedActor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
import static io.eigr.spawn.api.actors.behaviors.ActorBehavior.action;
1515
import static io.eigr.spawn.api.actors.behaviors.ActorBehavior.name;
1616

17-
public final class StatelessNamedActor extends StatelessActor {
17+
public class StatelessNamedActor implements StatelessActor {
1818

1919
@Override
2020
public ActorBehavior configure(BehaviorCtx context) {

src/test/java/io/eigr/spawn/test/actors/UnNamedActor.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,16 @@
55
import io.eigr.spawn.api.actors.Value;
66
import io.eigr.spawn.api.actors.behaviors.ActorBehavior;
77
import io.eigr.spawn.api.actors.behaviors.BehaviorCtx;
8-
import io.eigr.spawn.api.actors.behaviors.NamedActorBehavior;
98
import io.eigr.spawn.api.actors.behaviors.UnNamedActorBehavior;
109
import io.eigr.spawn.internal.ActionBindings;
1110
import io.eigr.spawn.java.test.domain.Actor.Reply;
1211
import io.eigr.spawn.java.test.domain.Actor.Request;
1312
import io.eigr.spawn.java.test.domain.Actor.State;
1413

15-
import static io.eigr.spawn.api.actors.behaviors.ActorBehavior.*;
14+
import static io.eigr.spawn.api.actors.behaviors.ActorBehavior.action;
15+
import static io.eigr.spawn.api.actors.behaviors.ActorBehavior.name;
1616

17-
public final class UnNamedActor extends StatefulActor<State> {
17+
public final class UnNamedActor implements StatefulActor<State> {
1818

1919
@Override
2020
public ActorBehavior configure(BehaviorCtx context) {

0 commit comments

Comments
 (0)