浏览 2797 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-09-15
现象:junit测试规则没有问题,每次都是获得新的RuleBase。当程序放到应用系统中,系统启动时我初始化RuleBase并bind到jndi上(drools文档中提到过),运行开始一段时间规则调用没有异常,运行一段时间后出现ClassCastException异常,出现的位置是session.insert vo对象只是一个简单的javabean对象,规则根据其中数据匹配 DroolsRulesHandle其他代码使用springside的DroolsTemplate类中的代码 DroolsRulesHandle修改定义了static的rulebase,获得rulebae方式是从jndi上获得的rulebase。 DroolsRulesHandle.java:34 is: public static void assertObject(StatefulSession session, Object element) throws FactException { if (element == null) return; FactHandle fact = session.getFactHandle(element); } if (fact == null) { session.insert(element);//line 34 } else { session.update(fact, element); } } Object[] objs = new Object[]{vo, so};//vo,so just are javabean StatefulSession session = DroolsRulesHandle.getStatefulSession(objs); 出现的异常: Caused by: java.lang.ClassCastException: com.ejb.vo.WorkItemSoVOShadowProxy at org.drools.base.com.ejb.vo.WorkItemSoVO$getSoWorkItemType.getValue(Unknown Source) at org.drools.base.ClassFieldExtractor.getValue(ClassFieldExtractor.java:95) at org.drools.reteoo.CompositeObjectSinkAdapter$HashKey.setValue(CompositeObjectSinkAdapter.java:476) at org.drools.reteoo.CompositeObjectSinkAdapter.propagateAssertObject(CompositeObjectSinkAdapter.java:292) at org.drools.reteoo.ObjectTypeNode.assertObject(ObjectTypeNode.java:160) at org.drools.reteoo.Rete.assertObject(Rete.java:176) at org.drools.reteoo.ReteooRuleBase.assertObject(ReteooRuleBase.java:196) at org.drools.reteoo.ReteooWorkingMemory.doInsert(ReteooWorkingMemory.java:70) at org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:854) at org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:826) at org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:627) at com.im.util.jbossrules.DroolsRulesHandle.assertObject(DroolsRulesHandle.java:34) at com.im.util.jbossrules.DroolsRulesHandle.getStatefulSession(DroolsRulesHandle.java:52) at com.im.ejb.domain.PhoneNumberHandleDOM.assignTelNumber(PhoneNumberHandleDOM.java:51) at com.wm.ejb.domain.WMAdapterForSxDOM.assignNbrNew(WMAdapterForSxDOM.java:658) baidu上没有搜索到相关信息,google上只能搜索到下面jboss的edson(drools核心开发)和别人邮件内容,当中提到了类似的异常。从内容上我没有完全明白这个异常是否和我碰到的完全一样,我从4.0.0试用了4.0.1到4.0.2.SNAPSHOT。问题还是出现。我现在没有办法确定是我试用rulebase不当,还是drools本身存在bug? http://www.mail-archive.com/rules-users@lists.jboss.org/msg02131.html 我将修改rulebase的获得方式,不再从jndi上获得。再测试一样,结果写到本帖回复中。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |