jBPM的懒加载好像有问题

阅读更多

        我在使用jBPM的时候,遇到一个问题。

        我在一个方法里面需要创建一个任务的实例,使用了下面的代码:

java 代码
  1. private void test() {   
  2.     ProcessInstance processInstance = this.getProcessInstance(0L);   
  3.     Token token = processInstance.getRootToken();   
  4.     TaskNode taskNode = (TaskNode) token.getNode();   
  5.     Task task = taskNode.getTask("taskName");   
  6.     TaskMgmtInstance tmi = processInstance.getTaskMgmtInstance();   
  7.     TaskInstance taskInstance = tmi.createTaskInstance(task, token);   
  8. }  

        结果却发现抛出了ClassCassException。原因是jBPM在加载ProcessInstance的时候,对 token 等懒加载了,所以返回的token以及由token得到的taskNode都是代理对象。这个代理对象是 Node 的子类,所以如果 token.getNode() 的结果不转换为 TaskNode 类型的话,是不会出错的。但是如果要转换为 TaskNode 类型,就会抛异常,尽管这个Node确实是 TaskNode 类型的。

        按理说,Hibernate对Node节点进行代理的时候,应该是用这个Node的实际类型(即Node的子类类型,比如TaskNode等)来代理的,而不应该用父类的类型(即Node类型)来代理。为什么还会这样呢?

        不知道有没有什么办法解决这个问题? 我用了以下的方式来处理:

java 代码
  1. Task task = tmi.getTaskMgmtDefinition().getTask("taskName");  

        这样就不会有问题。

你可能感兴趣的:(JBPM,Hibernate)