2007-08-27
jBPM的懒加载好像有问题
我在使用jBPM的时候,遇到一个问题。
我在一个方法里面需要创建一个任务的实例,使用了下面的代码:
java 代码
- private void test() {
- ProcessInstance processInstance = this.getProcessInstance(0L);
- Token token = processInstance.getRootToken();
- TaskNode taskNode = (TaskNode) token.getNode();
- Task task = taskNode.getTask("taskName");
- TaskMgmtInstance tmi = processInstance.getTaskMgmtInstance();
- TaskInstance taskInstance = tmi.createTaskInstance(task, token);
- }
结果却发现抛出了ClassCassException。原因是jBPM在加载ProcessInstance的时候,对 token 等懒加载了,所以返回的token以及由token得到的taskNode都是代理对象。这个代理对象是 Node 的子类,所以如果 token.getNode() 的结果不转换为 TaskNode 类型的话,是不会出错的。但是如果要转换为 TaskNode 类型,就会抛异常,尽管这个Node确实是 TaskNode 类型的。
按理说,Hibernate对Node节点进行代理的时候,应该是用这个Node的实际类型(即Node的子类类型,比如TaskNode等)来代理的,而不应该用父类的类型(即Node类型)来代理。为什么还会这样呢?
不知道有没有什么办法解决这个问题? 我用了以下的方式来处理:
java 代码
- Task task = tmi.getTaskMgmtDefinition().getTask("taskName");
这样就不会有问题。
- 17:05
- 浏览 (294)
- 评论 (0)
- 分类: jBPM和其他工作流引擎
- 相关推荐
发表评论
- 浏览: 16628 次
- 性别:

- 来自: 上海

- 详细资料
搜索本博客
链接
最新评论
-
apachet转发请求到tomcat ...
很老的问题了,一般实际开发都是这样做的,至少我们用的tomcat5.0.28是这 ...
-- by jhj823900 -
jBPM的Scheduler模块和Sp ...
提示个方法。。用JobExecutorServlet方法来代替你的Schedul ...
-- by gabriel80 -
spring 学习日记 - 基于 ...
ms可以这样 <bean class="org.springframewo ...
-- by sgfgh -
如何实现Spring管理下的不 ...
如果是使用CFX的前身XFire时,使用的FactoryBean是org.cod ...
-- by ununreal -
如何实现Spring管理下的不 ...
引用服务端中途断掉又连上呢?应该没有影响的吧,http无状态 我的经验是如果初始 ...
-- by Frederick






评论排行榜