Re: Clojure Async/State Machine/Workflow Libraries?

2015-05-04 Thread Tim Visher
I think I may have summoned the wrong demons when invoking with the 
`Workflow` keyword. :)

I've found some resources on Event-Driven Architecture, mostly from Zach 
Tellman. Is his stuff the main source of that sort of thing?

I realized that prismatic's graph is basically what I'm looking for 
(especially with the addition of async into the model) so long as my edge 
predicates are always based on data availability, since graph is 
essentially what I'm talking about as far as a 'workflow' description where 
you talk about steps, but the transition predicates are implicitly defined 
by data availability, which I think at least models the current problems 
that I have.

Any further thoughts given that new information?

--

In Christ,

Timmy V.

http://blog.twonegatives.com/
http://five.sentenc.es/ -- Spend less time on mail

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


Re: Clojure Async/State Machine/Workflow Libraries?

2015-05-01 Thread Brett Morgan

>
> but one would need option to stop the execution in some point of "go" 
> block, persist it, and continue it later.
>
 
Why would you need to stop execution?  You could just have a chan, put what 
you need to persist on it, then then have different go block persist it. 
 Main processing continues on happily.  



On Thursday, April 30, 2015 at 1:11:43 PM UTC-4, Vjeran Marcinko wrote:
>
> If you're looking for something similar to some BPM (BPMN, BPEL...) 
> engines in Clojure land, I *think* there is nothing similar here. I'm 
> actually researching that area occasionally, and thinking wishfully about 
> implementing one in Clojure someday.
>
> When core.async appeared first, since it also comes from "process area" of 
> IT (CSP, actors, process algebra...), I thought it would be sufficient for 
> that case also, but unfortunately it seems it has some strong differences 
> between BPM engines which are "session-based", meaning, each message that 
> is received over channel marked as 'session creator' spawns new async 
> process which is long, very long running (potentially years), and all 
> subsequent messages that have correlation value for that process are routed 
> to that session afterwards. 
>
> Biggest similarity is that both approaches (BPM enginer and core.async) 
> invert control of execution, meaning, you write easy-to-grasp sequential 
> code which is executed asynchronously, but one would need option to stop 
> the execution in some point of "go" block, persist it, and continue it 
> later. In Java, Apache ODDE, which is BPEL engine, uses Pi-calculus engine 
> underneath, that uses continuations queue and is able to persist the 
> session on demand, and dehydrate it again when needed, even if that moment 
> comes a year later..
>
> In other words, we need something like durable, restartable, GO blocks, 
> for each indivudual long-running session, and there can be hundreds of 
> thousands of them active in a system simultaneously (think about hundred k 
> of active purchase orders...).
>
> -Vjeran
>
> On Thursday, April 30, 2015 at 1:35:25 PM UTC+2, Tim Visher wrote:
>>
>> Hey All,
>>
>> Anyone have any tips on clojure 'workflow' libraries? 
>> https://github.com/relaynetwork/impresario is very close, but lacks some 
>> basic features like exception transitions, etc. 
>>
>> Basically, I'm looking for a library that allows me to create a workflow 
>> that will happen asynchronously, recording it's progress in a db. I think i 
>> could probably whip something together without _too_ much trouble using 
>> core.async but this feels like something that's probably already been 
>> written.
>>
>> Thanks in advance!
>>
>> --
>>
>> In Christ,
>>
>> Timmy V.
>>
>> http://blog.twonegatives.com/
>> http://five.sentenc.es/ -- Spend less time on mail
>>
>

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


Re: Clojure Async/State Machine/Workflow Libraries?

2015-04-30 Thread Alan Moore
Timmy,

Several BPM tools are derivatives of or are directly based upon business 
rule engines. They usually pile on a bunch of higher level abstractions, 
UIs and/or frameworks to make them business user friendly. I have not seen 
anything like this in Clojure.

However, you might want to take a look at Clara which is a rule engine 
written in Clojure. It would give you a lower level library upon which you 
could build the rest of the BPM feature sets.

If Clara doesn't give you all of what you need you could look into 
integrating with the JBoss/Drools tooling via Java interop.

Good luck!

Alan


On Thursday, April 30, 2015 at 10:11:43 AM UTC-7, Vjeran Marcinko wrote:
>
> If you're looking for something similar to some BPM (BPMN, BPEL...) 
> engines in Clojure land, I *think* there is nothing similar here. I'm 
> actually researching that area occasionally, and thinking wishfully about 
> implementing one in Clojure someday.
>
> When core.async appeared first, since it also comes from "process area" of 
> IT (CSP, actors, process algebra...), I thought it would be sufficient for 
> that case also, but unfortunately it seems it has some strong differences 
> between BPM engines which are "session-based", meaning, each message that 
> is received over channel marked as 'session creator' spawns new async 
> process which is long, very long running (potentially years), and all 
> subsequent messages that have correlation value for that process are routed 
> to that session afterwards. 
>
> Biggest similarity is that both approaches (BPM enginer and core.async) 
> invert control of execution, meaning, you write easy-to-grasp sequential 
> code which is executed asynchronously, but one would need option to stop 
> the execution in some point of "go" block, persist it, and continue it 
> later. In Java, Apache ODDE, which is BPEL engine, uses Pi-calculus engine 
> underneath, that uses continuations queue and is able to persist the 
> session on demand, and dehydrate it again when needed, even if that moment 
> comes a year later..
>
> In other words, we need something like durable, restartable, GO blocks, 
> for each indivudual long-running session, and there can be hundreds of 
> thousands of them active in a system simultaneously (think about hundred k 
> of active purchase orders...).
>
> -Vjeran
>
> On Thursday, April 30, 2015 at 1:35:25 PM UTC+2, Tim Visher wrote:
>>
>> Hey All,
>>
>> Anyone have any tips on clojure 'workflow' libraries? 
>> https://github.com/relaynetwork/impresario is very close, but lacks some 
>> basic features like exception transitions, etc. 
>>
>> Basically, I'm looking for a library that allows me to create a workflow 
>> that will happen asynchronously, recording it's progress in a db. I think i 
>> could probably whip something together without _too_ much trouble using 
>> core.async but this feels like something that's probably already been 
>> written.
>>
>> Thanks in advance!
>>
>> --
>>
>> In Christ,
>>
>> Timmy V.
>>
>> http://blog.twonegatives.com/
>> http://five.sentenc.es/ -- Spend less time on mail
>>
>

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


Re: Clojure Async/State Machine/Workflow Libraries?

2015-04-30 Thread Vjeran Marcinko
If you're looking for something similar to some BPM (BPMN, BPEL...) engines 
in Clojure land, I *think* there is nothing similar here. I'm actually 
researching that area occasionally, and thinking wishfully about 
implementing one in Clojure someday.

When core.async appeared first, since it also comes from "process area" of 
IT (CSP, actors, process algebra...), I thought it would be sufficient for 
that case also, but unfortunately it seems it has some strong differences 
between BPM engines which are "session-based", meaning, each message that 
is received over channel marked as 'session creator' spawns new async 
process which is long, very long running (potentially years), and all 
subsequent messages that have correlation value for that process are routed 
to that session afterwards. 

Biggest similarity is that both approaches (BPM enginer and core.async) 
invert control of execution, meaning, you write easy-to-grasp sequential 
code which is executed asynchronously, but one would need option to stop 
the execution in some point of "go" block, persist it, and continue it 
later. In Java, Apache ODDE, which is BPEL engine, uses Pi-calculus engine 
underneath, that uses continuations queue and is able to persist the 
session on demand, and dehydrate it again when needed, even if that moment 
comes a year later..

In other words, we need something like durable, restartable, GO blocks, for 
each indivudual long-running session, and there can be hundreds of 
thousands of them active in a system simultaneously (think about hundred k 
of active purchase orders...).

-Vjeran

On Thursday, April 30, 2015 at 1:35:25 PM UTC+2, Tim Visher wrote:
>
> Hey All,
>
> Anyone have any tips on clojure 'workflow' libraries? 
> https://github.com/relaynetwork/impresario is very close, but lacks some 
> basic features like exception transitions, etc. 
>
> Basically, I'm looking for a library that allows me to create a workflow 
> that will happen asynchronously, recording it's progress in a db. I think i 
> could probably whip something together without _too_ much trouble using 
> core.async but this feels like something that's probably already been 
> written.
>
> Thanks in advance!
>
> --
>
> In Christ,
>
> Timmy V.
>
> http://blog.twonegatives.com/
> http://five.sentenc.es/ -- Spend less time on mail
>

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


Clojure Async/State Machine/Workflow Libraries?

2015-04-30 Thread Tim Visher
Hey All,

Anyone have any tips on clojure 'workflow' libraries? 
https://github.com/relaynetwork/impresario is very close, but lacks some 
basic features like exception transitions, etc. 

Basically, I'm looking for a library that allows me to create a workflow 
that will happen asynchronously, recording it's progress in a db. I think i 
could probably whip something together without _too_ much trouble using 
core.async but this feels like something that's probably already been 
written.

Thanks in advance!

--

In Christ,

Timmy V.

http://blog.twonegatives.com/
http://five.sentenc.es/ -- Spend less time on mail

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