diff --git a/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/actor/ActorInfo.java b/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/actor/ActorInfo.java index 1ce086fd..d139dc73 100644 --- a/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/actor/ActorInfo.java +++ b/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/actor/ActorInfo.java @@ -1,28 +1,27 @@ package tech.powerjob.remote.framework.actor; +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; + +import java.util.List; + /** * ActorInfo * * @author tjq * @since 2022/12/31 */ +@Getter +@Setter +@Accessors(chain = true) public class ActorInfo { - private final Object actor; + private Object actor; - private final Actor anno; + private Actor anno; - public ActorInfo(Object actor, Actor anno) { - this.actor = actor; - this.anno = anno; - } + private List handlerInfos; - public Object getActor() { - return actor; - } - - public Actor getAnno() { - return anno; - } } diff --git a/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/cs/CSInitializer.java b/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/cs/CSInitializer.java index 4afd5b56..16ebd6f7 100644 --- a/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/cs/CSInitializer.java +++ b/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/cs/CSInitializer.java @@ -1,5 +1,6 @@ package tech.powerjob.remote.framework.cs; +import tech.powerjob.remote.framework.actor.ActorInfo; import tech.powerjob.remote.framework.actor.HandlerInfo; import tech.powerjob.remote.framework.transporter.Transporter; @@ -34,7 +35,7 @@ public interface CSInitializer extends Closeable { /** * bind Actor, publish handler's service - * @param handlerInfos handler infos + * @param actorInfos actor infos */ - void bindHandlers(List handlerInfos); + void bindHandlers(List actorInfos); } diff --git a/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/engine/impl/HandlerFactory.java b/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/engine/impl/ActorFactory.java similarity index 57% rename from powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/engine/impl/HandlerFactory.java rename to powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/engine/impl/ActorFactory.java index e0cb2fb0..658484c0 100644 --- a/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/engine/impl/HandlerFactory.java +++ b/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/engine/impl/ActorFactory.java @@ -23,36 +23,9 @@ import java.util.Set; * @since 2022/12/31 */ @Slf4j -class HandlerFactory { +class ActorFactory { - public static List load() { - List actorInfos = loadActorInfos(); - List ret = Lists.newArrayList(); - actorInfos.forEach(actorInfo -> { - Actor anno = actorInfo.getAnno(); - String rootPath = anno.path(); - Object actor = actorInfo.getActor(); - Set allHandlerMethods = ReflectionUtils.getAllMethods(actor.getClass(), (input -> input != null && input.isAnnotationPresent(Handler.class))); - allHandlerMethods.forEach(handlerMethod -> { - Handler handlerMethodAnnotation = handlerMethod.getAnnotation(Handler.class); - - HandlerLocation handlerLocation = new HandlerLocation() - .setRootPath(rootPath) - .setMethodPath(handlerMethodAnnotation.path()); - - - HandlerInfo handlerInfo = new HandlerInfo() - .setActorInfo(actorInfo) - .setMethod(handlerMethod) - .setLocation(handlerLocation); - ret.add(handlerInfo); - }); - - }); - return ret; - } - - static List loadActorInfos() { + static List load() { Reflections reflections = new Reflections(OmsConstant.PACKAGE); final Set> typesAnnotatedWith = reflections.getTypesAnnotatedWith(Actor.class); @@ -64,7 +37,10 @@ class HandlerFactory { log.info("[ActorFactory] load Actor[clz={},path={}] successfully!", clz, anno.path()); - actorInfos.add(new ActorInfo(object, anno)); + ActorInfo actorInfo = new ActorInfo().setActor(object).setAnno(anno); + actorInfo.setHandlerInfos(loadHandlerInfos4Actor(actorInfo)); + + actorInfos.add(actorInfo); } catch (Throwable t) { log.error("[ActorFactory] process Actor[{}] failed!", clz); ExceptionUtils.rethrow(t); @@ -73,4 +49,28 @@ class HandlerFactory { return actorInfos; } + + private static List loadHandlerInfos4Actor(ActorInfo actorInfo) { + List ret = Lists.newArrayList(); + + Actor anno = actorInfo.getAnno(); + String rootPath = anno.path(); + Object actor = actorInfo.getActor(); + Set allHandlerMethods = ReflectionUtils.getAllMethods(actor.getClass(), (input -> input != null && input.isAnnotationPresent(Handler.class))); + allHandlerMethods.forEach(handlerMethod -> { + Handler handlerMethodAnnotation = handlerMethod.getAnnotation(Handler.class); + + HandlerLocation handlerLocation = new HandlerLocation() + .setRootPath(rootPath) + .setMethodPath(handlerMethodAnnotation.path()); + + + HandlerInfo handlerInfo = new HandlerInfo() + .setActorInfo(actorInfo) + .setMethod(handlerMethod) + .setLocation(handlerLocation); + ret.add(handlerInfo); + }); + return ret; + } } diff --git a/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/engine/impl/PowerJobRemoteEngine.java b/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/engine/impl/PowerJobRemoteEngine.java index 1ee8cc44..0713b72e 100644 --- a/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/engine/impl/PowerJobRemoteEngine.java +++ b/powerjob-remote/powerjob-remote-framework/src/main/java/tech/powerjob/remote/framework/engine/impl/PowerJobRemoteEngine.java @@ -2,7 +2,7 @@ package tech.powerjob.remote.framework.engine.impl; import com.google.common.base.Stopwatch; import lombok.extern.slf4j.Slf4j; -import tech.powerjob.remote.framework.actor.HandlerInfo; +import tech.powerjob.remote.framework.actor.ActorInfo; import tech.powerjob.remote.framework.cs.CSInitializer; import tech.powerjob.remote.framework.cs.CSInitializerConfig; import tech.powerjob.remote.framework.engine.EngineConfig; @@ -27,7 +27,7 @@ public class PowerJobRemoteEngine implements RemoteEngine { EngineOutput engineOutput = new EngineOutput(); log.info("[PowerJobRemoteEngine] start remote engine with config: {}", engineConfig); - List handlerInfos = HandlerFactory.load(); + List actorInfos = ActorFactory.load(); List csInitializerList = CSInitializerFactory.build(engineConfig.getTypes()); csInitializerList.forEach(csInitializer -> { @@ -44,7 +44,7 @@ public class PowerJobRemoteEngine implements RemoteEngine { Transporter transporter = csInitializer.buildTransporter(); engineOutput.getType2Transport().put(type, transporter); - csInitializer.bindHandlers(handlerInfos); + csInitializer.bindHandlers(actorInfos); log.info("[PowerJobRemoteEngine] startup CSInitializer[type={}] successfully, cost: {}", type, sw); }); diff --git a/powerjob-remote/powerjob-remote-framework/src/test/java/tech/powerjob/remote/framework/engine/impl/HandlerFactoryTest.java b/powerjob-remote/powerjob-remote-framework/src/test/java/tech/powerjob/remote/framework/engine/impl/ActorFactoryTest.java similarity index 56% rename from powerjob-remote/powerjob-remote-framework/src/test/java/tech/powerjob/remote/framework/engine/impl/HandlerFactoryTest.java rename to powerjob-remote/powerjob-remote-framework/src/test/java/tech/powerjob/remote/framework/engine/impl/ActorFactoryTest.java index 60c87eb0..7ec58e42 100644 --- a/powerjob-remote/powerjob-remote-framework/src/test/java/tech/powerjob/remote/framework/engine/impl/HandlerFactoryTest.java +++ b/powerjob-remote/powerjob-remote-framework/src/test/java/tech/powerjob/remote/framework/engine/impl/ActorFactoryTest.java @@ -3,15 +3,12 @@ package tech.powerjob.remote.framework.engine.impl; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Test; import tech.powerjob.remote.framework.actor.ActorInfo; -import tech.powerjob.remote.framework.actor.HandlerInfo; import tech.powerjob.remote.framework.test.TestActor; import java.util.List; import java.util.Set; import java.util.stream.Collectors; -import static org.junit.jupiter.api.Assertions.*; - /** * HandlerFactoryTest * @@ -19,20 +16,17 @@ import static org.junit.jupiter.api.Assertions.*; * @since 2022/12/31 */ @Slf4j -class HandlerFactoryTest { +class ActorFactoryTest { @Test void load() { - final List handlerInfos = HandlerFactory.load(); - log.info("[HandlerFactoryTest] handlerInfos: {}", handlerInfos); - } + final List actorInfos = ActorFactory.load(); + log.info("[ActorFactoryTest] actorInfos: {}", actorInfos); - @Test - void loadActorInfos() { - final List actorInfos = HandlerFactory.loadActorInfos(); final Set clzNames = actorInfos.stream().map(x -> x.getActor().getClass().getName()).collect(Collectors.toSet()); - log.info("[HandlerFactoryTest] all load clzNames: {}", clzNames); + log.info("[ActorFactoryTest] all load clzNames: {}", clzNames); assert clzNames.contains(TestActor.class.getName()); } + } \ No newline at end of file diff --git a/powerjob-remote/powerjob-remote-framework/src/test/java/tech/powerjob/remote/framework/test/TestCSInitializer.java b/powerjob-remote/powerjob-remote-framework/src/test/java/tech/powerjob/remote/framework/test/TestCSInitializer.java index 0f09c45a..53ce61c3 100644 --- a/powerjob-remote/powerjob-remote-framework/src/test/java/tech/powerjob/remote/framework/test/TestCSInitializer.java +++ b/powerjob-remote/powerjob-remote-framework/src/test/java/tech/powerjob/remote/framework/test/TestCSInitializer.java @@ -1,6 +1,7 @@ package tech.powerjob.remote.framework.test; import lombok.extern.slf4j.Slf4j; +import tech.powerjob.remote.framework.actor.ActorInfo; import tech.powerjob.remote.framework.actor.HandlerInfo; import tech.powerjob.remote.framework.cs.CSInitializer; import tech.powerjob.remote.framework.cs.CSInitializerConfig; @@ -34,8 +35,8 @@ public class TestCSInitializer implements CSInitializer { } @Override - public void bindHandlers(List handlerInfos) { - log.info("TestCSInitializer#bindHandlers"); + public void bindHandlers(List actorInfos) { + log.info("TestCSInitializer#actorInfos"); } @Override diff --git a/powerjob-remote/powerjob-remote-impl-akka/src/main/java/tech/powerjob/remote/akka/AkkaCSInitializer.java b/powerjob-remote/powerjob-remote-impl-akka/src/main/java/tech/powerjob/remote/akka/AkkaCSInitializer.java index bbfe61b1..d3350dfe 100644 --- a/powerjob-remote/powerjob-remote-impl-akka/src/main/java/tech/powerjob/remote/akka/AkkaCSInitializer.java +++ b/powerjob-remote/powerjob-remote-impl-akka/src/main/java/tech/powerjob/remote/akka/AkkaCSInitializer.java @@ -7,6 +7,7 @@ import akka.actor.Props; import com.google.common.collect.Maps; import com.typesafe.config.Config; import com.typesafe.config.ConfigFactory; +import tech.powerjob.remote.framework.actor.ActorInfo; import tech.powerjob.remote.framework.actor.HandlerInfo; import tech.powerjob.remote.framework.base.Address; import tech.powerjob.remote.framework.base.ServerType; @@ -64,7 +65,7 @@ public class AkkaCSInitializer implements CSInitializer { } @Override - public void bindHandlers(List handlerInfos) { + public void bindHandlers(List actorInfos) { }