tag:blogger.com,1999:blog-5869426.post2679013021285728270..comments2024-03-25T09:15:58.430+00:00Comments on Drools & jBPM: The Birth of Drools Pojo RulesMark Proctorhttp://www.blogger.com/profile/03304277188725220501noreply@blogger.comBlogger16125tag:blogger.com,1999:blog-5869426.post-29678121792429770442020-07-06T11:14:58.241+01:002020-07-06T11:14:58.241+01:00Hi, Very nice article. I hope you will publish aga...<br /><a title="Hi, Very nice article. I hope you will publish again such type of post. Thank you!" href="http://tjproducts.com.sg/" rel="nofollow">Hi, Very nice article. I hope you will publish again such type of post. Thank you!</a><br /><a title="Corporate gifts ideas" href="http://tjproducts.com.sg/" rel="nofollow">Corporate gifts ideas</a> | <a title="Corporate gifts" href="http://tjproducts.com.sg/" rel="nofollow">Corporate gifts</a><br /><a title="Corporate gifts singapore" href="http://tjproducts.com.sg/" rel="nofollow">Corporate gifts singapore</a> | <a title="Corporate gifts in singapore" href="http://tjproducts.com.sg/" rel="nofollow">Corporate gifts in singapore</a><br /><a title="Promotional gifts singapore" href="http://tjproducts.com.sg/" rel="nofollow">Promotional gifts singapore</a> | <a title="Corporate gifts wholesale Singapore" href="http://tjproducts.com.sg/" rel="nofollow">Corporate gifts wholesale Singapore</a><br /><a href="https://tjproducts.com.sg/name-card-holders" title="Business card holder singapore" rel="nofollow">Business card holder singapore</a> | <a href="https://tjproducts.com.sg/product-catagory/apparels/" title="T shirts supplier singapore" rel="nofollow">T shirts supplier singapore</a><br /><a href="https://tjproducts.com.sg/product-catagory/it-gadget/usb-flashdrivers" title="Thumb drive supplier singapore" rel="nofollow">Thumb drive supplier singapore</a> | <a href="https://tjproducts.com.sg/product-catagory/leather" title="Leather corporate gifts singapore" rel="nofollow">Leather corporate gifts singapore</a><br /><br /><br />tjproductstechhttps://www.blogger.com/profile/14147892538742218093noreply@blogger.comtag:blogger.com,1999:blog-5869426.post-41795476643940205942019-10-10T06:52:44.796+01:002019-10-10T06:52:44.796+01:00A very interesting blog<br /><a title="A" href="http://kitcbe.com/best-colleges-computer-engineering.html" rel="nofollow">A</a> <a title="very" href="http://kitcbe.com/best-mba-colleges-coimbatore.html" rel="nofollow">very</a> <a title="interesting" href="http://kitcbe.com/engg-colleges-coimbatore.html" rel="nofollow">interesting</a> <a title="blog" href="http://kitcbe.com/engineering-courses-tamilnadu.html" rel="nofollow">blog</a><br />KIThttps://www.blogger.com/profile/06229835684247169040noreply@blogger.comtag:blogger.com,1999:blog-5869426.post-23562809880779221752014-10-30T04:49:18.329+00:002014-10-30T04:49:18.329+00:00"This is making us go back to Drools 5 becaus..."This is making us go back to Drools 5 because regardless of Drools 5's limitations, it at least works (mostly), "<br />There is a mode to run Drools 6 with Rete mode, which might help for now - this is there as a fallback, to allow people to get the benefit of the new api and deployment model, while easing into the phreak algorithm<br />http://grepcode.com/file/repo1.maven.org/maven2/org.kie/kie-internal/6.0.0.CR3/org/kie/internal/builder/conf/RuleEngineOption.java<br /><br />Also did you try providing trace log outputs? This can really help with understanding what's going on. We will happily explain to you how to interpret them. <br />http://blog.athico.com/2014/10/trace-output-with-drools.html<br /><br />All Drools developers are available on irc for real time chat discussions across EU and US timezones.<br />http://drools.org/community/chat.htmlMark Proctorhttps://www.blogger.com/profile/03304277188725220501noreply@blogger.comtag:blogger.com,1999:blog-5869426.post-47707479681612271912014-10-30T04:38:35.162+00:002014-10-30T04:38:35.162+00:00Red Hat can operate under NDA while looking at you...Red Hat can operate under NDA while looking at your rule bases, to help you debug your problems. We do this for all our customers. We can probably do this for a non-customer as a one off, as 6 is new. This will allow you to protect your code, while getting help. Could you provide a link to the thread you are having problems with in the mailing list? Mario and Davide are normally very keen to help people, so I'd be surprised if they are not attempting to help you.Mark Proctorhttps://www.blogger.com/profile/03304277188725220501noreply@blogger.comtag:blogger.com,1999:blog-5869426.post-66473669387075894822014-10-30T01:43:25.115+00:002014-10-30T01:43:25.115+00:00The big problem is that we can reproduce this insi...The big problem is that we can reproduce this inside our large corporate (proprietary) code base and rule set, but whenever we try to create sample code to reproduce it, the bug doesn't occur in the sample code, the rule fires just fine in the sample code, meaning it's some bizarre interaction with other rules that's causing the rule not to fire despite the fact that the correct known test data has been inserted to make it fire. And of course we can't give you our corporate crown jewels (the complete rule set and the large application that it is embedded in) because we'd be fired and not in the rules sense. This is making us go back to Drools 5 because regardless of Drools 5's limitations, it at least works (mostly), while Drools 6 has been one inscrutable impossible-to-reproduce-outside-our-giant-application bug after another and no guidance from the Drools folks as to how to properly debug these problems so we can actually nail down a problem and create a test case that reproduces it.BadTuxhttps://www.blogger.com/profile/01345749557330760251noreply@blogger.comtag:blogger.com,1999:blog-5869426.post-48501696302996064892014-10-28T09:56:09.180+00:002014-10-28T09:56:09.180+00:00That's great! I am really looking forward to i...That's great! I am really looking forward to implementing my first pojo rules!<br />Bruno Freudensprunghttp://www.temis.comnoreply@blogger.comtag:blogger.com,1999:blog-5869426.post-44906288478390117412014-10-27T16:28:58.176+00:002014-10-27T16:28:58.176+00:00You will be able to put break points in any lambda...You will be able to put break points in any lambda to determine if it fires, yes.<br /><br />MarkMark Proctorhttps://www.blogger.com/profile/03304277188725220501noreply@blogger.comtag:blogger.com,1999:blog-5869426.post-9901041999992128432014-10-27T09:27:58.329+00:002014-10-27T09:27:58.329+00:00Thanks Mark, crystal clear.
I'll eventually gi...Thanks Mark, crystal clear.<br />I'll eventually give the drools-pojorule a try but: would you say it will be possible to set a breakpoint in the lambda-based conditions (if there are many of them) in order to be able determine, when a rule is not firing, which condition is evaluated to false? If it was the case, it would be great!<br />Thanks in advance.Bruno Freudensprunghttp://www.temis.comnoreply@blogger.comtag:blogger.com,1999:blog-5869426.post-32663365840886301132014-10-26T23:14:01.200+00:002014-10-26T23:14:01.200+00:00yes that is true, and it hasn't changed in the...yes that is true, and it hasn't changed in the example above. If you want fail fast behaviour you'll want to avoid one large expr block, and use small ones. We'll look at each expr and analyse it's required inputs and build the tree efficiently. So expr blocks with a single input, will still go in the alpha node. Ones with two inputs will be put into the join node etc.<br /><br />So yes there is more separation the way things are declared in the above, but we still build the same network via required input analysis. <br /><br />Pergem is no longer an issue in java8, it's all heap now.<br /><br />MarkMark Proctorhttps://www.blogger.com/profile/03304277188725220501noreply@blogger.comtag:blogger.com,1999:blog-5869426.post-13392634212674180072014-10-26T12:10:32.484+00:002014-10-26T12:10:32.484+00:00Hi Mark,
It sounds like a great evolution of Drool...Hi Mark,<br />It sounds like a great evolution of Drools. Making it more accessible to pure Java developers is a really good idea.<br />I have a question about the execution speed of such rules because of the "inputs followed by exprs" pattern.<br />Drools 5.4 is currently integrated into our application as a kind of "scripting" engine and I always ask my users to write "fail fast" conditions. <br />Maybe it is a misunderstanding of Drools 5.4 behavior but I got to the conclusion (after somes experiments) such rules:<br />fact1 : Fact( plenty of conditions on fact1 )<br />fac2 : Fact( plenty of conditions on fact2 )<br />fact3 : OtherFact ( link fact3 with fact1, link fact3 with fact2)<br /><br />... are faster than their equivalent written like this:<br />fact1 : Fact()<br />fac2 : Fact()<br />fact3 : OtherFact ( plenty of conditions on fact1, plenty of conditions on fact2, link fact3 with fact1, link fact3 with fact2)<br />The way I imagine Drools behavior, the second one creates a cross product of the Facts then iterates over a big collection to eventually select only a few tuples.<br />If my assumption is correct, do you think pojo rules will behave like the first rule or like the second rule?<br />Thanks in advance for your answer.<br />Best regards<br /><br />PS : and I have the impression this approach will bring a lot of benefits to large rule databases (using rule templates) as far as permgen space is concerned<br />Bruno Freudensprunghttp://www.temis.comnoreply@blogger.comtag:blogger.com,1999:blog-5869426.post-58132731912922092752014-09-26T00:22:59.101+01:002014-09-26T00:22:59.101+01:00Btw you will not get transitive decencies resolved...Btw you will not get transitive decencies resolved if you do not have kie-ci on the class path.Mark Proctorhttps://www.blogger.com/profile/03304277188725220501noreply@blogger.comtag:blogger.com,1999:blog-5869426.post-48809787628918708792014-09-26T00:21:06.201+01:002014-09-26T00:21:06.201+01:00Transitive dependencies should have worked since 6...Transitive dependencies should have worked since 6.1, if they do not the new need to know urgently. More important you need to raise JIRA's for these things, ideally with unit tests.<br />http://docs.jboss.org/drools/release/5.5.0.Final/droolsjbpm-introduction-docs/html/gettingstarted.html<br /><br />No Jira, No Unit Test - no moaning ;)<br /><br />1) We can load from an XLS, just not read out. The plan for next year is to drop our current XML and move to XLS as durable storage format. So that will unify our web and XLS DTable solutions.<br /><br />2) You can already do a dump with any GIT tool. But I'll see if we can have a "save as zip" button added, should be quick.<br /><br />A 6.0 GIT repository will work with 6.1 and 6.2. If it does not, it's a bug - we need to hear about these things, so we can fix them. Please make sure you raise JIRA's.<br /><br />3) Earlier version of drools allowed functions to be used across packages. However this was the source of classloader memory leaks. When the package is reloaded with new rules, all the rules in other packages still reference the older function and create a leak. This is incredibly complex to solve, as it involves creating traceability and then reloading all dependant packages. And it's a very fragile thing to do. So we instead isolated function use to the package they are declared in.<br /><br />.java files can be edited in the workbench. The recommendation is you put static methods in there and use them from your rules, they all rules can access them. Although you cannot hot update this function, but you can add new .java files. This is a limitation of class loaders that we cannot avoid.<br /><br />You can create project that have your static functions in - in the workbench. And then depend on those projects via maven. You should then have full access to the functions in your rules.<br /><br />Feel free to chat to us on irc or the web forum, we can't fix these things if people don't tell us about them, or help provide reproducers or ideally unit tests. And JIRA's are essential.<br />http://drools.org/community/forum.html<br />http://drools.org/community/chat.html<br /><br />MarkMark Proctorhttps://www.blogger.com/profile/03304277188725220501noreply@blogger.comtag:blogger.com,1999:blog-5869426.post-13391208799058367052014-09-26T00:11:41.978+01:002014-09-26T00:11:41.978+01:00I'd actually recommend the web forum for these...I'd actually recommend the web forum for these types of discussions too, so everyone can benefit.<br />https://groups.google.com/forum/#!forum/drools-development<br /><br />But keep the discussions technical.Mark Proctorhttps://www.blogger.com/profile/03304277188725220501noreply@blogger.comtag:blogger.com,1999:blog-5869426.post-71864595055408253832014-09-25T23:34:16.864+01:002014-09-25T23:34:16.864+01:00Thanks Mark for your reply. I know this is not the...Thanks Mark for your reply. I know this is not the place; I'm sorry for the inconvenience.<br /><br />I'm happy to read that you are focusing on both portabily and reducing the weight of the war... And I would not be worried again about the support of Weblogic!<br /><br />We need to prove the hot replacement of the behaviour for our product (the common understanding of a "dynamic" business logic cf. JSR94). It was easy to achieve this goal with Guvnor. This was much more difficult with Wb. <br />We had to implement the Agent of Guvnor (my good old friend) ourselves quick and dirty on 6.01; now we need to converge to your solution featured for 6.2.<br />We tried to download 6.2Beta, with the promise of having a real suppport of rules hot replace<br />But We noticed that 6.2 has a special release of Wildfly / and it was not easy to find ! And this is the reason of my worries.<br /><br />We know that we ran too fast towards 6.0 because of the promise of having a better support of versioning (Maven). Binaries Packages were not a good solution on Guvnor, though it works perfectly well, simple to understand. <br />(4) We are still running on 6.01, because 6.1 is worse. Currently, we are still not able to maketransitive dependencies working (?!) this is a blocking bug on 6.01 / and as I said, 6.1 is even worse (!)<br />The result is that we need to duplicate/merge within a single jar our dependencies for the need of the WB! This is a painful workaround...<br />Finally, we observe that before 6.2, we are not able to converge to the basic concepts of 'hot replacement' provided by Guvnor out of the box. And that 6.2 is not easy to find/run and worse : to migrate our repository from 6.01 to 6.2<br /><br />I understand that the product has a lot of feature requests; maybe I could help pointing on the basic features that my boss is waiting for :)<br />Feature #1 : <br />Extracting a Decision Table as an Excel SpreadSheet <br />and/or basically printing (!) the rules (even the basic Guvnor print PDF has disapeared).<br />Feature#2<br />one-click GIT repository dump (export knowlesge base) "à la MySQL"<br />++ retrocompatibility : GIT repository/knowledge base dump of Drools WB v6.x should run on WB6.x+1<br />Feature #3<br />Promoting function as global / just as Guvnor did support it/ or an other scope (set of packages?)<br />We *NEED* functions AND global functions because we are based on a model with a complex object grape with hashmap and collections; we have to check every null on any nodes in any rules... Otherwise, the application crashes with a nullpointer... Sometimes, we have to check the type, etc... The workaround for now is a plain old static java Helper embeedeed in our jar dependeny, with the downside that the user cannot see/modify the implemenation.<br /><br />Tell me where I could stack those wishes ?!<br /><br />Thank you very much and kind regards<br />Stephen Kayhttps://www.blogger.com/profile/03614574027143707448noreply@blogger.comtag:blogger.com,1999:blog-5869426.post-70170952222769495092014-09-24T22:11:10.592+01:002014-09-24T22:11:10.592+01:00Stephen
Forum is probably a better place for thes...Stephen<br /><br />Forum is probably a better place for these types of Qs.<br />1) We've more than doubled the features of workbench. 5.x was very limited and had a lot of problems with adapting to more enterprise use cases.<br />2) "skinny wars" have been set as a priority for the project, and JBoss as a whole. This ensures our artefacts are more minimal and use the dependencies provided by EAP. This gives a faster install and restart time and also ensures we don't have class path conflict issues when users use different JBoss technologies in an integrated way.<br /><br />But I do agree that it would be nice to still have a "fat war" too, if we can find some time I'll see if we can do this.<br /><br />3) 6.0 did have a lot of bugs, it was a huge update. The maven transitive dependencies is fixed. 6.1 fixes a lot of bugs and 6.2 will fix more. Things will stabilise given time, as the product matures.<br /><br />4) You pay for what you need. A simple runtime install needs no more dependencies than 5.x did. You can put all your jars on the class path, or lookup manually via http or file. However if you want a dynamic module system with automatic updates from an external maven repository, with all transitive dependencies handled for you - well then you need embedded Maven. But I stress you pay for what you use.<br /><br />To ease the start time we wrote 10 or so examples that cover most of the build, deploy and utilisation architectures. Each dealing with an increasingly more complex use case. These documents are available in GIT and fully documented. These exemples can be used as a copy/paste getting started template - I believe more recently someone started to add Maven archetypes to help. The best thing you can do to help is let us know which use cases are not covered by the examples, and help us add them. Then if we can be sure we have full coverage for expected end user cases, with documentation, we should be address this "getting started" issue.<br />http://docs.jboss.org/drools/release/6.1.0.Final/drools-docs/html/KIEChapter.html#KIEExamplesSection<br /><br />There is no coupling of AS security. Our stuff runs on Websphere and more recently Weblogic.<br /><br />As mentioned 6.0 was a first release after a huge update. We will continue to improve and stabilise the product, as it matures.Mark Proctorhttps://www.blogger.com/profile/03304277188725220501noreply@blogger.comtag:blogger.com,1999:blog-5869426.post-1174764006261715362014-09-24T21:31:23.482+01:002014-09-24T21:31:23.482+01:00Hi Mark,
Just a few lines to write about our conce...Hi Mark,<br />Just a few lines to write about our concern about Drools WB.<br />1) Size of Drools WB is the dobbled of Guvnor (now >160MB!!!).<br />2) Different artifacts for diffeerent AS version // Guvnor was portable (!) to any AS<br />3) Seem that a lot a bugs are still bloking issue (e.g. Maven does not support transitive dependencies on WB6.0.1, and other bugs encountered on 6.1)<br />4) Even on the Drools client, we need to import a ton of unsueful libs/jar (Maven/Maven dependencies) that is very risky for any application (classloading runtime errors hazard)<br />The result.<br />I did a POC just me alone with guvnor / drools 5.5 within less than a month.<br />Now we are trying to do exactly the same with Drools >6 / Drools WB, <br />2 Poeple full time did not reach the same result after more than a month full-time.<br />And there are still bugs encountered (confusion with the release rules.jar / snaphot , transitive dependencies, etc).<br /><br />I'm very very concerned about the projet.<br />Especially with the explosion of complexity / war needin EJBs, coupling with security AS implementation, etc, etc.<br />Would we see finally the goal a 'usable' release with Drools WB 6.2. (final)? <br />Are you going to reduce the size of the artifact?<br /><br />Thank you for your reply and best regards !<br />S.K.Stephen Kayhttps://www.blogger.com/profile/03614574027143707448noreply@blogger.com