> An other thing when I have used with agents is implement an async interface for jdbc > like applications. I have a little explication on how it is done > here: http://funcool.github.io/suricatta/latest/#_async_interface
That is an impressive bit of documentation. Thank you. On Saturday, May 9, 2015 at 3:33:15 AM UTC-4, Andrey Antukh wrote: > > Hi! > > Personally, I do not have the opportunity to use refs, but atoms and agens > I have used it in different ways > > I have used agents for logging system, thanks to its guarantees of > execution functions in a serial way. This allows heavy multithreading > applications put logs to stdout (or any other destination) and have as > result a consistent log. > > An other thing when I have used with agents is implement an async > interface for jdbc like applications. I have a little explication on how it > is done here: http://funcool.github.io/suricatta/latest/#_async_interface > > I hope you find it useful. > > Cheers. > Andrey > > 2015-05-09 3:56 GMT+02:00 <piast...@gmail.com <javascript:>>: > > This seems to be true: > > "I would have to say that the biggest surprise is how little they're > needed in Clojure." > > Run this search on Google: > > agent send clojure site:github.com > > The first 5 pages point me to examples from several years ago, or error > reports, or unit tests. Nothing substantial or recent. I think it is > interesting how many of the results are blog posts or gists -- people talk > about agents much more then they actually use them. > > Still, there are some examples: > > > https://github.com/aphyr/riemann/blob/302cff942f308771b1d8d837cdf9ce2c9090daed/src/riemann/pool.clj > > (defmacro with-pool "Evaluates body in a try expression with a symbol > 'thingy claimed from the given pool, with specified claim timeout. > Releases thingy at the end of the body, or if an exception is thrown, > invalidates them and rethrows. Example: ; With client, taken from > connection-pool, waiting 5 seconds to claim, send ; client a message. > (with-pool [client connection-pool 5] (send client a-message))" [[thingy > pool timeout] & body] ; Destructuring bind could change nil to a, say, > vector, and cause ; unbalanced claim/release. `(let [thingy# (claim ~pool > ~timeout) ~thingy thingy#] (try (let [res# (do ~@body)] (release ~pool > thingy#) res#) (catch Throwable t# (invalidate ~pool thingy#) (throw > t#))))) > > > > And: > > > https://github.com/clojure/java.jmx/blob/master/src/main/clojure/clojure/java/jmx.clj > > > (deftype Bean [state-ref] DynamicMBean (getMBeanInfo [_] (MBeanInfo. (.. > _ getClass getName) ; class name "Clojure Dynamic MBean" ; description ( > map->attribute-infos @state-ref) ; attributes nil ; constructors nil ; > operations nil)) (getAttribute [_ attr] (@state-ref (keyword attr))) ( > getAttributes [_ attrs] (let [result (AttributeList.)] (doseq [attr attrs] > (.add result (Attribute. attr (.getAttribute _ attr)))) result)) ( > setAttribute [_ attr] (let [attr-name (.getName attr) attr-value ( > .getValue attr) state-update {(keyword attr-name) attr-value}] (condp = ( > type state-ref) clojure.lang.Agent (await (send state-ref (fn [state > state-update] (merge state state-update)) state-update)) clojure.lang.Atom > (swap! state-ref merge state-update) clojure.lang.Ref (dosync (ref-set > state-ref (merge @state-ref state-update)))))) (setAttributes [_ attrs] ( > let [attr-names (map (fn [attr] (.setAttribute _ attr) (.getName attr)) > attrs)] (.getAttributes _ (into-array attr-names))))) > > > > I would love to see some other examples. > > > > > > > On Wednesday, May 6, 2015 at 9:49:47 PM UTC-4, Surgo wrote: > > I'm not saying this is everyone's experience o > > ... -- 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.