Hi…
playing around with Stuart Sierras component library I found some behavior
(code at end) that I find odd.
M sample has just two components, data and compute, where data is injected
into compute. On start data associates a data map and on stop dissociates
it.
compute uses a value from data's map to compute.
What I found is that after system stop the started version of data is still
associated to compute, while the data component in SystemMap is stopped.
So, when do
(def my-system (make-my-system {:factor 2}))
(alter-var-root #'my-system component/start-system)
(alter-var-root #'my-system component/stop-system)
(my-compute (:mycomputecomp my-system) 16)
my-compute should (as data map is nil'ed on stop) crash but doesn't.
Calling
(alter-var-root #'my-system component/stop-system)
again fixes it and my-compute crashes as expected.
Any ideas?
Ciao
…Jochen
(ns foo.core
(:require [com.stuartsierra.component :as component]))
(defrecord MyDataComponent [data]
component/Lifecycle
(start [this]
(println "Starting MyDataComponent")
(assoc this :data {:foo 42}))
(stop [this]
(println "Stopping MyDataComponent")
(dissoc this :data)))
(defn my-data-component []
(->MyDataComponent nil))
(defn mydatacomp-foo [mydatacomp]
(get-in mydatacomp [:data :foo]))
(defrecord MyComputeComponent [factor mydatacomp]
component/Lifecycle
(start [this]
(println "Starting MyComputeComponent")
this)
(stop [this]
(println "Stopping MyComputeComponent")
this))
(defn my-compute-component [factor]
(map->MyComputeComponent {:factor factor}))
(defn my-compute [mycomputecomp offset]
(let [factor (:factor mycomputecomp)
foo (mydatacomp-foo (:mydatacomp mycomputecomp))]
(+ (* factor foo) offset)))
(defn make-my-system [config-options]
(let [{:keys [factor]} config-options]
(component/system-map
:mydatacomp (my-data-component)
:mycomputecomp (component/using
(my-compute-component factor)
[:mydatacomp]))))
;;;;;; running
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(comment
(def my-system (make-my-system {:factor 2}))
(alter-var-root #'my-system component/start-system)
(alter-var-root #'my-system component/stop-system)
(my-compute (:mycomputecomp my-system) 16)
)
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
---
You received this message because you are subscribed to the Google Groups
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.