Skip to content

Commit

Permalink
This needs to be a var to be visible in eval [IMMUTANT-575]
Browse files Browse the repository at this point in the history
  • Loading branch information
tobias committed Aug 31, 2015
1 parent a0049b8 commit 229e1a8
Showing 1 changed file with 34 additions and 32 deletions.
66 changes: 34 additions & 32 deletions wildfly/src/immutant/wildfly.clj
Expand Up @@ -45,38 +45,40 @@
(URL. (str "file" (last match)))
url))

(let [^Class module-class-loader-class (memoize #(u/try-import 'org.jboss.modules.ModuleClassLoader))]
(defn- get-resource-loaders
[cl]
(when (module-class-loader-class)
(-> (doto (.getDeclaredMethod (module-class-loader-class) "getResourceLoaders"
(make-array Class 0))
(.setAccessible true))
(.invoke cl (make-array Class 0)))))

(defn ^:no-doc get-module-loader-urls [loader]
(->> loader
get-resource-loaders
(map (comp if-exists? vfs->file loader->url))
(keep identity)))

(defn ^:no-doc extend-module-classloader-to-cjc []
(when (u/try-resolve 'clojure.java.classpath/URLClasspath)
(eval
`(extend-protocol clojure.java.classpath/URLClasspath
(module-class-loader-class)
(urls [cl#]
(get-module-loader-urls cl#))))))

(defn ^:no-doc extend-module-classloader-to-dynapath []
(when (u/try-resolve 'dynapath.dynamic-classpath/DynamicClasspath)
(eval
`(extend-protocol dynapath.dynamic-classpath/DynamicClasspath
(module-class-loader-class)
(can-read? [cl#] true)
(can-add? [cl#] false)
(classpath-urls [cl#]
(get-module-loader-urls cl#)))))))
(def ^:no-doc ^Class module-class-loader-class
(memoize #(u/try-import 'org.jboss.modules.ModuleClassLoader)))

(defn- get-resource-loaders
[cl]
(when (module-class-loader-class)
(-> (doto (.getDeclaredMethod (module-class-loader-class) "getResourceLoaders"
(make-array Class 0))
(.setAccessible true))
(.invoke cl (make-array Class 0)))))

(defn ^:no-doc get-module-loader-urls [loader]
(->> loader
get-resource-loaders
(map (comp if-exists? vfs->file loader->url))
(keep identity)))

(defn ^:no-doc extend-module-classloader-to-cjc []
(when (u/try-resolve 'clojure.java.classpath/URLClasspath)
(eval
`(extend-protocol clojure.java.classpath/URLClasspath
(module-class-loader-class)
(urls [cl#]
(get-module-loader-urls cl#))))))

(defn ^:no-doc extend-module-classloader-to-dynapath []
(when (u/try-resolve 'dynapath.dynamic-classpath/DynamicClasspath)
(eval
`(extend-protocol dynapath.dynamic-classpath/DynamicClasspath
(module-class-loader-class)
(can-read? [cl#] true)
(can-add? [cl#] false)
(classpath-urls [cl#]
(get-module-loader-urls cl#))))))

(defn ^:no-doc init-deployment
"Initializes an in-container deployment. Should be used by the
Expand Down

0 comments on commit 229e1a8

Please sign in to comment.