Function calls in decision table
by San
Hi
I am trying to cal a local function getMaturityAge() in the decision table
condition column like
RuleTable MaturityAge Validation
CONDITION
ACTION
pp:PremiumCalculatorFormBean
getMaturityAge() > "$1"
System.out.println("invalid maturity age");
Premium Payment Term Print out
message?
70 X
The method is defined localy using functions key word.
And moreover whenever I trying to pass pp as the argument to my functions,
its not able to find pp. I am getting cud not parse knowledge error.
can anyone pz help me out.
--
View this message in context: http://drools.46999.n3.nabble.com/Function-calls-in-decision-table-tp3919...
Sent from the Drools: User forum mailing list archive at Nabble.com.
12 years, 5 months
Help
by Olfa h
HI,
My master thesis is to develop a model interface that allows the
doctor to pose
the question for the patient. it consists of an interface and a database
format connaissace ontology. this application must guide the doctor.
The purpose of the ontology is to implement the interface model that
contains a text box to enter the question and a text box to type the answer
and then clicking a button data are displayed which are imported for the
ontology weight the answer and then if the readings are not in good clicks
a button to display other data but not displayed the first time and if the
election is made on a data. By clicking a button to display the data that
are connected to select data and then validate the choice.
Please can you guide me to make this work?
can you give to me a detailed description and the simplest methods to
follow and i inform you about all the information concerned my
environment to lead a good results because i'm a beginner in this domain ?
If there is any point on the ontology create or something missing you
can tell me because this is the first that I work with ontologies.
so I just need to realized this little application to validate the model
interface and the ontology and I like that you guide me.
Attached is the interface model and the ontology.
I await your advise and your help.
Thank you very much.
12 years, 5 months
Inserting facts using declared types from XML
by Francois Rouaix
Folks,
I'm trying to use Drools in a mostly Java-less environment (rules are
written in .drl files, facts will be inserted from XML files). I'm running
into an issue where the XStream unmarshaller is unable to convert my XML to
a BatchExecutionCommand because it cannot find the class for a type
declared in the .drl file.
Is there any configuration required to make sure the XStream marshaller
knows about the dynamically generated classes from the .drl?
I'd appreciated any clues. I cannot add POJO classes for my types due to
the nature of the app.
Thanks.
DRL file
-----------
package com.example
declare Answers
....
end
/* some rules after this */
...
XML file
-----------
<batch-execution>
<insert>
<com.example.Answers>
....
Runner code
public static void Run(String xmlFactsFile, String drlFilename)
{
// Compile the drl file
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add( ResourceFactory.newFileResource(drlFilename),
ResourceType.DRL );
if ( kbuilder.hasErrors() ) {
System.err.println( kbuilder.getErrors().toString() );
throw new RuntimeException("Cannot compile \"" + drlFilename + "\"");
}
// kbase setup from the compiled rules
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
File facts = new File(xmlFactsFile);
BatchExecutionCommand command = (BatchExecutionCommand)
BatchExecutionHelper.newXStreamMarshaller().fromXML(facts);
ExecutionResults bresults = ksession.execute(command);
System.out.println(BatchExecutionHelper.newXStreamMarshaller().toXML(bresults));
}
}
Error at runtime
----------------------
Exception in thread "main"
com.thoughtworks.xstream.converters.ConversionException:
com.example.Answers : com.example.Answers
---- Debugging information ----
message : com.example.Answers
cause-exception :
com.thoughtworks.xstream.mapper.CannotResolveClassException
cause-message : com.example.Answers
class : org.drools.command.runtime.rule.InsertObjectCommand
required-type : org.drools.command.runtime.rule.InsertObjectCommand
converter-type :
org.drools.runtime.help.impl.XStreamXML$InsertConverter
path : /batch-execution/insert/com.example.Answers
line number : 3
class[1] : org.drools.command.runtime.BatchExecutionCommandImpl
converter-type[1] :
com.thoughtworks.xstream.converters.reflection.ReflectionConverter
version : null
-------------------------------
at
com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:79)
at
com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65)
at
com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)
at
com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:50)
at
com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doUnmarshal(AbstractReflectionConverter.java:318)
at
com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:230)
at
com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)
at
com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65)
at
com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)
at
com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:50)
at
com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller.java:134)
at
com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.unmarshal(AbstractTreeMarshallingStrategy.java:32)
at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1035)
at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1019)
at com.thoughtworks.xstream.XStream.fromXML(XStream.java:930)
at
com.intentsoft.RulesEngine.RulesExecution.Run(RulesExecution.java:34)
at com.intentsoft.RulesEngine.Main.main(Main.java:10)
Caused by: com.thoughtworks.xstream.mapper.CannotResolveClassException:
com.example.Answers
at
com.thoughtworks.xstream.mapper.DefaultMapper.realClass(DefaultMapper.java:56)
at
com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)
at
com.thoughtworks.xstream.mapper.DynamicProxyMapper.realClass(DynamicProxyMapper.java:55)
at
com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)
at
com.thoughtworks.xstream.mapper.PackageAliasingMapper.realClass(PackageAliasingMapper.java:88)
at
com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)
at
com.thoughtworks.xstream.mapper.ClassAliasingMapper.realClass(ClassAliasingMapper.java:79)
at
com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)
at
com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)
at
com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)
at
com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)
at
com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)
at
com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)
at
com.thoughtworks.xstream.mapper.ArrayMapper.realClass(ArrayMapper.java:74)
at
com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)
at
com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)
at
com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)
at
com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)
at
com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)
at
com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)
at
com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)
at
com.thoughtworks.xstream.mapper.CachingMapper.realClass(CachingMapper.java:45)
at
com.thoughtworks.xstream.core.util.HierarchicalStreams.readClassType(HierarchicalStreams.java:29)
at
com.thoughtworks.xstream.converters.collections.AbstractCollectionConverter.readItem(AbstractCollectionConverter.java:70)
at
org.drools.runtime.help.impl.XStreamXML$InsertConverter.unmarshal(XStreamXML.java:135)
at
com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)
... 16 more
12 years, 6 months
Integrating Drools with rules from a legacy BRMS
by bdolbeare
I am working on integrating Drools with a legacy BRMS that was developed
in-house. The customers like the BRMS and are unwilling to migrate to
another tool such as Guvnor. The BRMS creates the rules in a proprietary
XML format. In order to integrate Drools with the BRMS, I need to convert
these rules to a format that Drools understands and that leaves me with what
seems like 3 options:
1) Write some XSLT to transform the proprietary XML to Drools XML format.
This seems straightforward; however, I am concerned that the online
documentation states that the Drools XML format should be considered
deprecated. I'd hate to invest much time in this approach if the XML support
is going to disappear in a future release.
2) Write my own parser that can convert the proprietary XML to classes in
the org.lang.descr package. I'm not sure if the Drools developers intend for
others to use these classes directly. For instance, if they change
frequently, this approach may be difficult to maintain.
3) Write my own parser that can convert the proprietary XML to DRL. This
approach seems unfortunate in that the rules would be parsed twice; first to
convert them to DRL and then internally by the Drools DrlParser. Also, this
doesn't seem to offer any benefit over approach 2 (except that I know DRL
well and wouldn't have to learn how the org.lang.descr classes work [not
much documentation in those classes]).
Right now, I'm leaning towards approach 2. Any thoughts or suggestions
would be appreciated.
--
View this message in context: http://drools.46999.n3.nabble.com/Integrating-Drools-with-rules-from-a-le...
Sent from the Drools: User forum mailing list archive at Nabble.com.
12 years, 6 months
Possibly race condition in a persisted Drools + JBPM during a StatefulKnowledgeSession
by Alberto R. Galdo
Hi all,
We've been for long time now developing a complex event processing
system that ( simplified version ahead !! ) involves a set of rules that in
turn activates a set processes that fulfill human tasks and other kind of
tasks.. This all is running in a StatefulKnowledgeSession with JPA
persistence configured both for Drools and JBPM. We are running an stack of
Drools, JBPM, Drools Integration, Drools fussion, etc..
We've been able to persist Drools sessions & JBPM processes in the same
Persistence Context ( not without pain :( ) using different JTA
implementations including ( but not limited to ) Bitronix & Atomikos.
What we are observing here is what seems to be some kind of race
condition between Drools and JBPM when running the knowledge session when
JPA&JTA persistence is configured. Very often, as soon as after 2-3
processes get created as rule's consequences are fired in response of
events inside the session we see how JBPM finds its instance nullified by
Drools when it tries to end a process and persist it.
We've been able to find where Drools decides to delete an instance of
the process ... at a given time Drools executes
JPAProcessInstanceManager.clearProcessInstances() [1] when it finalizes a
SingleSessionCommand wich in turn calls disconnect() for *all* the
local-stored processinstances ( wich gets populated with instances of
processes every time a process is started in the knowledge session ):
public void clearProcessInstances() {
for (ProcessInstance processInstance: new
ArrayList<ProcessInstance>(processInstances.values())) {
((ProcessInstanceImpl) processInstance).disconnect();
}
}
So, Drools decides to disconnect all process instances in it's JPA
context without taking in account the state the process is in, and when an
processinstance that is not stopped gets removed then JBPM finds it's
NullPointerException...
We've modified the code to make Drools aware of the state of the
process before wiping it from the context ( no problem here, there will
be no leak as a running processinstance will be removed in future calls of
"clearProcessInstances" given the process is closed ). But unfortunatelly
this seems to resolve this problem, but lots of other problems ( wich seems
also race conditions arise : for instance: Drools closes connections to
the database and JBPM finds the connection closed,
So, we are really worried about using Drools & JBPM in a persisted
environment. Maybe our asumptions are wrong... Is it possible to have an
scenario like ours given the current Drools & JBPM integration status for a
persistent statefulKnowledge Session? Did anyone build a complex event
processing system like ours in a unaltered persistence environment such as
provided in Drools and JBPM by default?
Greets,
[1]
https://github.com/droolsjbpm/jbpm/blob/master/jbpm-persistence-jpa/src/m...
Alberto R. Galdo
argaldo(a)gmail.co <argaldo(a)gmail.com>
12 years, 6 months
Lots of org.drools.common.ScheduledAgendaItem instances in memory
by Werner Stoop
Hi,
We're using Drools with a StatefulKnowledgeSession to process events coming
from equipment in our network. The system draws conclusions about the state
of the equipment and writes those conclusions to a table in our
database. All our rules work as we expected and the system produces the
correct results.
However, the memory usage of the JVM steadily goes up when the system runs
for extended periods of time until we start getting OutOfMemoryExceptions
and the server has to be restarted. This is in spite of the fact that the
fact count reported by
the StatefulKnowledgeSession.getFactCount() stays reasonably stable,
with around 30 000 facts (give or take) at any point in time.
I have run the Eclipse Memory Analyzer tool (http://www.eclipse.org/mat/)
against heap dumps from the JVM several times now, and every time it
reports more and more instances
of org.drools.common.ScheduledAgendaItem referenced from one instance of
java.lang.Object[]
To be concrete, since this morning the uptime is more than 112 hours in
total, during which the system has processed little over 2 000 000 events
from the network. It has 29 000 facts in the knowledge session, yet in the
heap dump we see 829 632 instances of org.drools.common.ScheduledAgendaItem.
What is the ScheduledAgendaItem for? Is there something wrong with my rules
that causes this many instances to be held? Is there something I should do
to release these instances or the Object[] holding on to them?
Thanks,
Werner Stoop
12 years, 6 months
how to use only updated value in drools
by learner
I am having a drl file with 2 rules
The 1st rule updates a attribute, say updates attribute b to 10 based on
some condition.
The 2nd rule has a check for values with b not equal to 10. It logs error
for those values not equals to 10.
The b value gets updated to 10 in rule 1. However in the second rule it does
not use updated value and logs error.
Is there a way to use the updated b value in the 2nd rule. I tried using
modify but still the error gets logged.
--
View this message in context: http://drools.46999.n3.nabble.com/how-to-use-only-updated-value-in-drools...
Sent from the Drools: User forum mailing list archive at Nabble.com.
12 years, 6 months
Re: [rules-users] NoClassDefFoundError: org/drools/lang/DRLLexer
by bharadwaj2012
kbuilder.add(
ResourceFactory.newClassPathResource("COBValidation.drl"),
ResourceType.DRL);
and have follwing dependenies
<dependency>
<groupId>org.jbpm</groupId>
<artifactId>jbpm-flow</artifactId>
<version>${jbpm-flow.version}</version>
</dependency>
<dependency>
<groupId>org.drools</groupId>
<artifactId>knowledge-api</artifactId>
<version>${knowledge-api.version}</version>
</dependency>
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-core</artifactId>
<version>${drools-core.version}</version>
</dependency>
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-compiler</artifactId>
<version>${drools-compiler.version}</version>
</dependency>
<dependency>
<groupId>org.antlr</groupId>
<artifactId>antlr-runtime</artifactId>
<version>${antlr-runtime.version}</version>
</dependency>
<dependency>
<groupId>org.mvel</groupId>
<artifactId>mvel2</artifactId>
<version>${mvel2.version}</version>
</dependency>
--
View this message in context: http://drools.46999.n3.nabble.com/NoClassDefFoundError-org-drools-lang-DR...
Sent from the Drools: User forum mailing list archive at Nabble.com.
12 years, 6 months
Drools Fusion: expiration
by Matteo Cusmai
Hi all,
i have noticed a strange behavior, but i am not sure that i depend on
drools or depend by my bad knowledge of it.
I am using drools fusion and i have a lot of classes with role event. I
have put them the expiration value to 5 minutes.
>From my understanding, if i use explicit expiration, as i do, when it pass
5 minutes and that event is out of scope of all my rules, that event is
deleted.
But, i noticed that the last event hasn't retracted after 5 minutes and
this behavior makes the system no stable, because it works differently
after some minutes.
If i don't use explicit expiration, the system seems to work fine, so i am
however happy, but i would like to understand the issue.
Thanks a lot,
Matteo.
12 years, 6 months