Skip to content

Commit

Permalink
http-gateway also uses bindings now
Browse files Browse the repository at this point in the history
  • Loading branch information
amitrathore committed Apr 7, 2009
1 parent 60fbcc4 commit 35ad64e
Show file tree
Hide file tree
Showing 5 changed files with 33 additions and 28 deletions.
16 changes: 9 additions & 7 deletions src/org/runa/swarmiji/client/client_core.clj
Expand Up @@ -2,27 +2,30 @@

(use 'org.runa.swarmiji.mpi.sevak-proxy)
(require '(org.danlarkin [json :as json]))
(use '[clojure.contrib.duck-streams :only (spit)])

(def swarmiji-sevak-init-value :__swarmiji-sevak-init__)

(defn response-value-from [sevak-data]
(if (= swarmiji-sevak-init-value sevak-data)
(throw (Exception. "Sevak not complete!")))
(if (not (= :success (keyword (sevak-data :status))))
(throw (Exception. "Sevak has errors!"))
(sevak-data :response)))
(throw (Exception. "Sevak has errors!")))
(sevak-data :response))

(defn on-swarm [sevak-service & args]
(let [sevak-data (ref :swarmiji-sevak-init)
(let [sevak-data (ref swarmiji-sevak-init-value)
on-swarm-response (fn [response-json-object]
(dosync (ref-set sevak-data response-json-object)))
on-swarm-proxy-client (new-proxy (name sevak-service) args on-swarm-response)]
(fn [accessor]
(cond
(= accessor :distributed?) true
(= accessor :complete?) (not (= :swarmiji-sevak-init @sevak-data))
(= accessor :complete?) (not (= swarmiji-sevak-init-value @sevak-data))
(= accessor :value) (response-value-from @sevak-data)
(= accessor :status) (@sevak-data :status)
(= accessor :exception) (@sevak-data :exception)
(= accessor :stacktrace) (@sevak-data :stacktrace)
(= accessor :_inner_ref) @sevak-data
(= accessor :__inner_ref) @sevak-data
:default (throw (Exception. (str "On-swarm proxy error - unknown message:" accessor)))))))

(defn all-complete? [swarm-requests]
Expand All @@ -40,7 +43,6 @@
(defmacro from-swarm [max-time-allowed swarm-requests expr]
(list 'do (list 'wait-until-completion swarm-requests max-time-allowed) expr))


(defn on-local [sevak-service-function & args]
(fn [accessor]
(cond
Expand Down
4 changes: 2 additions & 2 deletions src/org/runa/swarmiji/config/system_config.clj
Expand Up @@ -16,8 +16,8 @@
:log-to-console true
}
"development" {
:host "tank.cinchcorp.com"
;:host "rohanda.local"
;:host "tank.cinchcorp.com"
:host "rohanda.local"
:port 61613
:username "guest"
:password "guest"
Expand Down
6 changes: 5 additions & 1 deletion src/org/runa/swarmiji/http/web_server.clj
Expand Up @@ -8,6 +8,8 @@
(use 'org.runa.swarmiji.utils.general-utils)
(use 'org.runa.swarmiji.utils.logger)
(require '(org.danlarkin [json :as json]))
(use 'org.runa.swarmiji.config.system-config)
(use 'org.runa.swarmiji.sevak.sevak-core)

(defn is-get? [request]
(= (.toUpperCase (str (.getMethod request))) "GET"))
Expand Down Expand Up @@ -35,10 +37,12 @@
(defn grizzly-adapter-for [handler-functions-as-route-map]
(proxy [GrizzlyAdapter] []
(service [req res]
(service-http-request handler-functions-as-route-map req res))))
(with-swarmiji-bindings
(service-http-request handler-functions-as-route-map req res)))))

(defn boot-web-server [handler-functions-as-route-map port]
(let [gws (GrizzlyWebServer. port)]
(.addGrizzlyAdapter gws (grizzly-adapter-for handler-functions-as-route-map))
(log-message "Using config:" (operation-config))
(log-message "Started swarmiji-http-gateway on port" port)
(.start gws)))
28 changes: 17 additions & 11 deletions src/org/runa/swarmiji/sevak/sevak_core.clj
Expand Up @@ -10,7 +10,7 @@
(use 'org.runa.swarmiji.utils.logger)

(def sevaks (ref {}))
(def sevak-bindings (ref {}))
(def swarmiji-bindings (ref {}))

(defmacro sevak-runner [sevak-name sevak-args]
`(fn ~sevak-args
Expand All @@ -23,15 +23,21 @@
(dosync (ref-set sevaks (assoc @sevaks sevak-name# (fn ~args ~expr))))
(def ~service-name (sevak-runner sevak-name# ~args))))

(defmacro with-swarmiji-bindings [body]
`(do
(push-thread-bindings @swarmiji-bindings)
(try
~body
(finally
(pop-thread-bindings)))))

(defn handle-sevak-request [service-handler service-args]
(try
(push-thread-bindings @sevak-bindings)
{:response (apply service-handler service-args) :status :success}
(catch Exception e
(log-exception e)
{:exception (exception-name e) :stacktrace (stacktrace e) :status :error})
(finally
(pop-thread-bindings))))
(with-swarmiji-bindings
(try
{:response (apply service-handler service-args) :status :success}
(catch Exception e
(log-exception e)
{:exception (exception-name e) :stacktrace (stacktrace e) :status :error}))))

(defn sevak-request-handling-listener []
(proxy [Listener] []
Expand All @@ -49,7 +55,7 @@
(.subscribe client (queue-sevak-q-name) sevak-request-handler)))

(defmacro register-bindings [bindings]
`(dosync (ref-set sevak-bindings (hash-map ~@(var-ize bindings)))))
`(dosync (ref-set swarmiji-bindings (hash-map ~@(var-ize bindings)))))

(defmacro binding-for-swarmiji [bindings expr]
`(do
Expand All @@ -59,7 +65,7 @@

(defn boot-sevak-server []
(log-message "Starting sevaks in" *swarmiji-env* "mode")
(log-message "RabbitMQ config" (operation-config))
(log-message "System config:" (operation-config))
(log-message "Sevaks are offering the following" (count @sevaks) "services:" (keys @sevaks))
(start-sevak-listener))

Expand Down
7 changes: 0 additions & 7 deletions src/org/runa/swarmiji/utils/general_utils.clj
Expand Up @@ -19,10 +19,3 @@
(defn pop-thread-bindings []
(clojure.lang.Var/popThreadBindings))

(defmacro with-bindings [bindings-map body]
`(do
(. clojure.lang.Var (pushThreadBindings ~bindings-map)
(try
~body
(finally
(. clojure.lang.Var (popThreadBindings)))))))

0 comments on commit 35ad64e

Please sign in to comment.