Re: Drools Multithreading issues
by Mark Proctor
I'm cc'ing in the user community for feedback on this. Personally I
don't think this is the case, I have google alerts for drools and jboss
rules and have yet to see people complaining about our unsatisfactory
community support. In fact I hear the exact opposite, the Drools core
devs make themselves extremely available to the community, more so than
my production managers would like. If you think can get this type of
available/response from other rule engine companies, or better, then
please go with them. However the feedback I've heard on other vendors
indicates you will be opening yourself up to a whole world of new hurt.
We tend to put out bug fix releases every two to three months. We do not
constantly work on and reviewing bugs in JIRAs, as we also have to work
on our main releases - so we tend to work on bug fixes in phases. The
only time this is not the case is for paying customers, where SLAs
obligate us to meet their needs in given time frames. We don't tend to
respond to "we aren't paying customers now, but if you fix X then we
might be" as every other free loader tries to tempt us with this carrot
and most do not fulfill on this once they have what they want - so
seriously that isn't going to prioritise your JIRAs higher than any
other JIRA, we've been doing this a long time and we just aren't that
nieve any more. Unless you are a paying customer JIRAs with
unit/integration tests tend to get picked up first which is why Edson
responded to JBRULES-1392 first before your JBRULES-1330. I might also
add that JIRAs must be kept brief but detailed, 1330 is full of waffle
when reviewing all the JIRAs, during a bug fixing session, I would have
read the first two lines and then moved yours to the back of the pile -
because 1) there was no unit/integration test 2) it was waffle and thus
hard to read 3) You aren't a paying customer thus no SLA.
Also lets look at 1392. We have Jan working with us creating tests and
providing valuable feedback. We just have you asking repeatedly for us
to give you the binaries because you can't get it to compile. Think on
that and then you'll see why Jan gets responses as he knows how to work
productively in an open source environment. Maybe you can try contacting
Jan directly and pooling your resources with him and learning from him,
he might also be able to help you get things compiling, as the core
developers just don't have the time for that.
I'd like to also remind you that there is no guarantee for community
response, anything that you get is a "gift", this is true of all open
source projects - please remember and appreciate this, not just the core
devs response, but also the rest of the community. If you want 2 hour
response times, then pay for it, where we do guarantee responses and to
fix any reasonable production stoppers. Also it is open source, you are
welcome to roll up your sleaves and fix these problems yourselves.
patches welcome.
Mark
Bhasin, Navaljit S wrote:
> Hi Mark,
>
> We used Drools in an internal application. However we are running into
> scalability issues, since drools cannot support a multithreaded
> environment. We deploy rules as a service behind MessaeDrivenBeans.
> Though all these MDB's create separate instances of Rulesbase, they
> data still gets mixed up. It doesn't matter if we are using Stateless
> or Stateful Session. We are virtually left with option of configuring
> one instance of MDB for the entire application. No further room for
> scaling up.
> This bug is noticeable on UNIX/Linux servers which are truly multi
> cpu. Works fine on single cpu windows desktops.
> This seems a show stopper to me. I am not sure if this was previously
> reported to you.
> I opened a bug a few months ago, but nobody seemed to be willing to
> fix it until recently when Edson Tirelli started working on related
> issue.
The other one attached a test, yours did not. If you want something that
complicated fixed you need to invest your time in creating a
reproducable unit/integration test like Jan did from 1330. We have
already fixed many things from 1330 but it seems there are still a few
more things to fix. Edson is working on this as a priority with Jan and
we will release 4.0.5 once we are sure this is good.
> There are many others on various blogs who are frustrated with no
> response on drools multithreading issues. Needles to say, drools need
> to support multithreading to scale.
> We are even ready to subscribe to commercial support, but we will like
> to get this bug resolved first. So far the response has been far from
> satisfactory. This is a show stopper for us. We are beginning to
> evaluate JESS. We really want to continue with Drools, since the
> developers are already working on this.This needs be resolved sooner.
>
> Thanks for reading this email.
>
>
> /-Nav Bhasin/
>
> Navaljit Bhasin
> Applications Architect
> Quest Diagnostics Reporting Services
> phone number:201-729-7868
>
>
>
>
>
> ------------------------------------------
> The contents of this message, together with any attachments, are
> intended only for the use of the person(s) to which they are addressed
> and may contain confidential and/or privileged information. Further,
> any medical information herein is confidential and protected by law.
> It is unlawful for unauthorid persons to use, review, copy, disclose,
> or disseminate confidential medical information. If you are not the
> intended recipient, immediately advise the sender and delete this
> message and any attachments. Any distribution, or copying of this
> message, or any attachment, is prohibited.
16 years, 9 months
You must see this, guys...new bug? defining rules saturday night made me mad?
by mmquelo@gmail.com
Look at this....
I have got a "ContractWrapper" fact inserted into WM.
It wraps a "Contract" object and some "enums" fields.
One of these fields is "upronto":
public class ContractWrapper extends BaseOmPersistentWithAssignedId{
Contract mycontract=null;
...
Pronto upronto = null;
...
<getters and setters....>
...
}
"upronto" is an insance of a "Pronto" java enum:
public enum Pronto {
N,
UNKNOWN,
Y;
}
"Pronto" can be : (Y, N, UNKNOWN)
Here is the rule which reasons over this enum:
(ofcourse I have got a Request into WM as well)
rule "ScorePronto"
dialect "mvel"
ruleflow-group "Scoring"
when
$r:Request( $mc:mainContract != null )
$cw_p:ContractWrapper($c_w_p:mycontract == $mc, eval(upronto != Pronto.Y))
then
System.out.println("Test Result: "+($cw_p.upronto == Pronto.Y))
end
Any guesses for the output???
Well....
Test Result: true
HOW COMES???????????????????
I mean ... the test "eval(upronto != Pronto.Y)" returned "true".... It means that the rule
engine sees upronto <> Pronto.Y!, doesn't it??!!!!
So... why do I get "upronto == Pronto.Y" in the RHS????
What the.........&$%%&()%%$/%£....sorry....but having these
kind of problems during saturday night is not so pleaseant!
T-T
I really hope you can help me with a workaround to this issue.
Bye
Massi
16 years, 9 months
Globals asserted as facts... how to modify them...
by mmquelo massi
Hi everybody,
I followed all the topics about globals and the fact that they are
immutables.
I also understood that once we decide to reason over globals, it's
time we no more use them and we start to use simple WM facts.
Now...
I tell you my scenario.
I have got two globals.
A "request" global and a "reply" global. The first one is a "Request" java
instance
and the second one is a "Reply" java instance. They belong to the Object
model
I designed.
My application makes a request to the rule engine passing it a "request" as
global,
and get back a reply from it receiving a modified "reply" global.
I use a ruleflow to execute the rules.
I think everything would be perfect and smooth if I had not the need to
reason
over the reply during the rule session....
*That's the point!*
I do not just need to modify the "reply" global in order to get the final
value *outside*
*the rule engine*, but I DO need to reason over it *INSIDE* the rule
session.
*So.... what should I do in order to reason over the reply INSIDE AND
OUTSIDE *
*the Rule Session?*
Should I insert the "reply" global into the WM?
Let assume I do that, what happen if I pass the "reply" global to
a drools function which alters the "reply"?
Imagine a rule as follows and imagine I previously inserted the "reply"
global into the WM:
----
...
global my.object.model.Reply reply
...
rule "addcriminal_2_reply"
when
$p: Person(job=="criminal")
then
addCriminaltoReply(reply, $p );
end
----
Will this alteration affect the corresponding Reply() fact in the WM as
well?
Now let see this other rule:
(Same, let imagine i previously inserted: insert(reply); )
----
global my.object.model.Reply reply
rule "FullFill_replyCode"
when
$r: Reply(code=="john.wayne") from reply
then
$r.code.name = john;
$r.code.lastname = wayne;
end
----
If I execute this rule in a ruleflow, do i need to "update($r)"
in order to get the modified $r value in the next ruleflow node?
And what happens to the global??? Will it get modified as well?
I am sure you can help me.
Bye bye.
Massi
16 years, 9 months
Globals asserted as facts... how to modify them...
by mmquelo@gmail.com
Hi everybody,
I followed all the topics about globals and the fact that they are immutables.
I also understood that once we decide to reason over globals, it's
time we no more use them and we start to use simple WM facts.
Now...
I tell you my scenario.
I have got two globals.
A "request" global and a "reply" global. The first one is a "Request" java instance
and the second one is a "Reply" java instance. They belong to the Object model
I designed.
My application makes a request to the rule engine passing it a "request" as global,
and get back a reply from it receiving a modified "reply" global.
I use a ruleflow to execute the rules.
I think everything would be perfect and smooth if I had not the need to reason
over the reply during the rule session....
That's the point!
I do not just need to modify the "reply" global in order to get the final value outside
the rule engine, but I DO need to reason over it INSIDE the rule session.
So.... what should I do in order to reason over the reply INSIDE AND OUTSIDE
the Rule Session?
Should I insert the "reply" global into the WM?
Let assume I do that, what happen if I pass the "reply" global to
a drools function which alters the "reply"?
Imagine a rule as follows and imagine I previously inserted the "reply" global into the WM:
----
...
global my.object.model.Reply reply
...
rule "addcriminal_2_reply"
when
$p: Person(job=="criminal")
then
addCriminaltoReply(reply, $p );
end
----
Will this alteration affect the corresponding Reply() fact in the WM as well?
Now let see this other rule:
(Same, let imagine i previously inserted: insert(reply); )
----
global my.object.model.Reply reply
rule "FullFill_replyCode"
when
$r: Reply(code=="john.wayne") from reply
then
$r.code.name = john;
$r.code.lastname = wayne;
end
----
If I execute this rule in a ruleflow, do i need to "update($r)"
in order to get the modified $r value in the next ruleflow node?
And what happens to the global??? Will it get modified as well?
I am sure you can help me.
Bye bye.
Massi
16 years, 9 months
Migrating from Drools 2.1 to 3.0
by Vishal Saini
Hi,
Greetings!
My project uses Drools 2.1 and we are migrating from 2.1 to 3.0. I have
converted the 2.1 drools rules file to 3.0. Please find attached the same.
But when i am running this rule it is giving me
*DroolsParserException* [*(null:
1, -1): Document root element is missing.*]
I have verified the xml and it seems ok to me.
Please let me know is there anything wrong in the XML. or Where else can be
the problem?
Your help will be highly appreciated.
Thanks & Regards,
Vishal
16 years, 9 months
Why does it make this error?PB using globals
by nemesis29@free.fr
hello all,
Well i try to use global in one of my rules and it doesn't go well ^^.
So in my code i have declared a Boolean flagTest = new Boolean(true), set it to
a statless session : session.setGlobals("debugFlag", flagTest)and in my rule i
have put :
global java.lang.Boolean debugFlag.
When Drools does : globals.putAll( newPkg.getGlobals() ); line 495 in
AbstractRuleBase it throw java.lang.UnsupportedOperationException :-s
Is it normal or is it a bug??
Nicolas
16 years, 9 months
how to identify the result
by Nikhil_dev
i am creating dynamic rule and parse it to the drools
when i parse a Rule all its Conditions are checked and then as its
consequence object of a bean gets updated or new vale is add to the object.
i wld like to knw one thing is there any way drools (any function) help to
identify
which object has updated. instead me keeping a track on the consequence
(RHS)
object is value updated
1 more thing, wat if the condition is not satisfied,i.e., how wld i chk
weather the
the conditions is valid or not in the Rule which i have provided is there
any Function
provided by the drools.
Regards,
Nikhil
--
View this message in context: http://www.nabble.com/how-to-identify-the-result-tp15495041p15495041.html
Sent from the drools - user mailing list archive at Nabble.com.
16 years, 9 months
RE: RCP and DRools project: Unable to create view: org/drools/Wor kingMemory
by Huang, XiaoDong David
In addition:
1. "Add required plug-in" in configuration can not add the DRools libraries,
is it correct?
2. Export operation ended with error: "Error occurred during the operation.
A zip file containing the build logs has been generated and placed at
"D:\Eclipse Deploy" (zip file attached also). In the zip file, "The import
org.drools cannot be resolved",..., seems like that DRools libraries missed.
How to solve this issue?
Any comment is welcome.
Thanks,
David
_____
From: Huang, XiaoDong David
Sent: Thursday, February 14, 2008 2:55 PM
To: 'Rules Users List'
Subject: RE: RCP and DRools project: Unable to create view:
org/drools/WorkingMemory
Hi,
I am trying to use RCP to develop a BRMS. But I am a newcomer of both RCP
and DRools. The problem in my program is:
A view can not be displayed properly while the DRools program is added in my
RCP project. But if I disable below statement, the view can be displayed:
workingMemory = ruleBase.newStatefulSession();
Error message and a view RCP codes in which rule is fired are attached.
My steps of constructing the RCP+DRools project:
1. Create Plug-in project with RCP
2. Add customized view and add some buttons
3. Run as Eclipse Application, everything is fine
4. "Convert to DRools project" using the pop-up menu, some DRools libraries
were added.
5. Add button event and fire rules in a view - "EditView"
6. Run as Eclipse Application, EditView can not be displayed properly and
throw out error message.
7. if "workingMemory = ruleBase.newStatefulSession();" is disabled, the view
can be display correctly again.
Is my DRools calling method in RCP correct?
Please comment.
Thanks,
David
16 years, 9 months