[JBoss]提问:使用drools4.0运行中出现ClassCastException问题(ShadowProxy)

使用drools4.0(包括version 4.0.0 or 4.0.1 or 4.0.2.SNAPSHOT都测试了)出现下面的异常。
现象: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上获得。再测试一样,结果写到本帖回复中。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值