Back with good news, removing collect fixes the out of memory problem. :)
It also gives much better performance :
- with "collect" I was able to process 500 deals in 1min09 sec
- without "collect" I was able to process 1000 deals in 33 sec (facts
insertion only last 3 sec)
I will now try to replace the four call to eval to only one call, hope it will also
improve performance.
For those interested, I describe the new Drools rules and one problem encountered and
solved.
Following Mike and Wolfgang precious advices, I have splitted my process in 2 major steps
:
1. Find all booking rule matching the incoming deals and storing them by deal with a
DealMatchingBookingRules
2. Try to apply the correct booking rule for each deal (that is choosing good the
booking rule to apply among the matching ones)
Each DealMatchingBookingRules references a unique Deal and has a Map storing matching
booking rule by their priority level for this Deal, so first step is really filling the
DealMatchingBookingRules with booking rule.
I encountered a problem in my first "matching step" implementation where I was
updating $dealMatchingBookingRules, after adding a matching booking rule.
When a deal has 2 matching booking rule, Drools executes "Find matching booking rules
by deal" for the first booking rule, then update $dealMatchingBookingRules, it
executes the rule for the second booking rule, update $dealMatchingBookingRules again.
Problem arises here because since $dealMatchingBookingRules, is updated Drools will
execute the rule "Find matching booking rules by deal" for the first booking
rule again, same thing for the second booking rule ... infinite loop !
To solve this, I don't update $dealMatchingBookingRules, I have just added another
rule to update all the DealMatchingBookingRules, it is less prioritary than the
"matching rule" it is thus applied after all booking rule have been associated
to their matching deal.
Maybe there is a better solution to that problem, I don't know ...
Many thanks to Mike and Wolfgang for their help !
Joel
rule "Find matching booking rules by deal"
salience 10
no-loop
ruleflow-group "Find matching booking rules by deal group"
when
$dealMatchingBookingRules : DealMatchingBookingRules($dealModel : deal)
ProductRelatedIndexes( product.internalCode == $dealModel.product.internalCode,
$dealProductIndexes : relatedIndexes)
$bookingRule : BTExecutionBookingRuleModel(
eval(matchTraderCriterion(traderCriterion, $dealModel.getTrader()))
&& eval(matchPortfolioCriterion(portfolioCriterion,
$dealModel.getPortfolio()))
&& eval(matchIndexCriterion(listedIndexCriterion,
$dealProductIndexes))
&& eval(matchProductTypeCriterion(productTypeStringCriterion,
$dealModel.getProduct()))
)
then
Logger log = LoggerFactory.getLogger("Matching booking rules
LOGGER");
log.info("Found a matching rule for deal : " + $dealModel + ",
rule is " + $bookingRule);
$dealMatchingBookingRules.addMatchingBookingRule($bookingRule);
end
// used to tell Drools that our $dealMatchingBookingRules are ready for next step in flow
rule "Refresh"
salience 5
no-loop
ruleflow-group "Refresh"
when
$dealMatchingBookingRules : DealMatchingBookingRules()
then
Logger log = LoggerFactory.getLogger("Matching booking rules
LOGGER");
update($dealMatchingBookingRules);
end
rule "Apply level 1 booking rule"
no-loop
ruleflow-group "Level 1 booking rule group"
when
$dealMatchingBookingRules : DealMatchingBookingRules(
hasSingleMatchingLevel1BookingRule == true )
then
Logger log = LoggerFactory.getLogger("Apply level 1 booking rule
LOGGER");
MarketDealModel dealModel = $dealMatchingBookingRules.getDeal();
BTExecutionBookingRuleModel effectiveBookingRuleModel =
$dealMatchingBookingRules.getSingleMatchingLevel1BookingRule();
log.info("deal : " + dealModel);
log.info("matching level 1 booking rule : " +
effectiveBookingRuleModel);
effectiveBookingRuleModel.applyRuleOnDeal(dealModel);
retract($dealMatchingBookingRules);
end
rule "Apply level 2 booking rule"
no-loop
ruleflow-group "Level 2 booking rule group"
when
$dealMatchingBookingRules : DealMatchingBookingRules(
hasSingleMatchingLevel2BookingRule == true )
then
Logger log = LoggerFactory.getLogger("Apply level 2 booking rule
LOGGER");
MarketDealModel dealModel = $dealMatchingBookingRules.getDeal();
BTExecutionBookingRuleModel effectiveBookingRuleModel =
$dealMatchingBookingRules.getSingleMatchingLevel2BookingRule();
log.info("deal : " + dealModel);
log.info("matching level 2 booking rule : " +
effectiveBookingRuleModel);
effectiveBookingRuleModel.applyRuleOnDeal(dealModel);
retract($dealMatchingBookingRules);
end
rule "Apply level 3 booking rule"
no-loop
ruleflow-group "Level 3 booking rule group"
when
$dealMatchingBookingRules : DealMatchingBookingRules(
hasSingleMatchingLevel3BookingRule == true )
then
Logger log = LoggerFactory.getLogger("Apply level 3 booking rule
LOGGER");
MarketDealModel dealModel = $dealMatchingBookingRules.getDeal();
BTExecutionBookingRuleModel effectiveBookingRuleModel =
$dealMatchingBookingRules.getSingleMatchingLevel3BookingRule();
log.info("deal : " + dealModel);
log.info("matching level 3 booking rule : " +
effectiveBookingRuleModel);
effectiveBookingRuleModel.applyRuleOnDeal(dealModel);
retract($dealMatchingBookingRules);
end
rule "Apply level 4 booking rule"
no-loop
ruleflow-group "Level 4 booking rule group"
when
$dealMatchingBookingRules : DealMatchingBookingRules(
hasSingleMatchingLevel4BookingRule == true )
then
Logger log = LoggerFactory.getLogger("Apply level 4 booking rule
LOGGER");
MarketDealModel dealModel = $dealMatchingBookingRules.getDeal();
BTExecutionBookingRuleModel effectiveBookingRuleModel =
$dealMatchingBookingRules.getSingleMatchingLevel4BookingRule();
log.info("deal : " + dealModel);
log.info("matching level 4 booking rule : " +
effectiveBookingRuleModel);
effectiveBookingRuleModel.applyRuleOnDeal(dealModel);
retract($dealMatchingBookingRules);
end
________________________________
De : rules-users-bounces(a)lists.jboss.org [mailto:rules-users-bounces@lists.jboss.org] De
la part de Costigliola Joel (EXT)
Envoyé : vendredi 11 septembre 2009 14:04
À : 'Rules Users List'
Objet : Re: [rules-users] Memory error when inserting facts instatefulsession
Mike and Wolfgang, things are clearer now, I will definitely try to your suggestions.
Thanks for the help,
Joel
________________________________
De : rules-users-bounces(a)lists.jboss.org [mailto:rules-users-bounces@lists.jboss.org] De
la part de Wolfgang Laun
Envoyé : vendredi 11 septembre 2009 12:42
À : Rules Users List
Objet : Re: [rules-users] Memory error when inserting facts in statefulsession
Hello Joel,
nothing on the LHS (between when and then) matters when a rule fires; so eval() and all
other CEs are evaluated when facts are inserted.
So, trying to get rid of the eval's would be worthwhile.
The second thing (and I agree with Michael) is that you shoudl get rid of collect, which
causes the delay during insertion. I'd also use a Collector fact with attributes for
deal, a booking rule and a count.
rule addCollector
when
$deal: MarketDealModel()
not (Collector( deal == $deal )
then
insert( new Collector( §deal ) );
end
When there is a matching Collector and a BTExecutionBookingRuleModel matches the deal:
then
modify the collector by incrementing the count and storing the matched booking rule
At a lower salience, add 2 rules matching a collector with count == 1 and count != 1 with
obvious consequences. (The second one could switch to the next level activation group.)
HTH
Wolfgang
2009/9/11 Costigliola Joel (EXT)
<joel.costigliola-ext@natixis.com<mailto:joel.costigliola-ext@natixis.com>>
Hi Mike,
Quick reply, thanks !
I think I can't use « exists » because I want one and only one booking rule of a
specific level (LEVEL_1, LEVEL_2, ...) matching a deal, that's why the
bookingRuleModels list collected should only contain 1 booking rule. This explain why in
the RHS I'm getting the first booking rule (bookingRuleModels.get(0)).
If there is more than one booking rule (or none), I switch to the second Drools rule which
tries to find a unique LEVEL_2 booking rule, then same thing if none or too many, switch
to LEVEL_3 booking rule ...
Hope you get the idea.
The matchXXX function compare the XXX criterion of a booking rule (ex Trader) with the
corresponding Deal attribute (ex Trader).
Here's the implementation for comparing trader criterion, note that if a booking rule
does not specify a criterion it is considered as matched.
private static boolean matchCriterion(NorthIdEntity<?> ruleCriterionModel,
NorthIdEntity<?> model) {
if (ruleCriterionModel == null) {
// no criterion => matching ok
return true;
}
return ruleCriterionModel.equals(model);
}
I have read that eval is not performant but I thought it was only when executing rules not
at facts insertion phase.
Is this coorect or is eval impacting negatively facts insertion ?
Another idea comes to my mind : can I use a stateless session since once a deal is
classified/booked we don't want to process it again ?
To finish I forgot to give informations on my environment, it may be useful :
- Drools version 5.01
- java 6
- launching my server with following memory options : -Xms256m -Xmx1024m
Thanks again for your thought,
Joel
________________________________
De : rules-users-bounces@lists.jboss.org<mailto:rules-users-bounces@lists.jboss.org>
[mailto:rules-users-bounces@lists.jboss.org<mailto:rules-users-bounces@lists.jboss.org>]
De la part de Anstis, Michael (M.)
Envoyé : vendredi 11 septembre 2009 10:35
À : Rules Users List
Objet : Re: [rules-users] Memory error when inserting facts in stateful session
Hi,
As an aside, you shouldn't need to use a rule flow as the rules themselves determine
which RHS is activated. Could you consider using "exists" instead of the
"ArrayList( size == 1) from collect..." - it looks like you're not too
bothered which Booking Rule matches as (I believe) you have no way to determine which is
at index(0). Also, what do your "matchXXX" functions do? Could you investigate
removing the "evals"?
I don't have any knowledge of your domain - we're all newbies at some time or
other.
With kind regards,
Mike
________________________________
From:
rules-users-bounces@lists.jboss.org<mailto:rules-users-bounces@lists.jboss.org>
[mailto:rules-users-bounces@lists.jboss.org<mailto:rules-users-bounces@lists.jboss.org>]
On Behalf Of Costigliola Joel (EXT)
Sent: 11 September 2009 09:21
To: rules-users@lists.jboss.org<mailto:rules-users@lists.jboss.org>
Subject: [rules-users] Memory error when inserting facts in stateful session
Hello,
To be short I'm facing some performance/memory problems with Drools which leads to the
error : java.lang.OutOfMemoryError: Java heap space.
That was for the short story, let me now give you more details.
First, I'm a Drools newbie so I certainly have made some "bad" choice.
I'm using Drools 5.01 to classify automatically the deals made by the traders of my
company (this is the functionnal problem I want to solve with Drools).
I have written 4 rules, a rule-flow and start the deals classifying process with a
stateful session.
I have successfully (unit) tested different scenarios, so everything is ok on a
functionnal point of view.
Problems arise when I started to insert more deals in the session, which leads to an
OutOfMemoryError before the call to ksession.fireAllRules. logs are below (after the
drools rule).
Number of facts I have tried to insert in my statefull session :
- 222 booking rule (POJO expressing classification criteria)
- 750 product index
- 750 deals
What drools does here is to find the correct booking rule to apply for each deal (we need
some product index for that).
Can you tell me if those numbers seems unrealistic ?
What can I do to avoid the memory errors ?
To be complete, I show you the drools rules :
rule "Find and apply level 1 booking rule"
lock-on-active true
ruleflow-group "Level 1 booking rule group"
when
dealModel : MarketDealModel( $dealPortfolio : portfolio, $dealTrader : trader,
$dealProduct : product)
// retrieve the ProductRelatedIndexes corresponding to the deal product (only
one by product)
productRelatedIndexes : ProductRelatedIndexes( product.internalCode ==
$dealProduct.internalCode, $dealProductIndexes : relatedIndexes)
// try to find one and only one level 1 matching rule (level 1 <=> all
matching criteria are defined).
bookingRuleModels : ArrayList( size == 1 ) from collect (
BTExecutionBookingRuleModel(
priority == BTExecutionBookingRuleModel.LEVEL_1
&& eval(matchTraderCriterion(traderCriterion,
$dealTrader))
&& eval(matchPortfolioCriterion(portfolioCriterion,
$dealPortfolio))
&& eval(matchIndexCriterion(listedIndexCriterion,
$dealProductIndexes))
&&
eval(matchProductTypeCriterion(productTypeStringCriterion, $dealProduct))
)
)
then
Logger log = LoggerFactory.getLogger("BOOKING RULE ENGINE LOGGER");
// get the unique collected bookingRuleModel.
BTExecutionBookingRuleModel effectiveBookingRuleModel =
(BTExecutionBookingRuleModel) bookingRuleModels.get(0);
// log.info<http://log.info>("Found matching level 1 booking rule
--> " + effectiveBookingRuleModel);
effectiveBookingRuleModel.applyRuleOnDeal(dealModel);
retract( dealModel ); // only needed in use of stateful session to avoid
processing this deal again.
end
I don't put the 3 others, they are basically the same except the priority ==
BTExecutionBookingRuleModel.LEVEL_1 which is done against LEVEL_2, LEVEL_3 and LEVEL_4
rule.
Each rule is in his own ruleflow-group, it is very basic, if first drools rule is not
active then we try the second (with compares priority to
BTExecutionBookingRuleModel.LEVEL_2).
I also put some logs showing that inserting deals fact takes longer and longer :
- the 222 booking rule are inserted in 16ms
- the 750 booking rule are inserted in 46ms
- the 750 facts are inserted at a pace of 5 by second, then it starts to deteriorate to
several seconds for one insert to finish with the OutOfMemoryError.
2009-09-11 09:46:50 134 INFO [booking.impl.DealBookingProcessorImpl] 658 MarketDealModel
inserted in Drools session
2009-09-11 09:46:50 244 INFO [booking.impl.DealBookingProcessorImpl] 659 MarketDealModel
inserted in Drools session
2009-09-11 09:46:50 369 INFO [booking.impl.DealBookingProcessorImpl] 660 MarketDealModel
inserted in Drools session
2009-09-11 09:46:51 197 INFO [booking.impl.DealBookingProcessorImpl] 661 MarketDealModel
inserted in Drools session
2009-09-11 09:46:51 306 INFO [booking.impl.DealBookingProcessorImpl] 662 MarketDealModel
inserted in Drools session
2009-09-11 09:46:51 540 INFO [booking.impl.DealBookingProcessorImpl] 663 MarketDealModel
inserted in Drools session
2009-09-11 09:46:51 650 INFO [booking.impl.DealBookingProcessorImpl] 664 MarketDealModel
inserted in Drools session
2009-09-11 09:46:51 775 INFO [booking.impl.DealBookingProcessorImpl] 665 MarketDealModel
inserted in Drools session
2009-09-11 09:46:51 884 INFO [booking.impl.DealBookingProcessorImpl] 666 MarketDealModel
inserted in Drools session
2009-09-11 09:46:52 009 INFO [booking.impl.DealBookingProcessorImpl] 667 MarketDealModel
inserted in Drools session
2009-09-11 09:46:52 134 INFO [booking.impl.DealBookingProcessorImpl] 668 MarketDealModel
inserted in Drools session
2009-09-11 09:46:52 243 INFO [booking.impl.DealBookingProcessorImpl] 669 MarketDealModel
inserted in Drools session
2009-09-11 09:46:52 368 INFO [booking.impl.DealBookingProcessorImpl] 670 MarketDealModel
inserted in Drools session
2009-09-11 09:47:32 784 INFO [booking.impl.DealBookingProcessorImpl] 671 MarketDealModel
inserted in Drools session
2009-09-11 09:47:33 003 INFO [booking.impl.DealBookingProcessorImpl] 672 MarketDealModel
inserted in Drools session
2009-09-11 09:47:33 128 INFO [booking.impl.DealBookingProcessorImpl] 673 MarketDealModel
inserted in Drools session
2009-09-11 09:47:33 253 INFO [booking.impl.DealBookingProcessorImpl] 674 MarketDealModel
inserted in Drools session
2009-09-11 09:47:33 362 INFO [booking.impl.DealBookingProcessorImpl] 675 MarketDealModel
inserted in Drools session
2009-09-11 09:47:33 487 INFO [booking.impl.DealBookingProcessorImpl] 676 MarketDealModel
inserted in Drools session
2009-09-11 09:47:33 596 INFO [booking.impl.DealBookingProcessorImpl] 677 MarketDealModel
inserted in Drools session
2009-09-11 09:47:33 721 INFO [booking.impl.DealBookingProcessorImpl] 678 MarketDealModel
inserted in Drools session
2009-09-11 09:47:33 831 INFO [booking.impl.DealBookingProcessorImpl] 679 MarketDealModel
inserted in Drools session
2009-09-11 09:47:33 956 INFO [booking.impl.DealBookingProcessorImpl] 680 MarketDealModel
inserted in Drools session
2009-09-11 09:47:34 128 INFO [booking.impl.DealBookingProcessorImpl] 681 MarketDealModel
inserted in Drools session
2009-09-11 09:47:56 218 INFO [booking.impl.DealBookingProcessorImpl] 682 MarketDealModel
inserted in Drools session
2009-09-11 09:47:56 374 INFO [booking.impl.DealBookingProcessorImpl] 683 MarketDealModel
inserted in Drools session
2009-09-11 09:47:56 483 INFO [booking.impl.DealBookingProcessorImpl] 684 MarketDealModel
inserted in Drools session
2009-09-11 09:47:56 608 INFO [booking.impl.DealBookingProcessorImpl] 685 MarketDealModel
inserted in Drools session
2009-09-11 09:47:56 733 INFO [booking.impl.DealBookingProcessorImpl] 686 MarketDealModel
inserted in Drools session
2009-09-11 09:47:56 858 INFO [booking.impl.DealBookingProcessorImpl] 687 MarketDealModel
inserted in Drools session
2009-09-11 09:47:56 968 INFO [booking.impl.DealBookingProcessorImpl] 688 MarketDealModel
inserted in Drools session
2009-09-11 09:47:57 093 INFO [booking.impl.DealBookingProcessorImpl] 689 MarketDealModel
inserted in Drools session
2009-09-11 09:47:57 218 INFO [booking.impl.DealBookingProcessorImpl] 690 MarketDealModel
inserted in Drools session
2009-09-11 09:47:57 421 INFO [booking.impl.DealBookingProcessorImpl] 691 MarketDealModel
inserted in Drools session
2009-09-11 09:48:05 404 INFO [booking.impl.DealBookingProcessorImpl] 692 MarketDealModel
inserted in Drools session
2009-09-11 09:48:05 529 INFO [booking.impl.DealBookingProcessorImpl] 693 MarketDealModel
inserted in Drools session
2009-09-11 09:48:05 654 INFO [booking.impl.DealBookingProcessorImpl] 694 MarketDealModel
inserted in Drools session
2009-09-11 09:48:05 763 INFO [booking.impl.DealBookingProcessorImpl] 695 MarketDealModel
inserted in Drools session
2009-09-11 09:48:05 888 INFO [booking.impl.DealBookingProcessorImpl] 696 MarketDealModel
inserted in Drools session
2009-09-11 09:48:05 998 INFO [booking.impl.DealBookingProcessorImpl] 697 MarketDealModel
inserted in Drools session
2009-09-11 09:48:06 123 INFO [booking.impl.DealBookingProcessorImpl] 698 MarketDealModel
inserted in Drools session
2009-09-11 09:48:06 357 INFO [booking.impl.DealBookingProcessorImpl] 699 MarketDealModel
inserted in Drools session
2009-09-11 09:48:14 184 INFO [booking.impl.DealBookingProcessorImpl] 700 MarketDealModel
inserted in Drools session
2009-09-11 09:48:14 293 INFO [booking.impl.DealBookingProcessorImpl] 701 MarketDealModel
inserted in Drools session
2009-09-11 09:48:14 418 INFO [booking.impl.DealBookingProcessorImpl] 702 MarketDealModel
inserted in Drools session
2009-09-11 09:48:14 543 INFO [booking.impl.DealBookingProcessorImpl] 703 MarketDealModel
inserted in Drools session
2009-09-11 09:48:14 668 INFO [booking.impl.DealBookingProcessorImpl] 704 MarketDealModel
inserted in Drools session
2009-09-11 09:48:14 856 INFO [booking.impl.DealBookingProcessorImpl] 705 MarketDealModel
inserted in Drools session
2009-09-11 09:48:22 761 INFO [booking.impl.DealBookingProcessorImpl] 706 MarketDealModel
inserted in Drools session
2009-09-11 09:48:22 886 INFO [booking.impl.DealBookingProcessorImpl] 707 MarketDealModel
inserted in Drools session
2009-09-11 09:48:22 995 INFO [booking.impl.DealBookingProcessorImpl] 708 MarketDealModel
inserted in Drools session
2009-09-11 09:48:23 120 INFO [booking.impl.DealBookingProcessorImpl] 709 MarketDealModel
inserted in Drools session
2009-09-11 09:48:23 323 INFO [booking.impl.DealBookingProcessorImpl] 710 MarketDealModel
inserted in Drools session
2009-09-11 09:48:32 166 INFO [booking.impl.DealBookingProcessorImpl] 711 MarketDealModel
inserted in Drools session
2009-09-11 09:48:32 290 INFO [booking.impl.DealBookingProcessorImpl] 712 MarketDealModel
inserted in Drools session
2009-09-11 09:48:32 400 INFO [booking.impl.DealBookingProcessorImpl] 713 MarketDealModel
inserted in Drools session
2009-09-11 09:48:32 634 INFO [booking.impl.DealBookingProcessorImpl] 714 MarketDealModel
inserted in Drools session
2009-09-11 09:48:40 570 INFO [booking.impl.DealBookingProcessorImpl] 715 MarketDealModel
inserted in Drools session
2009-09-11 09:48:40 695 INFO [booking.impl.DealBookingProcessorImpl] 716 MarketDealModel
inserted in Drools session
2009-09-11 09:48:40 899 INFO [booking.impl.DealBookingProcessorImpl] 717 MarketDealModel
inserted in Drools session
2009-09-11 09:48:48 850 INFO [booking.impl.DealBookingProcessorImpl] 718 MarketDealModel
inserted in Drools session
2009-09-11 09:48:48 975 INFO [booking.impl.DealBookingProcessorImpl] 719 MarketDealModel
inserted in Drools session
2009-09-11 09:48:49 272 INFO [booking.impl.DealBookingProcessorImpl] 720 MarketDealModel
inserted in Drools session
2009-09-11 09:48:57 209 INFO [booking.impl.DealBookingProcessorImpl] 721 MarketDealModel
inserted in Drools session
2009-09-11 09:48:57 505 INFO [booking.impl.DealBookingProcessorImpl] 722 MarketDealModel
inserted in Drools session
2009-09-11 09:49:05 598 INFO [booking.impl.DealBookingProcessorImpl] 723 MarketDealModel
inserted in Drools session
2009-09-11 09:49:13 722 INFO [booking.impl.DealBookingProcessorImpl] 724 MarketDealModel
inserted in Drools session
2009-09-11 09:49:21 752 INFO [booking.impl.DealBookingProcessorImpl] 725 MarketDealModel
inserted in Drools session
2009-09-11 09:49:29 813 INFO [booking.impl.DealBookingProcessorImpl] 726 MarketDealModel
inserted in Drools session
2009-09-11 09:49:37 921 INFO [booking.impl.DealBookingProcessorImpl] 727 MarketDealModel
inserted in Drools session
2009-09-11 09:49:53 809 INFO [booking.impl.DealBookingProcessorImpl] 728 MarketDealModel
inserted in Drools session
2009-09-11 09:50:26 507 INFO [booking.impl.DealBookingProcessorImpl] 729 MarketDealModel
inserted in Drools session
Exception in thread "Timer-0" java.lang.OutOfMemoryError: Java heap space
at java.lang.Object.clone(Native Method)
at java.util.LinkedList.clone(LinkedList.java:830)
at
com.mchange.v2.resourcepool.BasicResourcePool.cloneOfUnused(BasicResourcePool.java:1661)
at
com.mchange.v2.resourcepool.BasicResourcePool.cullExpired(BasicResourcePool.java:1450)
at
com.mchange.v2.resourcepool.BasicResourcePool.access$1900(BasicResourcePool.java:32)
at
com.mchange.v2.resourcepool.BasicResourcePool$CullTask.run(BasicResourcePool.java:1937)
at java.util.TimerThread.mainLoop(Timer.java:512)
at java.util.TimerThread.run(Timer.java:462)
Exception in thread "Ice.ThreadPool.Server-1" java.lang.OutOfMemoryError: Java
heap space
at
org.mvel2.integration.impl.ClassImportResolverFactory.<init>(ClassImportResolverFactory.java:49)
at org.mvel2.compiler.CompiledExpression.getValue(CompiledExpression.java:104)
at org.mvel2.MVEL.executeExpression(MVEL.java:978)
at
org.drools.base.mvel.MVELPredicateExpression.evaluate(MVELPredicateExpression.java:75)
at
org.drools.rule.PredicateConstraint.isAllowedCachedLeft(PredicateConstraint.java:295)
at
org.drools.common.SingleBetaConstraints.isAllowedCachedLeft(SingleBetaConstraints.java:138)
at org.drools.reteoo.JoinNode.assertLeftTuple(JoinNode.java:114)
at
org.drools.reteoo.CompositeLeftTupleSinkAdapter.doPropagateAssertLeftTuple(CompositeLeftTupleSinkAdapter.java:145)
at
org.drools.reteoo.CompositeLeftTupleSinkAdapter.createAndPropagateAssertLeftTuple(CompositeLeftTupleSinkAdapter.java:57)
at
org.drools.reteoo.LeftInputAdapterNode.assertObject(LeftInputAdapterNode.java:142)
at
org.drools.reteoo.SingleObjectSinkAdapter.propagateAssertObject(SingleObjectSinkAdapter.java:42)
at org.drools.reteoo.ObjectTypeNode.assertObject(ObjectTypeNode.java:185)
at org.drools.reteoo.EntryPointNode.assertObject(EntryPointNode.java:146)
at org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:1046)
at org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:1001)
at org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:788)
at
org.drools.impl.StatefulKnowledgeSessionImpl.insert(StatefulKnowledgeSessionImpl.java:216)
at
north.stardust2.services.trading.booking.impl.DealBookingProcessorImpl.insertDealFacts(DealBookingProcessorImpl.java:200)
So to summarize my questions :
- how can I fix the facts insertion ?
- is there some newbie mistakes in my approach ?
Thanks in advance for your help,
Regards,
Joël Costigliola
________________________________
Ce courriel et toutes les pièces jointes sont confidentiels et peuvent être couverts par
un privilège ou une protection légale. Il est établi à l'attention exclusive de ses
destinataires. Toute utilisation de ce courriel non conforme à sa destination, toute
diffusion ou toute publication, totale ou partielle, est interdite, sauf autorisation
expresse préalable. Toutes opinions exprimées dans ce courriel ne sauraient nécessairement
refléter celle de Natixis, de ses filiales. Elles sont aussi susceptibles de modification
sans notification préalable. Si vous recevez ce courriel par erreur, merci de le détruire
et d'en avertir immédiatement l'expéditeur. L'Internet ne permettant pas
d'assurer l'intégrité de ce courriel, Natixis décline toute responsabilité
s'il a été altéré, déformé ou falsifié et chaque destinataire qui utilise ce mode de
communication est supposé en accepter les risques.
This email and any attachment are confidential and may be legally privileged or otherwise
protected from disclosure. It is intended only for the stated addressee(s) and access to
it by any other person(s) is unauthorised. Any use, dissemination or disclosure not in
accordance with its purpose, either in whole or in part, is prohibited without our prior
formal approval. Any opinion expressed in this email may not necessarily reflect the
opinion of Natixis, its affiliates. It may also be subject to change without prior notice.
If you are not an addressee, you must not disclose, copy, circulate or in any other way
use or rely on the information contained in this email. If you have received it in error,
please inform us immediately and delete all copies. The Internet can not guarantee the
integrity of this email therefore Natixis shall not be liable for the email if altered,
changed or falsified and anyone who communicates with us by e-mail is taken to accept
these risks.
________________________________
________________________________
Ce courriel et toutes les pièces jointes sont confidentiels et peuvent être couverts par
un privilège ou une protection légale. Il est établi à l'attention exclusive de ses
destinataires. Toute utilisation de ce courriel non conforme à sa destination, toute
diffusion ou toute publication, totale ou partielle, est interdite, sauf autorisation
expresse préalable. Toutes opinions exprimées dans ce courriel ne sauraient nécessairement
refléter celle de Natixis, de ses filiales. Elles sont aussi susceptibles de modification
sans notification préalable. Si vous recevez ce courriel par erreur, merci de le détruire
et d'en avertir immédiatement l'expéditeur. L'Internet ne permettant pas
d'assurer l'intégrité de ce courriel, Natixis décline toute responsabilité
s'il a été altéré, déformé ou falsifié et chaque destinataire qui utilise ce mode de
communication est supposé en accepter les risques.
This email and any attachment are confidential and may be legally privileged or otherwise
protected from disclosure. It is intended only for the stated addressee(s) and access to
it by any other person(s) is unauthorised. Any use, dissemination or disclosure not in
accordance with its purpose, either in whole or in part, is prohibited without our prior
formal approval. Any opinion expressed in this email may not necessarily reflect the
opinion of Natixis, its affiliates. It may also be subject to change without prior notice.
If you are not an addressee, you must not disclose, copy, circulate or in any other way
use or rely on the information contained in this email. If you have received it in error,
please inform us immediately and delete all copies. The Internet can not guarantee the
integrity of this email therefore Natixis shall not be liable for the email if altered,
changed or falsified and anyone who communicates with us by e-mail is taken to accept
these risks.
________________________________
_______________________________________________
rules-users mailing list
rules-users@lists.jboss.org<mailto:rules-users@lists.jboss.org>
https://lists.jboss.org/mailman/listinfo/rules-users
________________________________
Ce courriel et toutes les pièces jointes sont confidentiels et peuvent être couverts par
un privilège ou une protection légale. Il est établi à l'attention exclusive de ses
destinataires. Toute utilisation de ce courriel non conforme à sa destination, toute
diffusion ou toute publication, totale ou partielle, est interdite, sauf autorisation
expresse préalable. Toutes opinions exprimées dans ce courriel ne sauraient nécessairement
refléter celle de Natixis, de ses filiales. Elles sont aussi susceptibles de modification
sans notification préalable. Si vous recevez ce courriel par erreur, merci de le détruire
et d'en avertir immédiatement l'expéditeur. L'Internet ne permettant pas
d'assurer l'intégrité de ce courriel, Natixis décline toute responsabilité
s'il a été altéré, déformé ou falsifié et chaque destinataire qui utilise ce mode de
communication est supposé en accepter les risques.
This email and any attachment are confidential and may be legally privileged or otherwise
protected from disclosure. It is intended only for the stated addressee(s) and access to
it by any other person(s) is unauthorised. Any use, dissemination or disclosure not in
accordance with its purpose, either in whole or in part, is prohibited without our prior
formal approval. Any opinion expressed in this email may not necessarily reflect the
opinion of Natixis, its affiliates. It may also be subject to change without prior notice.
If you are not an addressee, you must not disclose, copy, circulate or in any other way
use or rely on the information contained in this email. If you have received it in error,
please inform us immediately and delete all copies. The Internet can not guarantee the
integrity of this email therefore Natixis shall not be liable for the email if altered,
changed or falsified and anyone who communicates with us by e-mail is taken to accept
these risks.
________________________________
--------------------------------------------------------
Ce courriel et toutes les pièces jointes sont confidentiels et peuvent être couverts par
un privilège ou une protection légale. Il est établi à l'attention exclusive de ses
destinataires. Toute utilisation de ce courriel non conforme à sa destination, toute
diffusion ou toute publication, totale ou partielle, est interdite, sauf autorisation
expresse préalable. Toutes opinions exprimées dans ce courriel ne sauraient nécessairement
refléter celle de Natixis, de ses filiales. Elles sont aussi susceptibles de modification
sans notification préalable. Si vous recevez ce courriel par erreur, merci de le détruire
et d'en avertir immédiatement l'expéditeur. L'Internet ne permettant pas
d'assurer l'intégrité de ce courriel, Natixis décline toute responsabilité
s'il a été altéré, déformé ou falsifié et chaque destinataire qui utilise ce mode de
communication est supposé en accepter les risques.
This email and any attachment are confidential and may be legally privileged or otherwise
protected from disclosure. It is intended only for the stated addressee(s) and access to
it by any other person(s) is unauthorised. Any use, dissemination or disclosure not in
accordance with its purpose, either in whole or in part, is prohibited without our prior
formal approval. Any opinion expressed in this email may not necessarily reflect the
opinion of Natixis, its affiliates. It may also be subject to change without prior notice.
If you are not an addressee, you must not disclose, copy, circulate or in any other way
use or rely on the information contained in this email. If you have received it in error,
please inform us immediately and delete all copies. The Internet can not guarantee the
integrity of this email therefore Natixis shall not be liable for the email if altered,
changed or falsified and anyone who communicates with us by e-mail is taken to accept
these risks.
--------------------------------------------------------