Hi Colin.

You are talking about suricatta documentation? Is build with asciidoctor.

And, about core.async and transactions, suricatta comes with an async
abstraction that internally uses a clojure agent for serialize all access
to one connection from different threads (managed by core.async internal
thread pool). Nothing special is used from jooq for handle it.

A suricatta context encapsulates the standard jdbc connection and
additional state. As far as I know, JDBC connection is not fully thread
safe (
http://stackoverflow.com/questions/1531073/is-java-sql-connection-thread-safe),
and the general opinion is avoid use the same connection instance from
different threads concurrently. But the suricata approach is share a
connection instance between threads but ensuring that only one thread can
use it at same time (as I said previously) using serialization semantics of
clojure agents.

I hope it has been helpful.

Cheers
Andrey


2015-02-23 22:26 GMT+01:00 Colin Yates <colin.ya...@gmail.com>:

> Thanks Christian, that looks interesting.
>
> By the way, any idea what tool was used to generate the documentation?
>
> On 23 February 2015 at 21:22, Christian Weilbach
> <whitesp...@polyc0l0r.net> wrote:
> > -----BEGIN PGP SIGNED MESSAGE-----
> > Hash: SHA1
> >
> > On 23.02.2015 18:20, Colin Yates wrote:
> >> Currently each request gets serviced in its own thread (web
> >> container) and I am thinking of integrating core.async and I wonder
> >> how core.async and a JDBC transactional "unit of work" get on.
> >>
> >> Conceptually, this model (thread-per-request) is trivial however
> >> the problems are well known. Replacing this with core.async right
> >> at the front is trivial but I can see the benefit of sprinkling
> >> asynchronous behaviour throughout the (still very trivial)
> >> pipeline. Or rather I can see the beauty of decomposed components
> >> communicating via channels.
> >>
> >> My question is about transactionality. I am used to JDBC
> >> transactions being thread local and I understand core.async
> >> utilises a thread-pool, so how does one implement a "unit of work"
> >> that spans multiple channels?
> >>
> >> I want to do something like:
> >>
> >> - request comes in - the appropriate handler/service consumes it
> >> (either through request mapping, defmethod whatever) - TX starts -
> >> in parallel some logging happens (and DB is updated) - the message
> >> is handled (and DB is updated) - performance metrics are stored
> >> (and DB is updated) - all work on all channels gets finished - TX
> >> commits
> >>
> >> The point is that channels are used only to communicate between
> >> disconnected components but they should all participate in the same
> >> TX.
> >>
> >> Is anyone else using channels like this?
> > I have done it in IndexedDB in JavaScript and had to use the proper
> > callback API (1), because otherwise transactions break. I guess you
> > cannot do channel operations inside a JDBC operation since they are
> > executed in the threadpool (by the state-machine) while each JDBC
> > connection seems to be pinned to a thread, so you cannot participate
> > in the same transaction from another thread of the threadpool. But if
> > you can wrap your blocking JDBC stuff in a singular thread call, you
> > might be able to use async/thread (probably less than you want).
> >
> > There is also https://github.com/niwibe/suricatta, but I have no
> > experience with it. jooq seems to solve the the thread per request
> > problem decoupling into async operations you have in mind.
> >
> > Cheers,
> > Christian
> >
> > (1)
> >
> https://github.com/ghubber/konserve/blob/master/src/cljs/konserve/indexeddb.cljs
> > -----BEGIN PGP SIGNATURE-----
> > Version: GnuPG v1
> >
> > iQEcBAEBAgAGBQJU65n6AAoJEKel+aujRZMkwaAH/1Eq2/vr84WqNq6u2rcG4ly+
> > xkByy602oMy9/ScK1/ytv/kFdPG+qAYmtQ4EHq/LGUma3zLjpPdrf49A1RUGfVii
> > fbwIUiRgUJWdigrGiSf/2zIn972MgIfc4qKFj/+/2hJNZIAwlAKiPQSvG2VPrHo7
> > dskeQZeCZI4yGSz4+dQFGmKvjiAum+UConkzn0T/N2XGknerFsLonXyvpbTv/SCC
> > NwNoRJzI39kjIyhfUuwbwHoy0/DtbxjvkbrLHeyGIKGOJ75QutWY6gvkRsSlzS5g
> > A2jVtZo/hw02di3mxrD1vwSZ2PWads2juKjCmmOQrIPofSBWyVmoGeQ/qyD/Dgw=
> > =Wi7E
> > -----END PGP SIGNATURE-----
> >
> > --
> > 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.
>
> --
> 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.
>



-- 
Andrey Antukh - Андрей Антух - <andrei.anto...@kaleidos.net> / <n...@niwi.be
>
http://www.niwi.be <http://www.niwi.be/page/about/>
https://github.com/niwibe

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