Hi, First I would like to thank everybody for your answers and hints.
I setup a small project you can find here: https://github.com/sveri/component_test You can run it with lein repl and then calling (go). I have three questions/problems for this one: 1. Did I separate the handler and the server correctly (I was trying to follow your advices)? 2. In scheduler.clj I defined a protocol (additionally to the lifecycle protocol) and a record implementing that protocol. I create a new instance of that record and pass it down to the handler and there to the routes. Now, when I open a webpage and go to http://localhost:3000/sched everything works fine. Next I edit the add-job function in scheduler.cljs to print something different like this: (add-job [this] (println "new sys out")) Just a small change is enough. If you go to the webpage again and try to reload it an exception will be thrown: Sat Aug 09 23:52:28 CEST 2014 [worker-3] ERROR - GET /sched java.lang.IllegalArgumentException: No implementation of method: :add-job of protocol: #'component-test.scheduler/ISched found for class: component_test.schedul er.Sched at clojure.core$_cache_protocol_fn.invoke(core_deftype.clj:544) at component_test.scheduler$eval6553$fn__6554$G__6544__6559.invoke(scheduler.clj:6) at component_test.routes$sched_in.invoke(routes.clj:8) at component_test.routes$home_routes$fn__3312.invoke(routes.clj:19) at compojure.core$make_route$fn__2331.invoke(core.clj:99) at compojure.core$if_route$fn__2315.invoke(core.clj:45) ... I dont really understand why that happens and any hints regarding what I am doing wrong would be great. And this leads to my last question. 3. After having an exception I will usually try to reset the system with: (reset), but in this case (and many different other cases) I will just get another error: component-test.user=> (reset) :reloading (component-test.scheduler component-test.routes component-test.server component-test.handler component-test.core component-test.user component-test.c ore-test) ;; Starting HTTP-Kit server on port 3000 BindException Address already in use: bind sun.nio.ch.Net.bind0 (Net.java:-2) And now all I can do is exit the repl and start it again to get my code running. This is exactly what I dont want to do all the time and the problem I thought would be solved by the component library, so once more, every hint you have for me will be valuable about what I can do and what not. Best Regards, Sven Am Freitag, 8. August 2014 13:16:49 UTC+2 schrieb Sven Richter: > > Hi, > > I am trying to integrate Stuarts component library into my application. I > am not sure if I use it correctly or do something else wrong or just have a > wrong mindset. So I will explain how I am currently using it and the > problem I see with it. > > I have three components: database, a scheduler and web application (note > that my example is simplified to get faster to the point). These components > are built like this: > > (component/system-map > :database (db db-uri) > :scheduler (component/using (scheduler) [:database]) > :web-app (component/using (web-app) > [:database > :scheduler] )) > > And in my web-app I do something like this: > > (start [component] > (let [db-conn (get-in web-app [:database :db-conn])] > (assoc component :server > (run-server (make-handler web-app db-conn) {:port > port})))) > > And make-handler is a middleware that associates the database component > into the request map. > > Now as I added the scheduler to my system it occured to me that I will > have to associate the scheduler into the request map too to access it and I > might have to do that for every other component that is coming along the > road. > So basically I am tying my web-app to to all these components and I am > tying some components to other components (like scheduler component to the > database component). > > And by tying this things together this way they do depend on each other > and I cannot move them anymore. This came to my mind as I started thinking > about microservices. > > So let's say I want to convert the scheduler into a restful microservice, > it's hard to pass in a database connection into it via HTTP, so it seems > like it's not decoupled enough. Does that make sense? > > Am I using it wrong? Is it ok to pass all kind of dependencies into the > request map and shove it around in the web application? Any other > suggestions / remarks? > > Best Regards, > Sven > -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com 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 clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.