large rulebase load time
by Joe White
For a large rulebase (200k+ rules) will the call to
addPackageFromDrl(drlString) run faster if the number of rules is
smaller but the rules include more || statements between predicates?
There is only one type of object ever inserted in working memory and I
have many rules with the same RHS. I can collapse those rules into one
LHS with ors between the predicates in the object, but I would only go
through the effort of optimizing if it would improve load time.
Thanks for your help.
Joe
This message is confidential. It may also be privileged or otherwise
protected by work product immunity or other legal rules. If you have
received it by mistake, please let us know by e-mail reply and delete it
from your system. You may not copy this message or disclose its contents
to anyone. The integrity and security of this message cannot be
guaranteed on the Internet.
15 years, 5 months
Clearing an AgendaGroup
by Evert Penninckx
Hi
I have a rule set with two agenda groups. I have a rule with autofocus on
group1. If the rules in group1 are "exhausted" it activates group2 using
setFocus().
rule "Active second group"
agenda-group "group1"
auto-focus true
salience -1
when
eval(true)
then
drools.setFocus("group2")
end
Now I noticed that while executing rules from group2, rules from group1 were
still being triggerd and executed.
So I added this to the then clause.
drools.getWorkingMemory().getAgenda().clearAndCancelAgendaGroup("group1")
Alas, it made no difference. Some debugging made clear that after the then
clause the stack contained only MAIN and "group2".
Am I missing some basic notion on agenda groups?
Greetz
Evert
--
View this message in context: http://drools-java-rules-engine.46999.n3.nabble.com/Clearing-an-AgendaGro...
Sent from the Drools - User mailing list archive at Nabble.com.
15 years, 5 months
proper syntax for multiple function calls within LHS
by garySFCA844
hello,
I'm a newbie to Drools. I'm trying to write a rule that performs some math,
without resorting to a function or eval. I searched the forum but found lots
of posts on nested function calls,etc but not what I was searching for.
For simplicity, lets assume I have the following classes
public class ONE{
double A
double B
double C
}
public class TWO{
double D
double E
}
where A, B, C, D, E are themselves calculated values (apr, price at some
date, etc)
1. What does the LHS of a rule that compares A > D look like?
2. What does the LHS of a rule that compares A+B > C look like?
3. What does the LHS of a rule that compares A+D > C look like?
I apologize in advance if this was covered already.
Thanks.
--
View this message in context: http://drools-java-rules-engine.46999.n3.nabble.com/proper-syntax-for-mul...
Sent from the Drools - User mailing list archive at Nabble.com.
15 years, 5 months
Guvnor UI bugs?
by jlegelis
I'm running Drools 5.1.1 on JDK 1.6, client is Chrome on XP. I've noticed
quite a few UI bugs in Guvnor, most feel like browser caching issues,
setter/getter issues etc. For example, when creating test scenarios,
changing the values in the 'given' clause then running the scenario results
in the 'old' values being sent. Anybody else notice this or have any
workarounds?
--
View this message in context: http://drools-java-rules-engine.46999.n3.nabble.com/Guvnor-UI-bugs-tp2356...
Sent from the Drools - User mailing list archive at Nabble.com.
15 years, 5 months
Possible bug using from and or
by Evert Penninckx
Hi
This little rule won't compile:
rule "Test from and or"
dialect "mvel"
when
$person : Person()
Address( ) from $person.addresses
(Address() or Address())
then
# do stuff
end
BuildError: Unable to build expression for 'from' : [Error: Failed to
compile: 1 compilation error(s):
- (1,7) unqualified type in strict mode for: $person]
[Near : {... Unknown ....}]
^
[Line: 1, Column: 0] '$person.addresses(Address() or Address())'
BuildError: Unable to determine the used declarations.
java.lang.Class cannot be cast to org.mvel2.util.MethodStub
This does work
rule "Test from and or"
dialect "mvel"
when
$person : Person()
Address( ) from $person.addresses
Address() or Address()
then
# do stuff
end
And this also:
rule "Test from and or"
dialect "mvel"
when
$person : Person()
Address( ) from $person.getAddresses()
(Address() or Address())
then
# do stuff
end
Can anybody confirm this as a bug?
Tnx
Evert
--
View this message in context: http://drools-java-rules-engine.46999.n3.nabble.com/Possible-bug-using-fr...
Sent from the Drools - User mailing list archive at Nabble.com.
15 years, 5 months
Doubt in converting .brl to .drl format in java
by Kamal Thiyagarajan
Hello,
I had try to convert .brl file to .drl format using java code i got an error
in conversion. my java code is
String fileName = "c:/Sampleguide.brl";
File file = new File(fileName);
//System.out.println("hello");
String content = FileUtils.readFileToString(file);
System.out.println(content);
BRXMLPersistence read = (BRXMLPersistence)
BRXMLPersistence.getInstance();
BRDRLPersistence write = (BRDRLPersistence)
BRDRLPersistence.getInstance();
//BRDRLPersistence.getInstance();
String outputDRL = write.marshal(read.unmarshal(content));
System.out.println(outputDRL);
I got error like this
com.thoughtworks.xstream.converters.ConversionException: metadataList :
metadataList : metadataList : metadataList
---- Debugging information ----
message : metadataList : metadataList
cause-exception :
com.thoughtworks.xstream.mapper.CannotResolveClassException
cause-message : metadataList : metadataList
class : org.drools.brms.client.modeldriven.brl.RuleModel
required-type : org.drools.brms.client.modeldriven.brl.RuleModel
path : /rule/metadataList
-------------------------------
at
com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:89)
at
com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:63)
at
com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:76)
at
com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:60)
at
com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller.java:137)
at
com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.unmarshal(AbstractTreeMarshallingStrategy.java:33)
at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:923)
at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:909)
at com.thoughtworks.xstream.XStream.fromXML(XStream.java:853)
at com.thoughtworks.xstream.XStream.fromXML(XStream.java:845)
at
org.drools.brms.server.util.BRXMLPersistence.unmarshal(BRXMLPersistence.java:91)
at com.sample.DroolsTest.main(DroolsTest.java:30)
Caused by: com.thoughtworks.xstream.mapper.CannotResolveClassException:
metadataList : metadataList
at
com.thoughtworks.xstream.mapper.DefaultMapper.realClass(DefaultMapper.java:68)
at
com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
at
com.thoughtworks.xstream.mapper.DynamicProxyMapper.realClass(DynamicProxyMapper.java:71)
at
com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
at
com.thoughtworks.xstream.mapper.PackageAliasingMapper.realClass(PackageAliasingMapper.java:88)
at
com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
at
com.thoughtworks.xstream.mapper.ClassAliasingMapper.realClass(ClassAliasingMapper.java:86)
at
com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
at
com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
at
com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
at
com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
at
com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
at
com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
at
com.thoughtworks.xstream.mapper.ArrayMapper.realClass(ArrayMapper.java:96)
at
com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
at
com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
at
com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
at
com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
at
com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
at
com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
at
com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
at
com.thoughtworks.xstream.mapper.CachingMapper.realClass(CachingMapper.java:52)
at
com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.determineType(AbstractReflectionConverter.java:347)
at
com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doUnmarshal(AbstractReflectionConverter.java:208)
at
com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:162)
at
com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:82)
... 11 more
Thanks&Regards,
*Kamal.t*
Associate Software Engineer
Sybrant Technologies Pvt. Ltd.
'Shriram The Gateway (SEZ)', Block A1,
3rd Floor, 16 GST Road, Perungalathur,
Chennai - 600 063, India
India | USA | Germany | China
Email :kamal.t@sybrant.com <swetha.p(a)sybrant.com>
Mobile : +91 9944011715
Phone : 044 4294 7511
Skype :kamalkamal5796
15 years, 5 months
looping over list
by odelyaholiday
I have a list of officers:
public static final Map<String, List<Officer>> officersPerGenre = new
HashMap<String, List<Officer>>();
Where the Officer with:
String name;
Integer mininumCost;
Integer maximumCost;
in officersPerGenre I fill for each genre list of officers.
In my drools:
rule "Select Officer"
ruleflow-group "select_officer"
no-loop true
salience 20
when
$processInstance: WorkflowProcessInstance()
$requestData: RequestData();
then
System.out.println("Hey!");
List officersWithGenre = (List)officers.get($requestData.getGenre());
end
Now I need to shrink the officersWithGenre only to officers that
$requestData.cost is between their mininumCost and maximum cost.
How do I write it in drools? In java i will simply iterate over the
collection.
--
View this message in context: http://drools-java-rules-engine.46999.n3.nabble.com/looping-over-list-tp2...
Sent from the Drools - User mailing list archive at Nabble.com.
15 years, 5 months
Large amount of rules deployment
by Benson Fung
Hi,
I have 9000 rules in a DRL file and would like to import to BRMS. Please
suggest a way to import it efficiently.
Thanks
Benson
15 years, 5 months
org.hibernate.StaleObjectStateException on aborting process
by Massudi
Running JBoss 6.0. Somewhere inside running JTA transaction:
@Override
public void stopProcess(PropertyObject object)
{
StatefulKnowledgeSession ksession =
ProcessHelper.loadSession(Registry.get().getMainProcessName(),
object.getKnowledgeSessionId());
ksession.abortProcessInstance(object.getProcessInstanceId());
}
aborting process leads to org.hibernate.StaleObjectStateException:
WARN [com.arjuna.ats.arjuna] ARJUNA-12125
TwoPhaseCoordinator.beforeCompletion - failed for SynchronizationImple<
0:ffffc0a801e8:126a:4d3fd283:3d,
org.hibernate.transaction.synchronization.HibernateSynchronizationImpl@1fa8761
>: javax.persistence.OptimisticLockException:
org.hibernate.StaleObjectStateException: Row was updated or deleted by
another transaction (or unsaved-value mapping was incorrect):
[org.drools.persistence.session.SessionInfo#13]
at
org.hibernate.ejb.AbstractEntityManagerImpl.wrapStaleStateException(AbstractEntityManagerImpl.java:1243)
[:3.6.0.Final]
at
org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1166)
[:3.6.0.Final]
at
org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1147)
[:3.6.0.Final]
at
org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1153)
[:3.6.0.Final]
at
org.hibernate.ejb.AbstractEntityManagerImpl$3.mapManagedFlushFailure(AbstractEntityManagerImpl.java:1067)
[:3.6.0.Final]
at
org.hibernate.transaction.synchronization.CallbackCoordinator.beforeCompletion(CallbackCoordinator.java:122)
[:3.6.0.Final]
at
org.hibernate.transaction.synchronization.HibernateSynchronizationImpl.beforeCompletion(HibernateSynchronizationImpl.java:51)
[:3.6.0.Final]
at
com.arjuna.ats.internal.jta.resources.arjunacore.SynchronizationImple.beforeCompletion(SynchronizationImple.java:97)
[:6.0.0.20101110-CR1]
at
com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.beforeCompletion(TwoPhaseCoordinator.java:274)
[:6.0.0.20101110-CR1]
at
com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.end(TwoPhaseCoordinator.java:94)
[:6.0.0.20101110-CR1]
at com.arjuna.ats.arjuna.AtomicAction.commit(AtomicAction.java:159)
[:6.0.0.20101110-CR1]
at
com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.commitAndDisassociate(TransactionImple.java:1156)
[:6.0.0.20101110-CR1]
at
com.arjuna.ats.internal.jta.transaction.arjunacore.BaseTransaction.commit(BaseTransaction.java:119)
[:6.0.0.20101110-CR1]
at
com.arjuna.ats.jbossatx.BaseTransactionManagerDelegate.commit(BaseTransactionManagerDelegate.java:75)
[:6.0.0.20101110-CR1]
at
org.jboss.tm.usertx.client.ServerVMClientUserTransaction.commit(ServerVMClientUserTransaction.java:162)
[:6.0.0.20101110-CR1]
at
com.infotech.web.util.HibernateSessionRequestFilter.doFilter(HibernateSessionRequestFilter.java:53)
[:]
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:274)
[:6.0.0.20101110-CR1]
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:242)
[:6.0.0.20101110-CR1]
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275)
[:6.0.0.20101110-CR1]
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
[:6.0.0.20101110-CR1]
at
org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:181)
[:6.0.0.20101110-CR1]
at
org.jboss.modcluster.catalina.CatalinaContext$RequestListenerValve.event(CatalinaContext.java:285)
[:1.1.0.Final]
at
org.jboss.modcluster.catalina.CatalinaContext$RequestListenerValve.invoke(CatalinaContext.java:261)
[:1.1.0.Final]
at
org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:88)
[:6.0.0.20101110-CR1]
at
org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:100)
[:6.0.0.20101110-CR1]
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
[:6.0.0.20101110-CR1]
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
[:6.0.0.20101110-CR1]
at
org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)
[:6.0.0.20101110-CR1]
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
[:6.0.0.20101110-CR1]
at
org.jboss.web.tomcat.service.request.ActiveRequestResponseCacheValve.invoke(ActiveRequestResponseCacheValve.java:53)
[:6.0.0.20101110-CR1]
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:362)
[:6.0.0.20101110-CR1]
at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877)
[:6.0.0.20101110-CR1]
at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:653)
[:6.0.0.20101110-CR1]
at
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:951)
[:6.0.0.20101110-CR1]
at java.lang.Thread.run(Unknown Source) [:1.6.0_22]
Caused by: org.hibernate.StaleObjectStateException: Row was updated or
deleted by another transaction (or unsaved-value mapping was incorrect):
[org.drools.persistence.session.SessionInfo#13]
at
org.hibernate.persister.entity.AbstractEntityPersister.check(AbstractEntityPersister.java:1932)
[:3.6.0.Final]
at
org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2576)
[:3.6.0.Final]
at
org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:2476)
[:3.6.0.Final]
at
org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2803)
[:3.6.0.Final]
at
org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:113)
[:3.6.0.Final]
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:273)
[:3.6.0.Final]
at
org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:265)
[:3.6.0.Final]
at
org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:185)
[:3.6.0.Final]
at
org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
[:3.6.0.Final]
at
org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:51)
[:3.6.0.Final]
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1216)
[:3.6.0.Final]
at
org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:383)
[:3.6.0.Final]
at
org.hibernate.transaction.synchronization.CallbackCoordinator.beforeCompletion(CallbackCoordinator.java:117)
[:3.6.0.Final]
... 29 more
Problem arises only when trying to abort process. Other things are
working: process executes, workItems are created etc.
What is the other transaction that updates the SessionInfo object? Why
doesn't ksession.abortProcessInstance(...) run in my current transaction?
Following helper methods are used in the code above:
public static StatefulKnowledgeSession loadSession(String process, int
sessionId)
{
try
{
KnowledgeBuilder kbuilder = getKnowledgeBuilder(process);
Environment env = buildEnvironment();
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
StatefulKnowledgeSession ksession =
JPAKnowledgeService.loadStatefulKnowledgeSession(sessionId, kbase, null,
env);
registerWorkItemHandlers(ksession);
return ksession;
}
catch (Exception ex) {...}
}
public static KnowledgeBuilder getKnowledgeBuilder(String process)
{
KnowledgeBuilder kbuilder =
KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add(ResourceFactory.newClassPathResource(process,
ProcessHelper.class), ResourceType.DRF);
if (kbuilder.hasErrors())
{
for (KnowledgeBuilderError error : kbuilder.getErrors())
{
System.out.println(error);
}
throw new IllegalStateException("Error building kbase!");
}
return kbuilder;
}
public static Environment buildEnvironment() throws NamingException
{
EntityManagerFactory emf =
Persistence.createEntityManagerFactory("org.drools.persistence.jpa");
Environment env = KnowledgeBaseFactory.newEnvironment();
env.set(EnvironmentName.ENTITY_MANAGER_FACTORY, emf);
return env;
}
15 years, 5 months