Hi Alan,

that's right, I did not call (reset) before reloading the page. But that's 
what happens sometimes, you change some things, don't call reset and then 
an exception will be thrown. Afterwards the state seems to be broken and 
nothing works anymore.
In this special case, when I change the implementation of (add-job), call 
reset and then reload the page no exception appears, and I can see the 
change.

And your second remark is true too, the server was not shutdown, because of 
the exception I guess, when I try to call (stop) explicitly I get this 
error:
component-test.user=> (stop)
;; Shutting down HTTP-Kit server

NullPointerException   component-test.server.Server (server.clj:15)
component-test.user=>

I mean, it's ok, one could say you have to call (reset) after every change, 
but sometimes one makes mistakes while coding and then you will get an 
exception too, which leads to a needed repl restart. And I just wonder if 
there is some way to get around that.

Best Regards,
Sven

Am Sonntag, 10. August 2014 04:30:57 UTC+2 schrieb Alan Moore:
>
>
>
> On Saturday, August 9, 2014 3:04:03 PM UTC-7, Sven Richter wrote:
>>
>> Hi,
>>
>> 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).
>> 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)
>> ...
>>
>
> It just looks like the code didn't get relaoded.
>  
>
>>
>> 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)
>>
>
> The server isn't being shut down by the reset or anything else as far as I 
> can see.
>
> The log message ";; Shutting down HTTP-Kit server" doesn't appear 
> anywhere in the output you supplied so I'm not sure the server's stop 
> lifecycle method is being called and in any case it doesn't appear to 
> actually shut down the server - it just calls (server)... whatever that 
> does... I'm not sure.
>
> Good luck.
>
> Alan
>
>

-- 
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.

Reply via email to