Tom,
Looks like a bug and I have an idea why it is happening. Let me do some
investigation here and I will get back to you.
Meanwhile, feel free to open a ticket to track this or I will do it
myself later.
Edson
2010/6/22 <Tom.E.Murphy(a)wellsfargo.com>
Mauricio –
Here’s the session set-up and rules code:
*public* *void* processDataWithRules(BeansLoader loader, Object pf,
GlobalRulesFunctions gf)
*throws* ARGenTDataInsertionException, ARGenTRunTimeException, Exception
{
StatefulKnowledgeSession ksession = *null*;
*try*
{
*if* (kbase.getKnowledgePackages().size() == 0)
*throw* *new* ARGenTRunTimeException("There are no
knowledge packages (Rules) in the rule base.");
ksession = kbase.newStatefulKnowledgeSession();
gf.setRulesSession(ksession);
ksession.setGlobal("functions", gf);
loader.Load(pf, (StatefulKnowledgeSessionImpl) ksession); //
see below for code of this load operation
*for* (*final* KnowledgePackage kp : kbase
.getKnowledgePackages())
*for* (*final* Process p : kp.getProcesses())
{
*final* String id = p.getId();
*final* Long lId = *new* Long(id);
*if* (*this*.topLevelFlowId == 0 ||
lId.longValue() == *this*.topLevelFlowId)
ksession.startProcess(id);
}
ksession.fireAllRules();
}
*catch* (Throwable t)
{
*throw* *new* ARGenTRunTimeException(t);
}
*finally*
{
gf.setRulesSession(*null*);
*if* (ksession != *null*)
ksession.dispose();
}
}
And here’s the object insertion code (BeansLoader). It is a recursive
descent through a hierarchy of XmlBeans objects, inserting the interesting
objects and suppressing others.
*public* *void* Load(Object toLoad, StatefulKnowledgeSessionImpl wm) *
throws* ARGenTDataInsertionException
{
*try*
{
Class c = toLoad.getClass();
*if* (c.isPrimitive() || Suppress(c.getName()))
*return*;
wm.insert(toLoad); // insert the object into working memory
Method[] methods = c.getMethods();
*for* (Method mIter : methods)
{
*if* (mIter.getParameterTypes().length == 0
&& mIter.getName().startsWith("get")
&&
!mIter.getName().startsWith("getIsSet")
&& !mIter.getName().endsWith("Bean"))
{
*if* (!mIter.getReturnType().isPrimitive()
&&
!Suppress(mIter.getReturnType().getName()))
{
String testName = "getIsSet" +
mIter.getName().substring(3);
Method mTester = *null*;
Method m = *null*;
*try*
{
m = *c.getMethod(mIter.getName(),**
null**)*;
mTester = *c.getMethod(testName, **
null**)*;
}
*catch* (Throwable t)
{
// ignore -- testing for null next
}
*if* (mTester != *null*)
{
Object test = *mTester.invoke(toLoad,
**null**)*;
Boolean b = *false*;
*if* (test != *null* &&
test.getClass().isInstance(b))
{
b = (Boolean)test;
*if* (!b)
*continue*;
}
}
*if* (m != *null*)
{
Object o = *mIter.invoke(toLoad, **
null**)*;
*if* (o != *null*)
{
*Class* co = o.getClass();
String className =
co.getCanonicalName();
*if* (className.endsWith("[]")) //
an array
{
Object [] os = (Object[])o;
*for* (Object o1 : os)
{
Load(o1,wm);
}
}
*else* *if* (o *instanceof*ArrayList)
{
*ArrayList* al = (*
ArrayList*)o;
*for* (Object o2 : al)
Load(o2,wm);
}
*else*
{
Load(o,wm);
}
}
}
}
}
}
}
*catch*(Throwable t)
{
*throw* *new* ARGenTDataInsertionException(t);
}
}
*Tom Murphy*
Business Process Consultant
Wells Fargo HCFG - CORE Deal Decisioning Platform*
*
800 S. Jordan Creek Parkway | West Des Moines, IA 50266
MAC: X2301-01B*
*Office: 515 324 4853 | Mobile: 515 423 4334
tom.e.murphy(a)wellsfargo.com
This transmission may contain information that is confidential and/or
proprietary. If you are not the individual or entity to which it is
addressed, note that any review, disclosure, copying, retransmission, or
other use is strictly prohibited. If you received this transmission in
error, please notify the sender immediately and delete the material from
your system.
*From:* rules-dev-bounces(a)lists.jboss.org [mailto:
rules-dev-bounces(a)lists.jboss.org] *On Behalf Of *Mauricio Salatino
*Sent:* Tuesday, June 22, 2010 9:09 AM
*To:* Rules Dev List
*Subject:* Re: [rules-dev] Exception in runtime
I'm not aware about Web Logic, but you can review what exactly are you
doing the insertion. Can you share with us where do you have your ksession
(inside a Stateless/Statefull session bean inside weblogic?), how you access
that session to insert facts, etc.
Greetings.
On Tue, Jun 22, 2010 at 11:03 AM, <Tom.E.Murphy(a)wellsfargo.com> wrote:
Maurice –
By design of our runtime components, a single stateful session is owned and
managed by a single thread. Data is only inserted by that one thread into
that session.
Unless maybe the Web Logic app server is doing something odd under the
covers…
*Tom Murphy*
Business Process Consultant
Wells Fargo HCFG - CORE Deal Decisioning Platform*
*
800 S. Jordan Creek Parkway | West Des Moines, IA 50266
MAC: X2301-01B*
*Office: 515 324 4853 | Mobile: 515 423 4334
tom.e.murphy(a)wellsfargo.com
This transmission may contain information that is confidential and/or
proprietary. If you are not the individual or entity to which it is
addressed, note that any review, disclosure, copying, retransmission, or
other use is strictly prohibited. If you received this transmission in
error, please notify the sender immediately and delete the material from
your system.
*From:* rules-dev-bounces(a)lists.jboss.org [mailto:
rules-dev-bounces(a)lists.jboss.org] *On Behalf Of *Mauricio Salatino
*Sent:* Tuesday, June 22, 2010 8:26 AM
*To:* Rules Dev List
*Subject:* Re: [rules-dev] Exception in runtime
Are you inserting facts from different threads in a statefull session?
On Tue, Jun 22, 2010 at 10:21 AM, <Tom.E.Murphy(a)wellsfargo.com> wrote:
Anybody have any ideas on this?
We are seeing ConcurrentModificationException while inserting objects into
working memory. This happens occasionally, either at service start-up, where
the first transaction is being submitted and the rules are loading for the
first time, or sometimes under heavy loads with lots of transactions being
processed by the service:
Drools 5.0.1-GA
AS: Web Logic
JVM: 1.5
Fragment of stack trace:
Caused by: java.util.ConcurrentModificationException
java.util.HashMap$HashIterator.nextEntry(HashMap.java:2117)
java.util.HashMap$ValueIterator.next(HashMap.java:2147)
org.drools.reteoo.EntryPointNode.updateSink(EntryPointNode.java:285)
org.drools.reteoo.ObjectTypeNode.attach(ObjectTypeNode.java:279)
org.drools.reteoo.builder.PatternBuilder.attachObjectTypeNode(PatternBuilder.java:234)
org.drools.reteoo.ClassObjectTypeConf.<init>(ClassObjectTypeConf.java:93)
org.drools.common.ObjectTypeConfigurationRegistry.getObjectTypeConf(ObjectTypeConfigurationRegistry.java:58)
org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:849)
org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:788)
org.drools.impl.StatefulKnowledgeSessionImpl.insert(StatefulKnowledgeSessionImpl.java:216)
com.wellsfargo.ARGenT.Execution.DefaultLoader.Load(DefaultLoader.java:16)
*Tom Murphy
*Business Process Consultant
Wells Fargo HCFG - CORE Deal Decisioning Platform
800 S. Jordan Creek Parkway | West Des Moines, IA 50266
MAC: X2301-01B
Office: 515 324 4853 | Mobile: 515 423 4334
tom.e.murphy(a)wellsfargo.com
This transmission may contain information that is confidential and/or
proprietary. If you are not the individual or entity to which it is
addressed, note that any review, disclosure, copying, retransmission, or
other use is strictly prohibited. If you received this transmission in
error, please notify the sender immediately and delete the material from
your system.
_______________________________________________
rules-dev mailing list
rules-dev(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-dev
--
- CTO @
http://www.plugtree.com
- MyJourney @
http://salaboy.wordpress.com
- Co-Founder @
http://www.jbug.com.ar
- Salatino "Salaboy" Mauricio -
_______________________________________________
rules-dev mailing list
rules-dev(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-dev
--
- CTO @
http://www.plugtree.com
- MyJourney @
http://salaboy.wordpress.com
- Co-Founder @
http://www.jbug.com.ar
- Salatino "Salaboy" Mauricio -
_______________________________________________
rules-dev mailing list
rules-dev(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-dev