[rules-users] Memory error when inserting facts in statefulsession
Wolfgang Laun
wolfgang.laun at gmail.com
Fri Sep 11 06:41:32 EDT 2009
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 at 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 at lists.jboss.org [mailto:
> rules-users-bounces at 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 at lists.jboss.org [mailto:
> rules-users-bounces at lists.jboss.org] *On Behalf Of *Costigliola Joel (EXT)
> *Sent:* 11 September 2009 09:21
> *To:* rules-users at 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("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 at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20090911/0f3406a7/attachment.html
More information about the rules-users
mailing list