Null pointer exception after adding When condtion in Guvunor
by JimK
Using the latest JBPM installer demo setup, I have a simple program. It has
an object called person with a name and a salary. In guvonor there is a
simple rule that I scaled back from the original to try to see what is
happening. If I have a condition (salary >= 5000) it gives a null
exception, if I remove the condition it works fine. The new fact is inserted
and I can see it from my program. Just starting experimenting with guvonor
and have been following the threads on changeset but don't have a complete
grasp on it yet.
Thanks in advance,
Jim K.
rule "PersonWIthHighIncome"
no-loop true
dialect "mvel"
when
Person( salary >= 5000 )
then
Person fact0 = new Person();
fact0.setName( "Joe" );
fact0.setSalary( 34465 );
insert(fact0 );
end
This results in the following exception:
java.lang.NullPointerException
at
org.drools.impl.KnowledgeBaseImpl.addKnowledgePackages(KnowledgeBaseImpl.java:148)
at
org.drools.agent.impl.KnowledgeAgentImpl.addResourcesToKnowledgeBase(KnowledgeAgentImpl.java:1016)
at
org.drools.agent.impl.KnowledgeAgentImpl.rebuildResources(KnowledgeAgentImpl.java:785)
at
org.drools.agent.impl.KnowledgeAgentImpl.buildKnowledgeBase(KnowledgeAgentImpl.java:657)
at
org.drools.agent.impl.KnowledgeAgentImpl.applyChangeSet(KnowledgeAgentImpl.java:190)
at
org.drools.agent.impl.KnowledgeAgentImpl.applyChangeSet(KnowledgeAgentImpl.java:169)
at simpleBank.SimpleBank.createKnowledgeBase(SimpleBank.java:64)
at simpleBank.SimpleBank.main(SimpleBank.java:27)
Code calling the package
package simpleBank;
import java.util.ArrayList;
import java.util.Iterator;
import org.drools.KnowledgeBase;
import org.drools.KnowledgeBaseFactory;
import org.drools.agent.KnowledgeAgent;
import org.drools.agent.KnowledgeAgentConfiguration;
import org.drools.agent.KnowledgeAgentFactory;
import org.drools.builder.KnowledgeBuilder;
import org.drools.builder.KnowledgeBuilderError;
import org.drools.builder.KnowledgeBuilderErrors;
import org.drools.builder.KnowledgeBuilderFactory;
import org.drools.builder.ResourceType;
import org.drools.io.ResourceFactory;
import org.drools.logger.KnowledgeRuntimeLogger;
import org.drools.logger.KnowledgeRuntimeLoggerFactory;
import org.drools.runtime.StatefulKnowledgeSession;
public class SimpleBank {
public static void main(String[] args) {
try {
// load up the knowledge base
//KnowledgeBase kbase = readKnowledgeBase();
KnowledgeBase kbase = createKnowledgeBase();
StatefulKnowledgeSession ksession =
kbase.newStatefulKnowledgeSession();
//KnowledgeRuntimeLogger logger =
KnowledgeRuntimeLoggerFactory.newFileLogger(ksession, "test");
KnowledgeRuntimeLogger logger =
KnowledgeRuntimeLoggerFactory.newThreadedFileLogger(ksession, "Test2", 1);
// go ! insert one person
Person person = new Person();
person.setSalary((long) 6000);
person.setName("Jim");
System.out.println(person.getName());
ksession.insert(person);
assertTrue(ksession.getFactCount() == 1);
ksession.fireAllRules();
// rules should have added another fact
assertTrue(ksession.getFactCount() != 1);
ArrayList<Person> listoffacts = new ArrayList(ksession.getObjects());
System.out.println(listoffacts.size());
Iterator<Person> itr = listoffacts.iterator();
while (itr.hasNext()){
Person element = itr.next();
System.out.println(element.getName() + ":" +
element.getSalary().toString());
}
logger.close();
} catch (Throwable t) {
t.printStackTrace();
}
}
private static KnowledgeBase createKnowledgeBase() throws Exception{
KnowledgeAgentConfiguration kaconf =
KnowledgeAgentFactory.newKnowledgeAgentConfiguration();
kaconf.setProperty( "drools.agent.scanDirectories", "false" );
KnowledgeAgent kagent = KnowledgeAgentFactory.newKnowledgeAgent( "test
agent", kaconf );
kagent.applyChangeSet(ResourceFactory.newUrlResource(
"http://localhost:8080/drools-guvnor/org.drools.guvnor.Guvnor/package/Sale..."
));
// kagent.applyChangeSet(
ResourceFactory.newClassPathResource("ChangeSet.xml"));
return kagent.getKnowledgeBase();
}
private static void assertTrue(boolean b) {
if (b)
{
System.out.println("Good number of facts");
}
else
{
System.out.println("Bad number of facts");
}
}
}
--
View this message in context: http://drools.46999.n3.nabble.com/Null-pointer-exception-after-adding-Whe...
Sent from the Drools: User forum mailing list archive at Nabble.com.
14 years, 3 months
Drools 5.3 on Glassfish
by Chris Selwyn
I have just started looking at Drools 5.3 with a view to running the
Guvnor on Glassfish.
I have been using Drools 5.1 Guvnor on Glassfish 2.1 very happily for
some time but I thought that I should look at upgrading.
In fact, some time ago, I posted instructions here on how to setup
authentication for Guvnor against a Glassfish realm.
However, I notice that there are now different Guvnor binaries for
several different ASs but that list does not include Glassfish.
Since Glassfish 2.1 includes Tomcat as its JSP/Servlet container I have
used the Tomcat version and on first inspection it appears to work.
Have other users tried this combination? Did it work/not work for you?
Chris
14 years, 3 months
mail
by Senthil Kumar Krishnan
14 years, 3 months
Rulebase locking
by Joe White
We have encountered a problem with a lock getting generated on an
AbstractRuleBase and then never released causing new threads to not be
able to execute in that RuleBase. We are on an older version 5.0.1 of
Drools and are working on creating a unit test that we can use to see if
the defect exists in newer releases. That said, any tips that somebody
might have to reproduce a concurrency issue related to rule bases used
across threads would be very helpful. Or if there are other similar JIRA
entries that we can look at that?
This occurs only when the system is under relatively high load and there
potentially could be 100 threads attempting to access and use the same
rulebase.
This is very similar to this JIRA:
https://issues.jboss.org/browse/JBRULES-2086?page=com.atlassian.jira.plu
gin.system.issuetabpanels:all-tabpanel
We have confirmed that we have the fix generated in that ticket.
The general related stack traces for the waiting threads is :
java.lang.Thread.State: WAITING
...
at
java.util.concurrent.locks.ReentrantReadWriteLock$ReadLock.lock(Reentran
tReadWriteLock.java:423)
at
org.drools.common.AbstractRuleBase.readLock(AbstractRuleBase.java:414)
at
org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.jav
a:866)
at
org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.jav
a:788)
...
java.lang.Thread.State: BLOCKED on
org.drools.reteoo.ReteooStatefulSession@fec3cf owned by:
DefaultMessageListenerContainer-145
at
org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemo
ry.java:627)
at
org.drools.base.FireAllRulesRuleBaseUpdateListener.beforeRuleBaseUnlocke
d(FireAllRulesRuleBaseUpdateListener.java:41)
at
org.drools.event.RuleBaseEventSupport.fireBeforeRuleBaseUnlocked(RuleBas
eEventSupport.java:123)
at
org.drools.common.AbstractRuleBase.unlock(AbstractRuleBase.java:408)
at
org.drools.common.AbstractRuleBase.addPackages(AbstractRuleBase.java:517
)
at
org.drools.reteoo.ReteooRuleBase.addPackage(ReteooRuleBase.java:388)
.....
14 years, 3 months
rule flow
by kachaps4u
Hey all,
I tried to create a rule flow in Jboss dev studio specifying each
ruleflow-group name( same as in the rules inside BRMS). I specified the same
id as in BRMS and the same package name. I uploaded to the BRMS but the
rules are not getting fired. Can somebody please help me?
Thanks
aps
--
View this message in context: http://drools.46999.n3.nabble.com/rule-flow-tp3655029p3655029.html
Sent from the Drools: User forum mailing list archive at Nabble.com.
14 years, 3 months