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

Reply via email to