Re: [rules-users] How to call Drools as a remote rules executor
by milen igrachev
Hello again,
I am sorry that i duplicated the question!.
I have one last question and I will close my questions both in stackoverflow and here.
Is my understanging correct? I have two options:
1. To have my business logic classes in my java Drools project.
2. Find a way to generate these classes in my java Drools project.
But in any case available I do need the java classes to create and feed facts to the Drools? There is no way to feed Drools with any type of structured data that defines the fact without creating the instance? (It will be my responsibility to find the way of generation.)
Once again Big thanks for your time, and sorry for the duplication of the question!
Regards,
Milen
PS: About the language that I am using its really uncommon one, I seriously doubt that the name will help you. Offcourse here it is - GraphTalk.
From: Wolfgang Laun wolfgang.laun(a)gmail.com
About: Re: [rules-users] How to call Drools as a remote rules executor
To: Rules Users List
sent at: Monday, 2013, December 9 13:27:22 CET
I've provided one possible approach on stackoverflow.
[Not knowing what "non-Java" is doesn't help.]
-W
On 09/12/2013, milen igrachev igrachev(a)abv.bg > wrote:
> Hello ,
> What I want to do is use java and Drools for its nice rule engine
> capabilities. Currently I am not using java for my project. I have some
> implementation business classes and implemented logics that works fine for
> me, but I want to externalize the rules in BRMS. I gave Drools a try and I
> like it a lot. However I encounter one obsticle that I want to ask if I can
> skip. I read most of the Drools documentation and across the net in all the
> examples that are given we actually need the implementation business classes
> in order to instantiate facts that we want to feed to the Drools
> KieSession . Well what I want is not to duplicate my class model in both my
> (non java) project and my java Drools project. All I want to keep in my
> Drools project is the Rules themselves. So is that possible, or I will need
> to duplicate the models? If anyone knows where I can read some info on that
> topic links are appriciated! Technical details: I am using Drools 6.0.0 in
> Eclipse Juno. Big thanks for the support! Best Regards!
> Milen
_______________________________________________
rules-users mailing list
rules-users(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users
10 years, 11 months
Problem with time sliding windows and pseudo clock in Drools Fusion 5.5.0
by martinzp
Hi, i am new in the forum, and a beginner user of Drools so forgive me if my
question isn't quite good.
I want to test the "over window:time" operand.
In order to do that i use the pseudo clock, but i have noticed that it
doesn't behave as i would expect.
The behaviour i think i observed, is that the rule is using the real clock
instead of the pseudo clock.
*Here is my drl file:*
rule "Fire Detected"
when
c : Number(intValue >= 3) from accumulate (
$tr : TemperatureRead(read > 40)
over window:time ( 1s )
from entry-point entryone ,
count ($tr)
)
then
System.out.println("Fire Detected!");
end
*and here is the portion of my main file that inserts the events:*
TemperatureRead temp1 = new TemperatureRead(33.2);
TemperatureRead temp2 = new TemperatureRead(38.7);
TemperatureRead temp3 = new TemperatureRead(39.5);
TemperatureRead temp4 = new TemperatureRead(42.5);
TemperatureRead temp5 = new TemperatureRead(43.1);
TemperatureRead temp6 = new TemperatureRead(47.8);
SessionPseudoClock clock = ksession.getSessionClock();
entryPoint1.insert(temp1);
clock.advanceTime((new Date()).getTime(), TimeUnit.MILLISECONDS);
fireRules();
entryPoint1.insert(temp2);
clock.advanceTime(1, TimeUnit.SECONDS);
fireRules();
entryPoint1.insert(temp3);
clock.advanceTime(1, TimeUnit.SECONDS);
fireRules();
entryPoint1.insert(temp4);
clock.advanceTime(1, TimeUnit.SECONDS);
fireRules();
entryPoint1.insert(temp5);
clock.advanceTime(1, TimeUnit.SECONDS);
fireRules();
entryPoint1.insert(temp6);
fireRules();
In my opinion, the rule shouldn't be fired, because as i am (supposedly)
using the pseudo clock, the events shouldn't fall into the same sliding
window (1 second.)
In general, the rule should fire when it detects 3 or more temperature reads
with a temperature over 40.
Any idea about what i might be doing wrong?
Thanks in advance!
--
View this message in context: http://drools.46999.n3.nabble.com/Problem-with-time-sliding-windows-and-p...
Sent from the Drools: User forum mailing list archive at Nabble.com.
10 years, 11 months
How to call Drools as a remote rules executor
by milen igrachev
Hello ,
What I want to do is use java and Drools for its nice rule engine capabilities. Currently I am not using java for my project. I have some implementation business classes and implemented logics that works fine for me, but I want to externalize the rules in BRMS. I gave Drools a try and I like it a lot. However I encounter one obsticle that I want to ask if I can skip. I read most of the Drools documentation and across the net in all the examples that are given we actually need the implementation business classes in order to instantiate facts that we want to feed to the Drools
KieSession . Well what I want is not to duplicate my class model in both my (non java) project and my java Drools project. All I want to keep in my Drools project is the Rules themselves. So is that possible, or I will need to duplicate the models? If anyone knows where I can read some info on that topic links are appriciated! Technical details: I am using Drools 6.0.0 in Eclipse Juno. Big thanks for the support! Best Regards!
Milen
10 years, 11 months
Semantic of rules with not and coincide
by IK81
Dear all,
I am currently stuck with a problem concerning the use of not and
conincide. I want to analyze a stream of error code events from a set of
devices and detect the following situations. Every event has a timestamp
(long), a device id (String) and an error code (String).
What I want to detect is the following
- If I get two events, one with code C1 and one with C2 from a single
device within 1 minute, it represents a special event combination. The
order of their appearence is not relevant.
- If I just get C1 (without the C2 within the time frame), just report
C1
- If I just get C2 (without the C1 within the time frame), just report
C2
I can successfully detect the special event combination with the
following rule
rule "Detect combination"
when
$e1 : Event ($d: device, code == "C1")
$e2 : Event (device == $d, code == "C2", this coincides [1m] $e1)
then
... do some output
end
Then I tried to implement the detection of C1 only as follows
rule "Detect code C1"
when
$e1 : Event ($d: device, code == "C1")
not ( $e2 : Event (device == $d, code == "C2", this coincides [1m]
$e1))
then
... do some other output
end
My understanding of the rule is that it should fire, if I get the event
with code C1 and there is no other event with error code C2 for the same
device that happens within one minute before and after the C1 event. To
my surprise, the rule fires immediately when I insert an event with
error code C1. Shouldn't the implementation wait at least 1 minute to be
sure that no C2 error event will be inserted?
BTW this is how I insert the events in my test case:
clock.advanceTime(70, TimeUnit.SECONDS);
FactHandle handle1 = ksession.insert( new Event(65000, "A", "C1") );
ksession.fireAllRules();
clock.advanceTime( 10, TimeUnit.SECONDS );
FactHandle handle2 = ksession.insert( new Event(75000, "A", "C2") );
ksession.fireAllRules();
clock.advanceTime( 2, TimeUnit.SECONDS );
And this is mainly the output I get:
detected code C1 @ 70000
event id=44b895e5-7287-404b-8204-3de5690b2360 timestamp=65000
device=A code=C1
detected combination @ 80000
event id=44b895e5-7287-404b-8204-3de5690b2360 timestamp=65000
device=A code=C1
event id=fc89715b-fc30-4b12-ab31-a3884dcd4886 timestamp=75000
device=A code=C2
Any ideas concerning an alternative solution are highly welcomed.
Thanks,
Ingo
10 years, 11 months
Need Help with Enumerations and Classpath
by SrjTx
I am trying to create a enumeration that uses a class to populate it, per
*16.10. Data enumerations (drop down list configurations)*.
I have added the jar that contains my class to the drools repository and
added it as a dependency to the project.
When building a guided rule, that object can be selected and the editor will
add
import dbAccessProto.ListAccess;
But, if I create an enumeration in the gui with Fact="a", field="b", and
context = "(new dbAccessProto.ListAccess()).getListOfLists()"
I get the error below.
Is there some other place I need to put the jar flle or specify it?
[Error: unable to resolve class: dbAccessProto.ListAccess from [Module
"deployment.guvnor.war:main" from Service Module Loader]] [Near : {... [
'a.b' : (new dbAccessProto.ListAccess()).ge ....}] ^ [Line: 1, Column: 16]
source:
1. | 'a.b' : (new dbAccessProto.ListAccess()).getListOfLists()
--
View this message in context: http://drools.46999.n3.nabble.com/Need-Help-with-Enumerations-and-Classpa...
Sent from the Drools: User forum mailing list archive at Nabble.com.
10 years, 11 months
Time and Date Picker in Guvnor 5.5.0.Final Decision Table
by nkhogen
Hi,
I am trying to achieve time selection in the web guided decision table of
Guvnor 5.5.0.Final. The preferences.properties files has been updated to
have drools.dateformat=dd-MMM-yyyy hh:mm:ss . When the cell (of
java.util.Date type) in the DT is clicked, the calendar pops up but it has
only days, years and months. When a day is selected, the cell value shows
time of 06-Dec-2013 12:00 and it is not editable. It does not make sense to
show the time when the time cannot be modified at all.
Is there a way to include time as well in the date picker?
org.drools.guvnor.client.common.DatePickerPopUp.java has logic to show time
but somehow it is not used in decision table.
Thanks.
--
View this message in context: http://drools.46999.n3.nabble.com/Time-and-Date-Picker-in-Guvnor-5-5-0-Fi...
Sent from the Drools: User forum mailing list archive at Nabble.com.
10 years, 11 months
6.0.0: Is this the right way to access DB on LHS?
by SrjTx
Before I go down the path of fleshing the rest of this out, I want to know if
this is the right approach.
I have a database with LOTS of data entries. I have a bean that provides
access to that data (ListAccess). It has a method "iHaveOne" that returns
true if the argument is contained in the list.
Is the following how one should go about this?
Other/better ways?
package blah;
import dba.ListAccess; // bean which access database
import goodstuff.Thing; // fact in drools
rule "qqq"
when
$thing:Thing()
$listAccess:ListAccess()
eval( $listAccess.iHaveOne($thing.id) )
then
do stuff
end
--
View this message in context: http://drools.46999.n3.nabble.com/6-0-0-Is-this-the-right-way-to-access-D...
Sent from the Drools: User forum mailing list archive at Nabble.com.
10 years, 11 months
KieContainer kContainer = ks.newKieContaine ....
by Ravi Gupta
Have a question using drools 6 - I am following the example:
Repo looks fine, rules and artifact in:
.m2/repository/org/acme/brms/acmepoc/1.0
code seems straightforward:
// Install example1 in the local maven repo before to do this
KieContainer kContainer =
ks.newKieContainer(ks.newReleaseId("org.acme.brms", "acmepoc", "1.0"));
but get:
Exception in thread "main" java.lang.RuntimeException: Cannot find
KieModule: org.acme.brms:acmepoc:1.0
at org.drools.compiler.kie.
builder.impl.KieServicesImpl.newKieContainer(KieServicesImpl.java:86)
at
com.sample.KieContainerFromKieRepoExample.go(KieContainerFromKieRepoExample.java:15)
at
com.sample.KieContainerFromKieRepoExample.main(KieContainerFromKieRepoExample.java:26)
10 years, 11 months