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