From e31594e20e4f8545ac336d1be987ddbb9c77b056 Mon Sep 17 00:00:00 2001 From: Erik Schultink Date: Wed, 22 May 2024 20:55:52 -0700 Subject: [PATCH] servlet injection --- .../tools/pipeline/DefaultDIModule.java | 45 ++++++++++++------- .../impl/servlets/AbortJobHandler.java | 8 ++-- .../impl/servlets/DeleteJobHandler.java | 10 +++-- .../impl/servlets/JsonClassFilterHandler.java | 12 ++--- .../impl/servlets/JsonListHandler.java | 10 +++-- .../impl/servlets/JsonTreeHandler.java | 5 ++- .../impl/servlets/PipelineServlet.java | 20 ++++++--- .../pipeline/impl/servlets/TaskHandler.java | 10 ++--- 8 files changed, 72 insertions(+), 48 deletions(-) diff --git a/java/src/main/java/com/google/appengine/tools/pipeline/DefaultDIModule.java b/java/src/main/java/com/google/appengine/tools/pipeline/DefaultDIModule.java index b5d4f022..a53983d6 100644 --- a/java/src/main/java/com/google/appengine/tools/pipeline/DefaultDIModule.java +++ b/java/src/main/java/com/google/appengine/tools/pipeline/DefaultDIModule.java @@ -6,6 +6,7 @@ import com.google.appengine.tools.pipeline.impl.backend.*; import com.google.auth.oauth2.GoogleCredentials; import com.google.cloud.datastore.DatastoreOptions; +import dagger.Binds; import dagger.Module; import dagger.Provides; import lombok.SneakyThrows; @@ -13,10 +14,13 @@ import javax.inject.Singleton; //TODO: split internals v stuff that can be re-used by others -@Module +@Module( + includes = DefaultDIModule.Bindings.class +) public class DefaultDIModule { - @Provides @Singleton + @Provides + @Singleton @SneakyThrows AppEngineBackEnd.Options appEngineBackEndOptions() { return AppEngineBackEnd.Options.builder() @@ -26,40 +30,47 @@ AppEngineBackEnd.Options appEngineBackEndOptions() { .build(); } - @Provides @Singleton + @Provides + @Singleton PipelineBackEnd pipelineBackEnd(AppEngineBackEnd appEngineBackEnd) { return appEngineBackEnd; } - @Provides @Singleton - PipelineBackEnd.Options backendOptions(AppEngineBackEnd.Options options) { - return options; - } - - - @Provides @Singleton + @Provides + @Singleton AppEngineEnvironment appEngineEnvironment() { return new AppEngineStandardGen2(); } - @Provides @Singleton + @Provides + @Singleton AppEngineTaskQueue appEngineTaskQueue() { return new AppEngineTaskQueue(); } - @Provides @Singleton + + @Provides + @Singleton AppEngineBackEnd appEngineBackEnd(AppEngineBackEnd.Options options, AppEngineTaskQueue appEngineTaskQueue) { return new AppEngineBackEnd(options.getDatastoreOptions().getService(), appEngineTaskQueue); } - @Provides @Singleton + @Provides + @Singleton PipelineManager pipelineManager(AppEngineBackEnd backend) { return new PipelineManager(backend); } - @Provides @Singleton - PipelineRunner pipelineRunner(PipelineManager pipelineManager) { - return pipelineManager; - } + @Module + interface Bindings { + @Binds + PipelineBackEnd.Options backendOptions(AppEngineBackEnd.Options options); + + @Binds + PipelineRunner pipelineRunner(PipelineManager pipelineManager); + + @Binds + PipelineOrchestrator pipelineOrchestrator(PipelineManager pipelineManager); + } } diff --git a/java/src/main/java/com/google/appengine/tools/pipeline/impl/servlets/AbortJobHandler.java b/java/src/main/java/com/google/appengine/tools/pipeline/impl/servlets/AbortJobHandler.java index 54dbb9a2..78588650 100644 --- a/java/src/main/java/com/google/appengine/tools/pipeline/impl/servlets/AbortJobHandler.java +++ b/java/src/main/java/com/google/appengine/tools/pipeline/impl/servlets/AbortJobHandler.java @@ -16,8 +16,7 @@ import com.google.appengine.tools.pipeline.NoSuchObjectException; import com.google.appengine.tools.pipeline.PipelineOrchestrator; -import com.google.appengine.tools.pipeline.PipelineRunner; -import com.google.appengine.tools.pipeline.impl.PipelineManager; + import lombok.RequiredArgsConstructor; import java.io.IOException; @@ -25,7 +24,7 @@ import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; - +import javax.inject.Inject; /** * @author ozarov@google.com (Arie Ozarov) */ @@ -35,7 +34,8 @@ public class AbortJobHandler { public static final String PATH_COMPONENT = "rpc/abort"; private static final String ROOT_PIPELINE_ID = "root_pipeline_id"; - private final PipelineOrchestrator pipelineManager; + @Inject + PipelineOrchestrator pipelineManager; public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException { diff --git a/java/src/main/java/com/google/appengine/tools/pipeline/impl/servlets/DeleteJobHandler.java b/java/src/main/java/com/google/appengine/tools/pipeline/impl/servlets/DeleteJobHandler.java index e50b8e3f..29b3393b 100644 --- a/java/src/main/java/com/google/appengine/tools/pipeline/impl/servlets/DeleteJobHandler.java +++ b/java/src/main/java/com/google/appengine/tools/pipeline/impl/servlets/DeleteJobHandler.java @@ -16,8 +16,7 @@ import com.google.appengine.tools.pipeline.NoSuchObjectException; import com.google.appengine.tools.pipeline.PipelineRunner; -import com.google.appengine.tools.pipeline.impl.PipelineManager; -import lombok.RequiredArgsConstructor; +import lombok.AllArgsConstructor; import java.io.IOException; @@ -25,16 +24,19 @@ import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; +import javax.inject.Inject; + /** * @author ozarov@google.com (Arie Ozarov) */ -@RequiredArgsConstructor +@AllArgsConstructor public class DeleteJobHandler { public static final String PATH_COMPONENT = "rpc/delete"; private static final String ROOT_PIPELINE_ID = "root_pipeline_id"; - private final PipelineRunner pipelineManager; + @Inject + PipelineRunner pipelineManager; public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException { diff --git a/java/src/main/java/com/google/appengine/tools/pipeline/impl/servlets/JsonClassFilterHandler.java b/java/src/main/java/com/google/appengine/tools/pipeline/impl/servlets/JsonClassFilterHandler.java index 1e4f9a03..6aebb86b 100644 --- a/java/src/main/java/com/google/appengine/tools/pipeline/impl/servlets/JsonClassFilterHandler.java +++ b/java/src/main/java/com/google/appengine/tools/pipeline/impl/servlets/JsonClassFilterHandler.java @@ -18,8 +18,8 @@ import static java.util.Collections.singletonMap; import com.google.appengine.tools.pipeline.PipelineRunner; -import com.google.appengine.tools.pipeline.impl.PipelineManager; -import lombok.RequiredArgsConstructor; + +import lombok.AllArgsConstructor; import java.io.IOException; import java.util.Set; @@ -27,16 +27,18 @@ import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; +import javax.inject.Inject; + /** * @author rudominer@google.com (Mitch Rudominer) */ -@RequiredArgsConstructor +@AllArgsConstructor public class JsonClassFilterHandler { public static final String PATH_COMPONENT = "rpc/class_paths"; - - private final PipelineRunner pipelineManager; + @Inject + PipelineRunner pipelineManager; public void doGet(@SuppressWarnings("unused") HttpServletRequest req, HttpServletResponse resp) throws IOException { diff --git a/java/src/main/java/com/google/appengine/tools/pipeline/impl/servlets/JsonListHandler.java b/java/src/main/java/com/google/appengine/tools/pipeline/impl/servlets/JsonListHandler.java index 483b73a1..ea6bfede 100644 --- a/java/src/main/java/com/google/appengine/tools/pipeline/impl/servlets/JsonListHandler.java +++ b/java/src/main/java/com/google/appengine/tools/pipeline/impl/servlets/JsonListHandler.java @@ -15,10 +15,9 @@ package com.google.appengine.tools.pipeline.impl.servlets; import com.google.appengine.tools.pipeline.PipelineRunner; -import com.google.appengine.tools.pipeline.impl.PipelineManager; import com.google.appengine.tools.pipeline.impl.model.JobRecord; import com.google.appengine.tools.pipeline.util.Pair; -import lombok.RequiredArgsConstructor; +import lombok.AllArgsConstructor; import java.io.IOException; @@ -26,10 +25,12 @@ import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; +import javax.inject.Inject; + /** * @author tkaitchuck@google.com (Tom Kaitchuck) */ -@RequiredArgsConstructor +@AllArgsConstructor public class JsonListHandler { public static final String PATH_COMPONENT = "rpc/list"; @@ -37,7 +38,8 @@ public class JsonListHandler { private static final String CURSOR_PARAMETER = "cursor"; private static final String LIMIT_PARAMETER = "limit"; - private final PipelineRunner pipelineManager; + @Inject + PipelineRunner pipelineManager; public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException { diff --git a/java/src/main/java/com/google/appengine/tools/pipeline/impl/servlets/JsonTreeHandler.java b/java/src/main/java/com/google/appengine/tools/pipeline/impl/servlets/JsonTreeHandler.java index 670259a9..94300dae 100755 --- a/java/src/main/java/com/google/appengine/tools/pipeline/impl/servlets/JsonTreeHandler.java +++ b/java/src/main/java/com/google/appengine/tools/pipeline/impl/servlets/JsonTreeHandler.java @@ -16,7 +16,6 @@ import com.google.appengine.tools.pipeline.NoSuchObjectException; import com.google.appengine.tools.pipeline.PipelineRunner; -import com.google.appengine.tools.pipeline.impl.PipelineManager; import com.google.appengine.tools.pipeline.impl.model.JobRecord; import com.google.appengine.tools.pipeline.impl.model.PipelineObjects; import lombok.RequiredArgsConstructor; @@ -26,6 +25,7 @@ import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; +import javax.inject.Inject; /** * @author rudominer@google.com (Mitch Rudominer) @@ -37,7 +37,8 @@ public class JsonTreeHandler { private static final String ROOT_PIPELINE_ID = "root_pipeline_id"; - private final PipelineRunner pipelineManager; + @Inject + PipelineRunner pipelineManager; public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException { diff --git a/java/src/main/java/com/google/appengine/tools/pipeline/impl/servlets/PipelineServlet.java b/java/src/main/java/com/google/appengine/tools/pipeline/impl/servlets/PipelineServlet.java index bbc45f77..d93a96ed 100755 --- a/java/src/main/java/com/google/appengine/tools/pipeline/impl/servlets/PipelineServlet.java +++ b/java/src/main/java/com/google/appengine/tools/pipeline/impl/servlets/PipelineServlet.java @@ -96,11 +96,17 @@ private Pair parseRequestType(HttpServletRequest req) { return Pair.of(path, requestType); } + @Inject transient AbortJobHandler abortJobHandler; + @Inject transient DeleteJobHandler deleteJobHandler; + @Inject transient JsonClassFilterHandler jsonClassFilterHandler; + @Inject transient JsonListHandler jsonListHandler; + @Inject transient JsonTreeHandler jsonTreeHandler; + @Inject transient TaskHandler taskHandler; @Inject @@ -113,16 +119,16 @@ public void init() throws ServletException { // TODO: fix this? may have second copy IF user overrides; OK? if (pipelineManager == null) { - DIUtil.inject(DaggerDefaultContainer.class, this); + if (DIUtil.isInjectable(this)) { + DIUtil.inject(this); + } else { + //rely on a default + DIUtil.inject(DaggerDefaultContainer.class, this); + } } //TODO: move these to DI? - abortJobHandler = new AbortJobHandler((PipelineOrchestrator) pipelineManager); - deleteJobHandler = new DeleteJobHandler(pipelineManager); - jsonClassFilterHandler = new JsonClassFilterHandler(pipelineManager); - jsonListHandler = new JsonListHandler(pipelineManager); - jsonTreeHandler = new JsonTreeHandler(pipelineManager); - taskHandler = new TaskHandler((PipelineManager) pipelineManager); + } @Override diff --git a/java/src/main/java/com/google/appengine/tools/pipeline/impl/servlets/TaskHandler.java b/java/src/main/java/com/google/appengine/tools/pipeline/impl/servlets/TaskHandler.java index 80e523a0..9cff67a8 100755 --- a/java/src/main/java/com/google/appengine/tools/pipeline/impl/servlets/TaskHandler.java +++ b/java/src/main/java/com/google/appengine/tools/pipeline/impl/servlets/TaskHandler.java @@ -14,13 +14,11 @@ package com.google.appengine.tools.pipeline.impl.servlets; -import com.google.appengine.tools.pipeline.PipelineOrchestrator; -import com.google.appengine.tools.pipeline.PipelineRunner; import com.google.appengine.tools.pipeline.impl.PipelineManager; import com.google.appengine.tools.pipeline.impl.tasks.Task; import com.google.appengine.tools.pipeline.impl.util.StringUtils; import com.google.apphosting.api.ApiProxy; -import lombok.RequiredArgsConstructor; +import lombok.AllArgsConstructor; import java.util.Enumeration; import java.util.Map; @@ -29,13 +27,14 @@ import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; +import javax.inject.Inject; /** * A ServletHelper that handles all requests from the task queue. * * @author rudominer@google.com (Mitch Rudominer) */ -@RequiredArgsConstructor +@AllArgsConstructor public class TaskHandler { private static Logger logger = Logger.getLogger(TaskHandler.class.getName()); @@ -45,7 +44,8 @@ public class TaskHandler { public static final String TASK_RETRY_COUNT_HEADER = "X-AppEngine-TaskRetryCount"; public static final String TASK_QUEUE_NAME_HEADER = "X-AppEngine-QueueName"; - private final PipelineManager pipelineManager; + @Inject + PipelineManager pipelineManager; public static String handleTaskUrl() { return PipelineServlet.baseUrl() + PATH_COMPONENT;