diff --git a/src/metabase/task.clj b/src/metabase/task.clj index 3cd58ff339ed2b553d341c0f32c9c649b859e325..0bf425489f5cd0e767f02624d81393f4f1065c4c 100644 --- a/src/metabase/task.clj +++ b/src/metabase/task.clj @@ -102,33 +102,8 @@ ;;; | Quartz Scheduler Class Load Helper | ;;; +----------------------------------------------------------------------------------------------------------------+ -;; Custom `ClassLoadHelper` implementation that makes sure to require the namespaces that tasks live in (to make sure -;; record types are loaded) and that uses our canonical ClassLoader. - -(defn- task-class-name->namespace-str - "Determine the namespace we need to load for one of our tasks. - - (task-class-name->namespace-str \"metabase.task.upgrade_checks.CheckForNewVersions\") - ;; -> \"metabase.task.upgrade-checks\"" - [class-name] - (-> class-name - (str/replace \_ \-) - (str/replace #"\.\w+$" ""))) - -(defn- require-task-namespace - "Since Metabase tasks are defined in Clojure-land we need to make sure we `require` the namespaces where they are - defined before we try to load the task classes." - [class-name] - ;; call `the-classloader` to force side-effects of making it the current thread context classloader - (classloader/the-classloader) - ;; only try to `require` metabase.task classes; don't do this for other stuff that gets shuffled thru here like - ;; Quartz classes - (when (str/starts-with? class-name "metabase.task.") - (require (symbol (task-class-name->namespace-str class-name))))) - (defn- load-class ^Class [^String class-name] - (require-task-namespace class-name) - (.loadClass (classloader/the-classloader) class-name)) + (Class/forName class-name true (classloader/the-classloader))) (defrecord ^:private ClassLoadHelper [] org.quartz.spi.ClassLoadHelper