activationCancelled() not being executed?
by Fermion
Hi!
I'm using a JTable to display rules that have been activated.
My goal is to have the table display a set of activations ordered by their
salience. The user should then choose which one of them to fire (if you want
to know why, be invited to read the background).
Of course this makes only sense as long as the activations are valid. Rules
whose activation has been cancelled should still be displayed, but in a
different style (like greyed out).
In order to accomplish this, I want to use an implementation of the
AgendaEventListener-interface, implementing the
activationCancelled()-method.
The Listener itself works, as I use the activationCreated()-method to add
the rule as a row to my table (which works fine).
Unfortunately the activationCancelled()-method doesn't seem to be executed
at all!
I assume that I have a fundamental misunderstanding of what should trigger
an activationCancelled() event?
Background: (just if you're curious...)
I'm working as a PhD student in physics at the CERN international
high-energy physics laboratory, for the ATLAS experiment.
As a member of the Detector Control System (DCS) group, I'm going to write
an expert system in order to assist the shift crew with the detector
operation.
The operation of the detector is a difficult task, because more than 70000
parameters (like voltages, currents and temperatures) have to be controlled.
A Finite State Machine (FSM) computes a defined and limited number of states
from the given parameters (like ON, OFF, STANDBY,...).
I'm going to synchronize the expert system application to ERROR states of
the FSM, in order to extract the relevant parameters from the system (as it
would be impossible to feed all parameters into the XPS all the time).
This is handled by quite some control rules that decide which data has to be
requested, released and so on.
Once all necessary data has been received, this might lead to activations of
the (more interesting) user rules.
Those rules have an explanatory character like "The temperature of this XYZ
is too high, so please try ABC."
For a given set of facts I assume more then one rule to be activated. Whilst
the rule engine should take care of the execution (firing) of all control
related rules, the execution of the user rules should be under direct user
control.
Displaying all activations in a GUI will allow the user to pick one (try it)
and rate it (the proposed solution solved the problem "yes/no"). Changing
the rules salience according to the answer, will allow the system to
dynamically reflect the current system status. (Rules that are related to
broken connections / wrongly connected cables are likely to be found at the
beginning of the experiment but hopefully only on rare occasion later on.)
In order to ensure that no information is lost during the absence of DCS
experts (which will not always be around), a log file should be written for
each major FSM-ERROR. At the moment the WorkingMemoryFileLogger seems to be
predestined for this job. This way I hope to collect large amounts of ERROR
data during the initial phase of the experiment that helps to extract rules
for numerous error conditions.
This will become especially handy, as such errors have a tendency to come
back, even if the original detector experts are gone for years...
--
View this message in context: http://www.nabble.com/activationCancelled%28%29-not-being-executed--tf434...
Sent from the drools - user mailing list archive at Nabble.com.
16 years, 2 months
Drools 4.0.4 and Jboss 4.2.2 GA
by Ojwang Wilson O
All,
I am having the following error when deploying drools 4.0.4 within JBOSS
4.2.2 GA. Please help.
====================
01:06,259 INFO [STDOUT] ERROR 17-03 17:01:06,248
(Contexts.java:flushAndDestroyContexts:335) could not discover
transaction status
17:01:06,318 INFO [STDOUT] ERROR 17-03 17:01:06,316
(Contexts.java:flushAndDestroyContexts:335) could not discover
transaction status
17:01:06,348 INFO [STDOUT] ERROR 17-03 17:01:06,347
(Contexts.java:flushAndDestroyContexts:335) could not discover
transaction status
17:01:06,477 INFO [STDOUT] ERROR 17-03 17:01:06,476
(Contexts.java:flushAndDestroyContexts:335) could not discover
transaction status
17:01:06,506 INFO [STDOUT] ERROR 17-03 17:01:06,506
(Contexts.java:flushAndDestroyContexts:335) could not discover
transaction status
17:01:06,523 INFO [STDOUT] ERROR 17-03 17:01:06,522
(Contexts.java:flushAndDestroyContexts:335) could not discover
transaction status
17:01:06,649 INFO [STDOUT] ERROR 17-03 17:01:06,648
(Contexts.java:flushAndDestroyContexts:335) could not discover
transaction status
17:01:06,660 INFO [STDOUT] ERROR 17-03 17:01:06,659
(Contexts.java:flushAndDestroyContexts:335) could not discover
transaction status
17:01:06,935 INFO [STDOUT] ERROR 17-03 17:01:06,934
(Contexts.java:flushAndDestroyContexts:335) could not discover
transaction status
17:01:08,065 INFO [STDOUT] ERROR 17-03 17:01:08,064
(Contexts.java:flushAndDestroyContexts:335) could not discover
transaction status
17:01:08,243 INFO [STDOUT] ERROR 17-03 17:01:08,242
(Contexts.java:flushAndDestroyContexts:335) could not discover
transaction status
17:01:08,994 INFO [STDOUT] ERROR 17-03 17:01:08,993
(Contexts.java:flushAndDestroyContexts:335) could not discover
transaction status
17:19:33,956 INFO [STDOUT] ERROR 17-03 17:19:33,956
(Contexts.java:flushAndDestroyContexts:335) could not discover
transaction status
17:19:33,988 INFO [STDOUT] ERROR 17-03 17:19:33,987
(Contexts.java:flushAndDestroyContexts:335) could not discover
transaction status
17:19:34,039 INFO [STDOUT] INFO 17-03 17:19:34,038
(SecurityServiceImpl.java:login:45) Logging in user [wojwang]
17:19:34,048 INFO [STDOUT] INFO 17-03 17:19:34,047
(DefaultAuthenticator.java:authenticate:38) User logged in via
default authentication module (no security check).
17:19:34,068 INFO [STDOUT] ERROR 17-03 17:19:34,067
(Contexts.java:flushAndDestroyContexts:335) could not discover
transaction status
17:24:34,104 INFO [STDOUT] ERROR 17-03 17:24:34,102
(Contexts.java:flushAndDestroyContexts:335) could not discover
transaction status
===================
Regards
Wilson
16 years, 5 months
RE: Rules with Lookup Tables...
by Rahul Phadnis
Have you looked at
http://labs.jboss.com/portal/jbossrules/subversion.html
I think that page is not uptodate since at the bottom
it says "Trunk is unstable and may often not build. If
you wish to build form Subversion source the latest
tag is:
http://anonsvn.labs.jboss.com/labs/jbossrules/tags/3.0.3-GA/
"
Are n't we at 3.0.5 already?
-Rahul
--- jjdepaul(a)us.ibm.com wrote:
> Rahul -
>
> Where can I find Maven2 repository that has the
> nightly builds for Drools project?! I've looked
> around on a couple of well-known ones abut no luck
> finding anything above D3.0.5
>
> thanks,
> james
> >
> > The "from" CE (conditional expression) is not
> > available in the current released jboss rules
> version
> > (3.0.5) and you probably have to use the nightly
> build
> > to use it.
> >
> > -Rahul
> >
> >
>
>
16 years, 5 months
Re:JUnit testing
by J. Michael Dean
>
Thanks. Sorry for few details as this has been a several message
question. I have created a Drools plugin that contains EITHER the
maximum number of jars and dependencies (i.e. ALL), or the minimum
(i.e. those needed for compiler option only processing DRL files), or
adding the entire Drools distribution to my Java extensions folder in
OS X, and in all instances, I get an error loading dialects. The
enigma for me is that all of these plugin options enable me to make a
stand alone RCP application that works fine.
Here is the test unit code:
@BeforeClass
public static void setUp() throws Exception {
Reader source;
PackageBuilderConfiguration pkgConfig = new
PackageBuilderConfiguration();
JavaDialectConfiguration javaDialectConf =
(JavaDialectConfiguration) pkgConfig.getDialectConfiguration("java");
javaDialectConf.setCompiler(JavaDialectConfiguration.ECLIPSE);
final PackageBuilder builder = new PackageBuilder(pkgConfig);
boolean exists = (new File("rules/GlucoseDroolRules00.drl")).exists();
if (exists) {
builder.addPackageFromDrl(new FileReader(
"rules/GlucoseDroolRules00.drl"));
System.out.println("Found the file!");
} else {
System.out.println("Cannot locate the file - will try as resource");
source = new InputStreamReader(AllDroolsRulesTests.class
.getResourceAsStream("rules/GlucoseDroolRules00.drl"));
builder.addPackageFromDrl(source);
}
if (builder.hasErrors()) {
System.out.println(builder.getErrors().toString());
}
Package pkg = builder.getPackage();
ruleBase = RuleBaseFactory.newRuleBase();
ruleBase.addPackage(pkg);
}
It crashes in the line trying to instantiate the package
configuration. If I eliminate the lines that configure the package,
and invoke the package building without an argument (the default),
then the crash occurs in that line. The crash trace:
org.drools.RuntimeDroolsException: Unable to load dialect
'org.drools.rule.builder.dialect.java.JavaDialectConfiguration:java'
at
org
.drools
.compiler
.PackageBuilderConfiguration
.addDialect(PackageBuilderConfiguration.java:152)
at
org
.drools
.compiler
.PackageBuilderConfiguration
.buildDialectConfigurationMap(PackageBuilderConfiguration.java:140)
at
org
.drools
.compiler
.PackageBuilderConfiguration.init(PackageBuilderConfiguration.java:117)
at
org
.drools
.compiler
.PackageBuilderConfiguration.<init>(PackageBuilderConfiguration.java:94)
at
droolsRules.tests.AllDroolsRulesTests.setUp(AllDroolsRulesTests.java:40)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun
.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
39)
at
sun
.reflect
.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:
25)
at java.lang.reflect.Method.invoke(Method.java:585)
at
org
.junit
.internal
.runners.BeforeAndAfterRunner.invokeMethod(BeforeAndAfterRunner.java:74)
at
org
.junit
.internal
.runners.BeforeAndAfterRunner.runBefores(BeforeAndAfterRunner.java:50)
at
org
.junit
.internal
.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:33)
at
org.junit.internal.runners.TestClassRunner.run(TestClassRunner.java:52)
at
org
.eclipse
.jdt
.internal
.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:38)
at
org
.eclipse
.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at
org
.eclipse
.jdt
.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:
460)
at
org
.eclipse
.jdt
.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:
673)
at
org
.eclipse
.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:
386)
at
org
.eclipse
.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:
196)
Caused by: java.lang.NullPointerException
at
org
.drools
.compiler
.PackageBuilderConfiguration
.addDialect(PackageBuilderConfiguration.java:146)
... 18 more
This trace is identical in all instances. I have looked at the source
code and it appears that the Drools code is looking for the drools
configuration file, and I am not sure if this is included in the
classpath when running JUnit. However, the minimal and maximal plugin
configurations make an RCP run perfectly as a standalone application.
This is Eclipse 3.3 fall version, Mac OXX Leopard (but have run on
Tiger and same error, so not a new Apple bug), Drools 4.03, and JUnit 4.
Thanks.
> ------------------------------
>
> Message: 8
> Date: Tue, 4 Dec 2007 06:50:15 -0800 (PST)
> From: "John J. Franey" <jjfraney(a)gmail.com>
> Subject: Re: [rules-users] JUnit testing
> To: rules-users(a)lists.jboss.org
> Message-ID: <14151759.post(a)talk.nabble.com>
> Content-Type: text/plain; charset=us-ascii
>
>
>
>
> J Michael Dean wrote:
>>
>> I am having problems figuring out how to do JUnit 4 unit tests with
>> Drools and am wondering what I am missing.
>>
>
> I'm successfully using junit4 to test rules. I build a rules
> package from
> my rules file, create a stateful session, insert facts, fire all
> rules, run
> queries, and finally, perform junit asserts on the results.
>
> I can't tell you what you are missing, unless you say what you have.
>
> Regards,
> John
>
>
> --
> View this message in context: http://www.nabble.com/JUnit-testing-tf4930259.html#a14151759
> Sent from the drools - user mailing list archive at Nabble.com.
>
>
>
> ------------------------------
>
> _______________________________________________
> rules-users mailing list
> rules-users(a)lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>
> End of rules-users Digest, Vol 13, Issue 6
> ******************************************
16 years, 6 months
Running through Collection using DSL
by Markus Helbig
Hi,
i'd like to do the following in consequence:
for (Iterator it = $collection.iterator(); it.hasNext(); $item = it.next()) {
System.out.println($item);
}
But as always i'd like to use a DSL
[consequence][]For each {item} from {collection}=for (Iterator it =
{collection}.iterator(); it.hasNext(); {item} = it.next()) {
[consequence][]End=}
The Rule:
For each $item from $pli.getItems()
Show $item
End
The DRL Viewer exactly shows what i want to have. But compiling any
rulefile expanding this DSL (also the consequences are not used)
resolve into following errors:
line 68:0 mismatched character '<EOF>' expecting '"'
[0,-1]: unknown:0:-1 mismatched token: [@-1,0:0='<no
text>',<-1>,0:-1]; expecting type END
or
line 131:80 required (...)+ loop did not match anything at character '+'
line 15:74 no viable alternative at character '\'
The reason theems to be
[consequence][]End=}
But why?? Any suggestions, thans very much in advance
Cheers
Markus
16 years, 6 months
Modifying or deleting existing state value in BRMS
by Shahad Ahmed
I've been playing around with the 4.0.x BRMS before the release of 4.0.7. I
noticed that you still cannot delete or modify an existing rule status
created in the Admin/Manage States page of the BRMS and was wondering if
there is a logical reason for this, or is it simply a todo? Not a big deal,
just curious.
Regards,
Shahad
16 years, 7 months
reuse existing functions/imports when adding new rule at runtime
by Sibylle Duerr
how to add a rule at runtime to an existing package without having to
re-add the functions and imports?
at the moment I do it like this:
PackageBuilder builder = new PackageBuilder();
builder.addPackageFromDrl(imports);
builder.addPackageFromDrl(functions);
builder.addPackageFromDrl(newrule, dsl);
// Check the builder for errors
...
ruleBase.addPackage(builder.getPackage());
that works fine but I don't like to re-add all the functions and imports
every time a new rule is added. it should be possible to define new rules
using the existing functions. is there a better way to do this?
I also tried to reuse the PackageBuilder and just add the new rule with
builder.addPackageFromDrl(newrule, dsl);
but this ends up in a NullPointerException:
java.lang.NullPointerException
at org.drools.reteoo.ReteooBuilder.removeRule(ReteooBuilder.java:224)
at org.drools.reteoo.ReteooRuleBase.removeRule(ReteooRuleBase.java:270)
...
best regards
sibylle
___________________________________________________________________________
mymail - der unschlagbare und kostenlose E-Mail-Dienst der Schweiz!
http://mymail.ch/?redirect=9999
Geschenkidee.ch - Geschenke für jeden Anlass!
http://ad.zanox.com/ppc/?8113402C1838543470T
16 years, 7 months
ruleflow trouble when process a large number of records
by Mazrim
Hello,
I'm using drools 4.0.4 on jboss 4.0.5.
I build a ruleflow and a set of rules following the documentation on
official drools site.
The ruleflow consist of about 50 ruleflow-group and 116 rules.
The ruleflow works correctly when processing a little number of records
(100-1000).
Instead if the number of records is around 20000 (they are processed in sets
of 100 record) many rules don't fire; so many records are lost in output.
If I process in sets of 50 records I lose less records than in sets of 100
records. And If I process in sets of 20 records I lose less records than in
sets of 50 records.
Must I tweak the JVM memory or the number of JVM threads? Or does this issue
concern the building of ruleflow (maybe it's bad built)?
Thanks in advance
--
View this message in context: http://www.nabble.com/ruleflow-trouble-when-process-a-large-number-of-rec...
Sent from the drools - user mailing list archive at Nabble.com.
16 years, 7 months
Agenda group doesn't stay set?
by Bagwell, Allen F
I'm writing rules in different agenda groups and witnessing something curious.
Right now when I put my fireAllRules() in a callback that is triggered every couple of seconds I have to do this:
Callback executes on receipt of a heartbeat message:
{
session.setFocus("my_agenda");
session.fireAllRules();
}
What I would prefer to do is this is set my agenda group external to the callback so I have the liberty to simply use the callback to execute rules on whatever agenda I give focus to elsewhere:
Callback executes on receipt of a heartbeat message:
{
session.fireAllRules();
}
But this doesn't work.
My understanding is that unless you explicitly set the agenda-group each time, then fireAllRules() resets your agenda group to "MAIN"?
Is there a way to get the session to retain focus on the agenda group I specify until I see fit to change it?
Allen F. Bagwell
e-mail: afbagwe(a)sandia.gov
phone: 505/284-4517
fax: 505/ 844-7886
There is no monument dedicated to the memory of a committee. -- Lester J. Pourciau
16 years, 7 months
Casting an Object value in the LHS
by rrogers@us.imshealth.com
Suppose I have a "Measurement" class, with a getName() method that
returns a String and with a getValue() method that returns an Object.
Sometimes the Object is a String, sometimes a Integer, sometimes a
Double. I know that a "Foo" Measurement must be an integer, so I could
cast (or otherwise coerce) into a form that can be compared with a
constant integer (or other "Foo" Measurement).
How do I handle this type of value in the LHS of the rule?
when
$m : Measurement(name == "Foo", value < 10)
then
System.out.println("It's less than ten!");
end
I'd also like to be able to test for the Objects type (instanceof). I'm
using java as my dialect, if that makes a difference. For other
reasons I'd like to avoid having to either subclass Measurement or add
type-specific value accessors.
-Russ
16 years, 7 months