> unless the error happens at runtime after a while when you're sure that > code already got executed and worked, but only errs after a while, > in which case that would be weird.
That seems to be what happens. I am glad you think it is weird because I found it very weird. I am reaching for straws here, but does the namespace change as the code executes? It occurs to me, in core.clj, when I call a function in another file, I have some alias introduced via "require": (:require [clojure.string :as st] [clojure.pprint :as pp] [clojure.java.io :as io] [clojure.java.jdbc :as jdbc] [clojure.data.json :as json] [clj-yaml.core :as yaml] [clj-time.core :as tyme] [clj-time.format :as tyme-format] [kiosks-clojure.debugging :as debug] [kiosks-clojure.memory_display :as mem] [kiosks-clojure.dates_as_strings :as das] [kiosks-clojure.update-model :as um] ;; etc In core, in -main, I start a new thread and call: (defn persist-data-to-database [] (. java.lang.Thread sleep 180000) (timbre/spy :debug "in persist-data-to-database: " (let [converted-document-to-be-persisted (get-data-to-be-persisted)] (pd/persist-data-to-database converted-document-to-be-persisted)))) Maybe I should not have re-used the same function name in 2 spaces. I will change the name. I seem to occasionally get this same error with other parts of the code, always that code outside of core.clj. I really have no clue what is going on, nor am I sure what my first step should be in debugging this. I am really clueless about the JVM. W dniu wtorek, 29 stycznia 2013 02:44:36 UTC-5 użytkownik AtKaaZ napisał: > > if not, could it be that the name of some namespace or function > changed(ie. renamed) but not the call to it? or something along the lines > of something being renamed but not in all places... unless the error > happens at runtime after a while when you're sure that code already got > executed and worked, but only errs after a while, in which case that would > be weird. > > > On Tue, Jan 29, 2013 at 8:38 AM, AtKaaZ <atk...@gmail.com <javascript:>>wrote: > >> It might be something like this(pasting here): >> >> The problem is the hyphen in the namespace. >> >> From the *Joy of Clojure* >> >> HYPHENS/UNDERSCORES If you decide to name your namespaces with hyphens, à >> la my-cool-lib, then the corresponding source file must be named with >> underscores in place of the hyphens (my_cool_lib.clj). >> >> Here is the underlying explanation: >> http://stackoverflow.com/q/4451693/32174 >> >> answered Nov 23 '11 at 4:10 >> <http://stackoverflow.com/users/32174/julien-chastang> >> Julien Chastang <http://stackoverflow.com/users/32174/julien-chastang> >> >> >> >> On Tue, Jan 29, 2013 at 8:03 AM, larry google groups < >> lawrenc...@gmail.com <javascript:>> wrote: >> >>> >>> Maybe someone can tell me where I went wrong on this one. >>> >>> I have an app. Written with Clojure 1.4. >>> >>> At first the app was very small, so I put all the code into core.clj. >>> When I got to about 500 or 600 lines of code, core.clj was too big, so >>> I started to break it up. There were some string-to-enlive-node >>> functions that I moved to a file I called >>> transform_strings_and_nodes.clj. >>> >>> The app keeps the most recent 15 minutes worth of session info in >>> memory, then saves it to the database. Eventually, when this is live, >>> tourists will arrive and interact with a kiosk and choose an >>> itinerary. The itinerary is bulky, a lot of HTML strings held in >>> memory. I began to wonder how bulky this might get. I thought I would >>> write a profile function, relying on Timbre >>> https://github.com/ptaoussanis/timbre. >>> >>> During development, I would have this function run in a thread and >>> call itself every 5 minutes. I decided I would hit the app with a lot >>> of dummy data, and the profile function would do stuff like time how >>> long it took to transform all the HTML strings in memory into Enlive >>> nodes. >>> >>> This was working for awhile. I am not sure what changed, but now I am >>> getting: >>> >>> Exception in thread "Thread-4" java.lang.NoClassDefFoundError: >>> kiosks_clojure/transform_strings_and_nodes >>> $join_all_tourist_itineraries_together$fn__115 >>> at kiosks_clojure.transform_strings_and_nodes >>> >>> $join_all_tourist_itineraries_together.invoke(transform_strings_and_nodes.clj: >>> 84) >>> at kiosks_clojure.transform_strings_and_nodes >>> >>> $render_html_string_to_enlive_nodes.invoke(transform_strings_and_nodes.clj: >>> 94) >>> at kiosks_clojure.transform_strings_and_nodes >>> >>> $prepare_render_html_string_to_enlive_nodes.invoke(transform_strings_and_nodes.clj: >>> 101) >>> at kiosks_clojure.transform_strings_and_nodes >>> >>> $profile_render_html_string_to_enlive_nodes.invoke(transform_strings_and_nodes.clj: >>> 105) >>> at clojure.lang.AFn.run(AFn.java:24) >>> at java.lang.Thread.run(Thread.java:722) >>> Caused by: java.lang.ClassNotFoundException: >>> kiosks_clojure.transform_strings_and_nodes >>> $join_all_tourist_itineraries_together$fn__115 >>> at java.net.URLClassLoader$1.run(URLClassLoader.java:366) >>> at java.net.URLClassLoader$1.run(URLClassLoader.java:355) >>> at java.security.AccessController.doPrivileged(Native Method) >>> at java.net.URLClassLoader.findClass(URLClassLoader.java:354) >>> at java.lang.ClassLoader.loadClass(ClassLoader.java:423) >>> at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java: >>> 308) >>> at java.lang.ClassLoader.loadClass(ClassLoader.java:356) >>> >>> >>> As far as I can read the stack trace, the exception seems to get >>> triggered here: >>> >>> (defn join-all-tourist-itineraries-together [sessions] >>> (reduce >>> (fn [vector-of-tourist-itineraries-as-strings next-tourist-session] >>> (conj vector-of-tourist-itineraries-as-strings (get-in next- >>> tourist-session [:itinerary-as-string]))) >>> [] >>> sessions)) >>> >>> >>> Which is called from here: >>> >>> (defn render-html-string-to-enlive-nodes [] >>> "2013-01-24 - I worry about how slow this might get when the memory >>> is full of intineraries. I'm going to run these tests while this in >>> development, to get a sense for what kind of performance we might >>> get." >>> (let [sessions (:sessions @um/interactions) >>> accumulated-total-of-all-tourist-itineraries-in-memory-as- >>> strings (st/join (join-all-tourist-itineraries-together sessions)) >>> length-of-string-to-be-rendered (.length (str accumulated- >>> total-of-all-tourist-itineraries-in-memory-as-strings)) >>> itineraries-as-one-string-wrapped-in-div (apply str "<div >>> id='all-itineraries'>" accumulated-total-of-all-tourist-itineraries-in- >>> memory-as-strings "</div>")] >>> (println (apply str "In render-html-string-to-enlive-nodes, the >>> length of the HTML string: " length-of-string-to-be-rendered)) >>> (transform-html-string-to-enlive-nodes itineraries-as-one-string- >>> wrapped-in-div (keyword "#all-itineraries")))) >>> >>> (defn prepare-render-html-string-to-enlive-nodes [] >>> (p :string-to-enlive-nodes (render-html-string-to-enlive-nodes))) >>> >>> (defn profile-render-html-string-to-enlive-nodes [] >>> (. java.lang.Thread sleep 300000) >>> (profile :debug :summary-render-html-strings-to-enlive-nodes >>> (prepare-render-html-string-to-enlive-nodes))) >>> >>> >>> >>> I looked for info about this error and I found this: >>> >>> >>> http://javarevisited.blogspot.com/2011/06/noclassdeffounderror-exception-in.html >>> >>> which says: >>> >>> "NoClassDefFoundError in Java comes when Java Virtual Machine is not >>> able to find a particular class at runtime which was available during >>> compile time. " >>> >>> >>> I am very ignorant of the JVM and I do not understand how this can >>> happen. Right now, while testing this app, I am compiling it locally >>> on my Macintosh and I am running it locally on my Macintosh. How can a >>> class be present at compile time but not at runtime? >>> >>> >>> >>> >>> -- >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "Clojure" group. >>> To post to this group, send email to clo...@googlegroups.com<javascript:> >>> Note that posts from new members are moderated - please be patient with >>> your first post. >>> To unsubscribe from this group, send email to >>> clojure+u...@googlegroups.com <javascript:> >>> 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+u...@googlegroups.com <javascript:>. >>> For more options, visit https://groups.google.com/groups/opt_out. >>> >>> >>> >> >> >> -- >> Please correct me if I'm wrong or incomplete, >> even if you think I'll subconsciously hate it. >> >> > > > -- > Please correct me if I'm wrong or incomplete, > even if you think I'll subconsciously hate it. > > -- -- 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/groups/opt_out.