Maintaining DB/Working Memory Synchronization

View: New views
9 Messages — Rating Filter:   Alert me  

Maintaining DB/Working Memory Synchronization

by Daniel Miller-9 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

So I hope that someone out here, or many of you, can give me some idea  
of how you do this.

I have about 20+ entities in my database that I want Drools to know  
about.  Obviously my hope is to apply CEP, rules and processes to  
these items.  However, I feel like I'm missing some type of connection  
between how Drools recommends keeping my working memory in sync with  
my database changes.

Ideally, I'd love to be able to just update my entities as I have been  
doing in the database, but have those changes automatically move their  
way over into the working memory.  How do any of you recommend I  
accomplish this?

Thanks in advance for any suggestions.

Dan Miller
 
_______________________________________________
rules-users mailing list
rules-users@...
https://lists.jboss.org/mailman/listinfo/rules-users

Re: Maintaining DB/Working Memory Synchronization

by Greg Barton :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

I don't think there's a built in way to do this with drools, but in general this is done using database triggers.  The trigger fires when the data changes, and from there it's up to you how the record is transported to working memory.  

If you use oracle there's a specific mechanism for this called "Database Change Notification"

--- On Fri, 11/6/09, Daniel Miller <dmiller@...> wrote:

> From: Daniel Miller <dmiller@...>
> Subject: [rules-users] Maintaining DB/Working Memory Synchronization
> To: rules-users@...
> Date: Friday, November 6, 2009, 2:43 PM
> So I hope that someone out here, or
> many of you, can give me some idea 
> of how you do this.
>
> I have about 20+ entities in my database that I want Drools
> to know 
> about.  Obviously my hope is to apply CEP, rules and
> processes to 
> these items.  However, I feel like I'm missing some
> type of connection 
> between how Drools recommends keeping my working memory in
> sync with 
> my database changes.
>
> Ideally, I'd love to be able to just update my entities as
> I have been 
> doing in the database, but have those changes automatically
> move their 
> way over into the working memory.  How do any of you
> recommend I 
> accomplish this?
>
> Thanks in advance for any suggestions.
>
> Dan Miller
>  
> _______________________________________________
> rules-users mailing list
> rules-users@...
> https://lists.jboss.org/mailman/listinfo/rules-users
>


     

_______________________________________________
rules-users mailing list
rules-users@...
https://lists.jboss.org/mailman/listinfo/rules-users

Re: Maintaining DB/Working Memory Synchronization

by Daniel Miller-9 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Greg Barton <greg_barton <at> yahoo.com> writes:

>
> I don't think there's a built in way to do this with drools, but in general
this is done using database
> triggers.  The trigger fires when the data changes, and from there it's up to
you how the record is
> transported to working memory.  
>
> If you use oracle there's a specific mechanism for this called "Database
Change Notification"

>
> --- On Fri, 11/6/09, Daniel Miller <dmiller <at> versatile.com> wrote:
>
> > From: Daniel Miller <dmiller <at> versatile.com>
> > Subject: [rules-users] Maintaining DB/Working Memory Synchronization
> > To: rules-users <at> lists.jboss.org
> > Date: Friday, November 6, 2009, 2:43 PM
> > So I hope that someone out here, or
> > many of you, can give me some idea 
> > of how you do this.
> >
> > I have about 20+ entities in my database that I want Drools
> > to know 
> > about.  Obviously my hope is to apply CEP, rules and
> > processes to 
> > these items.  However, I feel like I'm missing some
> > type of connection 
> > between how Drools recommends keeping my working memory in
> > sync with 
> > my database changes.
> >
> > Ideally, I'd love to be able to just update my entities as
> > I have been 
> > doing in the database, but have those changes automatically
> > move their 
> > way over into the working memory.  How do any of you
> > recommend I 
> > accomplish this?
> >
> > Thanks in advance for any suggestions.
> >
> > Dan Miller
> >  
> > _______________________________________________
> > rules-users mailing list
> > rules-users <at> lists.jboss.org
> > https://lists.jboss.org/mailman/listinfo/rules-users
> >
>
> _______________________________________________
> rules-users mailing list
> rules-users <at> lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>

Thanks for the suggestion.

So I did something similar, not using database triggers, but trying something I
saw in a blog post.  I modified my rule so that instead of loading the working
memory and then firing the rules, the rule does something like this:

rule
    when
        a : AssetRemote(assetType='Temperature Probe',removed=false) from
assetService.getAllUndeletedAssets();
    then
       //do some work here
end

"assetService" is my service class that does my query to the database and
returns a List<AssetRemote> objects.

This worked great -- except it only fired once.  There are no objects in my
working memory, but if I call fireAllRules(), this rule gets ignored the second,
third, nth time it's fired.

What am I missing?  Before I was manually calling an update(a); in the "then"
section to refresh the session on the object.  But, since there are no objects
using the from method, I don't know how to refresh the session so that this rule
will fire each time fireAllRules() is called.

Keep the suggestions coming though.

Thanks,

Dan Miller





_______________________________________________
rules-users mailing list
rules-users@...
https://lists.jboss.org/mailman/listinfo/rules-users

Re: Maintaining DB/Working Memory Synchronization

by Wolfgang Laun-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

org.drools.event.WorkingMemoryEventListener would be the other option, now using changes to the Working Memory as the trigger to update the Data Base. If you intend using rules that modify WM contents, you may have to have this in addition to a DB change notification mechanism.

-W

On Fri, Nov 6, 2009 at 9:43 PM, Daniel Miller <dmiller@...> wrote:
So I hope that someone out here, or many of you, can give me some idea
of how you do this.

I have about 20+ entities in my database that I want Drools to know
about.  Obviously my hope is to apply CEP, rules and processes to
these items.  However, I feel like I'm missing some type of connection
between how Drools recommends keeping my working memory in sync with
my database changes.

Ideally, I'd love to be able to just update my entities as I have been
doing in the database, but have those changes automatically move their
way over into the working memory.  How do any of you recommend I
accomplish this?

Thanks in advance for any suggestions.

Dan Miller

_______________________________________________
rules-users mailing list
rules-users@...
https://lists.jboss.org/mailman/listinfo/rules-users


_______________________________________________
rules-users mailing list
rules-users@...
https://lists.jboss.org/mailman/listinfo/rules-users

Re: Maintaining DB/Working Memory Synchronization

by ken.p :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

I am also looking similar feature. We can currently use AOP to send event to stream. However, we have events with relevant duration for days and some time weeks. If server were to restart for maintenance, how do we restore to the same state?


Daniel Miller-9 wrote:
So I hope that someone out here, or many of you, can give me some idea  
of how you do this.

I have about 20+ entities in my database that I want Drools to know  
about.  Obviously my hope is to apply CEP, rules and processes to  
these items.  However, I feel like I'm missing some type of connection  
between how Drools recommends keeping my working memory in sync with  
my database changes.

Ideally, I'd love to be able to just update my entities as I have been  
doing in the database, but have those changes automatically move their  
way over into the working memory.  How do any of you recommend I  
accomplish this?

Thanks in advance for any suggestions.

Dan Miller
 
_______________________________________________
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users

Re: Maintaining DB/Working Memory Synchronization

by Andrew Waterman :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

It can depend on how you want to use working memory as well.  If you are working statelessly, you can load objects through some type of transactional framework, insert them into memory (or the ones relevant to you at that moment in time) let Drools evaluate the objects, make changes and then serialize those changes once rules have stopped firing.  I do something like this using EJB and JPA.  I've been interested in pushing this into the rules themselves; which I believe is now possible using the JPA support within Drools flow.  This might work much better if you were using statefull and long running working memory process.  Even in the event of catastrophic failure, your transactionally serialized changes would still remain in the database.  So you could restart and pick up work from where you were last.

You may wish to take a look at the following blog entries:

http://blog.athico.com/2009/03/drools-50-cr1-new-and-noteworthy.html

And the Drools flow documentation. 

I'm hoping to move our work in this direction so please do pass on your results; unless I'm completely misunderstanding how one can use flow, expert and JPA together with transactions. 

best wishes,

Andrew

On Sat, Nov 7, 2009 at 9:23 AM, ken.p <ken.annihilation@...> wrote:

I am also looking similar feature. We can currently use AOP to send event to
stream. However, we have events with relevant duration for days and some
time weeks. If server were to restart for maintenance, how do we restore to
the same state?



Daniel Miller-9 wrote:
>
> So I hope that someone out here, or many of you, can give me some idea
> of how you do this.
>
> I have about 20+ entities in my database that I want Drools to know
> about.  Obviously my hope is to apply CEP, rules and processes to
> these items.  However, I feel like I'm missing some type of connection
> between how Drools recommends keeping my working memory in sync with
> my database changes.
>
> Ideally, I'd love to be able to just update my entities as I have been
> doing in the database, but have those changes automatically move their
> way over into the working memory.  How do any of you recommend I
> accomplish this?
>
> Thanks in advance for any suggestions.
>
> Dan Miller
>
> _______________________________________________
> rules-users mailing list
> rules-users@...
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>

--
View this message in context: http://old.nabble.com/Maintaining-DB-Working-Memory-Synchronization-tp26238313p26241138.html
Sent from the drools - user mailing list archive at Nabble.com.

_______________________________________________
rules-users mailing list
rules-users@...
https://lists.jboss.org/mailman/listinfo/rules-users



--
+1 510 342 5693

PO Box 7775 #8750
San Francisco, California   94120-7775

"Warning:  following standard input indefinitely is ineffective"
- /bin/tail error message

"Against logic there is no armor like ignorance."
 - Laurence J. Pete

_______________________________________________
rules-users mailing list
rules-users@...
https://lists.jboss.org/mailman/listinfo/rules-users

Re: Maintaining DB/Working Memory Synchronization

by Andrew Waterman :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

I neglected to mention my reply is from the viewpoint of changing entities through the program that interacts with drools; if you need to sense changes from another source to entities/tables in a database Greg's suggestion seems the easiest and least resource intensive.  Pushed actions from the database into rules would be more efficient; but this begs the question as to where working memory is held; are you thinking of REST calls to a Drools rules server Greg? 

best wishes,

Andrew

On Sat, Nov 7, 2009 at 9:59 AM, Andrew Waterman <andrew.waterman@...> wrote:
It can depend on how you want to use working memory as well.  If you are working statelessly, you can load objects through some type of transactional framework, insert them into memory (or the ones relevant to you at that moment in time) let Drools evaluate the objects, make changes and then serialize those changes once rules have stopped firing.  I do something like this using EJB and JPA.  I've been interested in pushing this into the rules themselves; which I believe is now possible using the JPA support within Drools flow.  This might work much better if you were using statefull and long running working memory process.  Even in the event of catastrophic failure, your transactionally serialized changes would still remain in the database.  So you could restart and pick up work from where you were last.

You may wish to take a look at the following blog entries:

http://blog.athico.com/2009/03/drools-50-cr1-new-and-noteworthy.html

And the Drools flow documentation. 

I'm hoping to move our work in this direction so please do pass on your results; unless I'm completely misunderstanding how one can use flow, expert and JPA together with transactions. 

best wishes,

Andrew

On Sat, Nov 7, 2009 at 9:23 AM, ken.p <ken.annihilation@...> wrote:

I am also looking similar feature. We can currently use AOP to send event to
stream. However, we have events with relevant duration for days and some
time weeks. If server were to restart for maintenance, how do we restore to
the same state?



Daniel Miller-9 wrote:
>
> So I hope that someone out here, or many of you, can give me some idea
> of how you do this.
>
> I have about 20+ entities in my database that I want Drools to know
> about.  Obviously my hope is to apply CEP, rules and processes to
> these items.  However, I feel like I'm missing some type of connection
> between how Drools recommends keeping my working memory in sync with
> my database changes.
>
> Ideally, I'd love to be able to just update my entities as I have been
> doing in the database, but have those changes automatically move their
> way over into the working memory.  How do any of you recommend I
> accomplish this?
>
> Thanks in advance for any suggestions.
>
> Dan Miller
>
> _______________________________________________
> rules-users mailing list
> rules-users@...
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>

--
View this message in context: http://old.nabble.com/Maintaining-DB-Working-Memory-Synchronization-tp26238313p26241138.html
Sent from the drools - user mailing list archive at Nabble.com.

_______________________________________________
rules-users mailing list
rules-users@...
https://lists.jboss.org/mailman/listinfo/rules-users



--
+1 510 342 5693

PO Box 7775 #8750
San Francisco, California   94120-7775

"Warning:  following standard input indefinitely is ineffective"
- /bin/tail error message

"Against logic there is no armor like ignorance."
 - Laurence J. Pete



--
+1 510 342 5693

PO Box 7775 #8750
San Francisco, California   94120-7775

"Warning:  following standard input indefinitely is ineffective"
- /bin/tail error message

"Against logic there is no armor like ignorance."
 - Laurence J. Pete

_______________________________________________
rules-users mailing list
rules-users@...
https://lists.jboss.org/mailman/listinfo/rules-users

Re: Maintaining DB/Working Memory Synchronization

by nestabur :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

So, Do you mean that for serializing the state of a StatefulKnowledgeSession we must include our rules into a ruleflow? How do you upgrade your KnowledgeBase without loosing the WM state?

Please check this issues:

https://jira.jboss.org/jira/browse/JBRULES-1946

https://jira.jboss.org/jira/browse/JBRULES-2278

Nestor

2009/11/7 Andrew Waterman <andrew.waterman@...>
It can depend on how you want to use working memory as well.  If you are working statelessly, you can load objects through some type of transactional framework, insert them into memory (or the ones relevant to you at that moment in time) let Drools evaluate the objects, make changes and then serialize those changes once rules have stopped firing.  I do something like this using EJB and JPA.  I've been interested in pushing this into the rules themselves; which I believe is now possible using the JPA support within Drools flow.  This might work much better if you were using statefull and long running working memory process.  Even in the event of catastrophic failure, your transactionally serialized changes would still remain in the database.  So you could restart and pick up work from where you were last.

You may wish to take a look at the following blog entries:

http://blog.athico.com/2009/03/drools-50-cr1-new-and-noteworthy.html

And the Drools flow documentation. 

I'm hoping to move our work in this direction so please do pass on your results; unless I'm completely misunderstanding how one can use flow, expert and JPA together with transactions. 

best wishes,

Andrew

On Sat, Nov 7, 2009 at 9:23 AM, ken.p <ken.annihilation@...> wrote:

I am also looking similar feature. We can currently use AOP to send event to
stream. However, we have events with relevant duration for days and some
time weeks. If server were to restart for maintenance, how do we restore to
the same state?



Daniel Miller-9 wrote:
>
> So I hope that someone out here, or many of you, can give me some idea
> of how you do this.
>
> I have about 20+ entities in my database that I want Drools to know
> about.  Obviously my hope is to apply CEP, rules and processes to
> these items.  However, I feel like I'm missing some type of connection
> between how Drools recommends keeping my working memory in sync with
> my database changes.
>
> Ideally, I'd love to be able to just update my entities as I have been
> doing in the database, but have those changes automatically move their
> way over into the working memory.  How do any of you recommend I
> accomplish this?
>
> Thanks in advance for any suggestions.
>
> Dan Miller
>
> _______________________________________________
> rules-users mailing list
> rules-users@...
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>

--
View this message in context: http://old.nabble.com/Maintaining-DB-Working-Memory-Synchronization-tp26238313p26241138.html
Sent from the drools - user mailing list archive at Nabble.com.

_______________________________________________
rules-users mailing list
rules-users@...
https://lists.jboss.org/mailman/listinfo/rules-users



--
+1 510 342 5693

PO Box 7775 #8750
San Francisco, California   94120-7775

"Warning:  following standard input indefinitely is ineffective"
- /bin/tail error message

"Against logic there is no armor like ignorance."
 - Laurence J. Pete

_______________________________________________
rules-users mailing list
rules-users@...
https://lists.jboss.org/mailman/listinfo/rules-users



_______________________________________________
rules-users mailing list
rules-users@...
https://lists.jboss.org/mailman/listinfo/rules-users

Re: Maintaining DB/Working Memory Synchronization

by Andrew Waterman :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

I was just referring to facts that we're being placed into your statefulknowledgesession.  As I mentioned, I use a mechanism with an EJB to manage my JPA entities before injecting them into the session.  I passed on a blog entry with a ruleflow example as that looks to do a similar thing but within drools, and I would be interested to hear how such an implementation would go.  KnowledgeBase (compiled rules) and StatefulSessions (facts) are stored and serialized independently, btw.

best wishes,

Andrew

2009/11/8 Nestor Tarin Burriel <nestabur@...>
So, Do you mean that for serializing the state of a StatefulKnowledgeSession we must include our rules into a ruleflow? How do you upgrade your KnowledgeBase without loosing the WM state?

Please check this issues:

https://jira.jboss.org/jira/browse/JBRULES-1946

https://jira.jboss.org/jira/browse/JBRULES-2278

Nestor

2009/11/7 Andrew Waterman <andrew.waterman@...>

It can depend on how you want to use working memory as well.  If you are working statelessly, you can load objects through some type of transactional framework, insert them into memory (or the ones relevant to you at that moment in time) let Drools evaluate the objects, make changes and then serialize those changes once rules have stopped firing.  I do something like this using EJB and JPA.  I've been interested in pushing this into the rules themselves; which I believe is now possible using the JPA support within Drools flow.  This might work much better if you were using statefull and long running working memory process.  Even in the event of catastrophic failure, your transactionally serialized changes would still remain in the database.  So you could restart and pick up work from where you were last.

You may wish to take a look at the following blog entries:

http://blog.athico.com/2009/03/drools-50-cr1-new-and-noteworthy.html

And the Drools flow documentation. 

I'm hoping to move our work in this direction so please do pass on your results; unless I'm completely misunderstanding how one can use flow, expert and JPA together with transactions. 

best wishes,

Andrew

On Sat, Nov 7, 2009 at 9:23 AM, ken.p <ken.annihilation@...> wrote:

I am also looking similar feature. We can currently use AOP to send event to
stream. However, we have events with relevant duration for days and some
time weeks. If server were to restart for maintenance, how do we restore to
the same state?



Daniel Miller-9 wrote:
>
> So I hope that someone out here, or many of you, can give me some idea
> of how you do this.
>
> I have about 20+ entities in my database that I want Drools to know
> about.  Obviously my hope is to apply CEP, rules and processes to
> these items.  However, I feel like I'm missing some type of connection
> between how Drools recommends keeping my working memory in sync with
> my database changes.
>
> Ideally, I'd love to be able to just update my entities as I have been
> doing in the database, but have those changes automatically move their
> way over into the working memory.  How do any of you recommend I
> accomplish this?
>
> Thanks in advance for any suggestions.
>
> Dan Miller
>
> _______________________________________________
> rules-users mailing list
> rules-users@...
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>

--
View this message in context: http://old.nabble.com/Maintaining-DB-Working-Memory-Synchronization-tp26238313p26241138.html
Sent from the drools - user mailing list archive at Nabble.com.

_______________________________________________
rules-users mailing list
rules-users@...
https://lists.jboss.org/mailman/listinfo/rules-users



--
+1 510 342 5693

PO Box 7775 #8750
San Francisco, California   94120-7775

"Warning:  following standard input indefinitely is ineffective"
- /bin/tail error message

"Against logic there is no armor like ignorance."
 - Laurence J. Pete

_______________________________________________
rules-users mailing list
rules-users@...
https://lists.jboss.org/mailman/listinfo/rules-users



_______________________________________________
rules-users mailing list
rules-users@...
https://lists.jboss.org/mailman/listinfo/rules-users




--
+1 510 342 5693

PO Box 7775 #8750
San Francisco, California   94120-7775

"Warning:  following standard input indefinitely is ineffective"
- /bin/tail error message

"Against logic there is no armor like ignorance."
 - Laurence J. Pete

_______________________________________________
rules-users mailing list
rules-users@...
https://lists.jboss.org/mailman/listinfo/rules-users