On Tue, Jan 29, 2013 at 8:03 AM, larry google groups < lawrencecloj...@gmail.com> 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: > do you mean this happens from the beginning, or only after ie. 10 minute of running it(I mean, it only breaks down after a while) also, is this code on github? > > 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 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. > > > -- 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.