求jbpm4+spring+jdbc操作

xiaoNet 2013-03-26
各位帮忙看看问题:
目前我是jbpm4.4+spring配置好了,具体对不对我也不知道,但是事务什么都能控制。
目前我有个service
public String startProcess(String processDefKey,String billId) {
String pid=executionService.startProcessInstanceByKey(processDefKey,   billId).getId();
String sql=" select * from  jbpm4_task a where   a.procinstkey_='"+billId+"'";
List<Object> rs=commonDao.select(sql);
System.out.println(rs.size());
return pid;

}
很简单的一个需求,调用流程自己的api启动流程,然后我想自己写一个sql执行jdbc查询生成的task,我知道用taskService可以获取,我这里只是假设我是查询task这个sql,意思就是我这里要执行自定义sql,但是我查询不到,原因就是事务还没提交,而且jbpm里面的session与执行的dao session不是同一个,所以查询不到。
谷歌了N多,还是找不到解决方案。
我自定义command 实现jbpm内部的command
public class CustomSelSqlCommand implements Command<Object>{



public  Object execute(Environment environment) throws Exception {
DbSession dbSession=environment.get(DbSession.class);
String sql="select * from jbpm4_task a where a.procinstkey_='0002'";
List<Object> list=dbSession.sqlSelect(sql,param);
return list;
}

希望通过Environment 来获取 但还是拿到的session不是之前startProcess那个

求解决方案,能否实现会话一致。
xiaoNet 2013-03-26
有木有哥们帮忙解答解答  i am online
673529171 2013-03-26
你可以在执行这个流程前,先获取DbSession,两个服务同用一个DbSession
forevercoding 2013-03-27
基本上是集成问题,等会有时间回答下
xiaoNet 2013-03-27
673529171 写道
你可以在执行这个流程前,先获取DbSession,两个服务同用一个DbSession

谢谢你的建议,我有尝试过,在源码里面的startProcessCmd方法里面共用该dbsession,但还是不行,不过就算行,我觉得这种方式的集成也不好,每次扩展业务都在最底层的同一个方法里面执行,好像不好吧
xiaoNet 2013-03-27
forevercoding 写道
基本上是集成问题,等会有时间回答下

谢谢你的回答,基本上是集成的问题是不是可以肯定可以拿到同一个session呢,这真是太好了,非常期待你的回答啊。有email或者QQ么 
forevercoding 2013-03-27
xiaoNet 写道
forevercoding 写道
基本上是集成问题,等会有时间回答下

谢谢你的回答,基本上是集成的问题是不是可以肯定可以拿到同一个session呢,这真是太好了,非常期待你的回答啊。有email或者QQ么 



jbpm.spring.default.cfg.xml
有没有配置
<hibernate-session current="true"/>
xiaoNet 2013-03-27
有配置
<?xml version="1.0" encoding="UTF-8"?>

<jbpm-configuration spring="enabled" >
<process-engine-context>
<command-service name="newTxRequiredCommandService">
<retry-interceptor />
<environment-interceptor policy="requiresNew"/>
<spring-transaction-interceptor policy="requiresNew"/>
</command-service>
<command-service name="txRequiredCommandService">
<retry-interceptor />
<environment-interceptor  />
<spring-transaction-interceptor transaction-manager="transactionManager"  />
</command-service>

</process-engine-context>
   <transaction-context>
   <transaction type="spring" />
   <hibernate-session   current="true"/>
   </transaction-context>

</jbpm-configuration>
xiaoNet 2013-03-27
forevercoding 写道
xiaoNet 写道
forevercoding 写道
基本上是集成问题,等会有时间回答下

谢谢你的回答,基本上是集成的问题是不是可以肯定可以拿到同一个session呢,这真是太好了,非常期待你的回答啊。有email或者QQ么 



jbpm.spring.default.cfg.xml
有没有配置
<hibernate-session current="true"/>

您说的是上面那个配置吗
forevercoding 2013-03-27
我没仔细看你代码,发现你的写的不对......

getId()一般是由流程key、流程的execution的dbid及流程路径名构成;

而jbpm4_task的procinst_字段存放的是dbid,没有procinstkey_字段

把executionService.startProcessInstanceByKey(processDefKey,   billId)强转化为ExecutionImpl对象可以获取dbid;


注:这种问题完全可以调试出来,楼主需要转变下解决问题思路,以后碰到jbpm4.4难题可以问我,我初步看过些源码...
Global site tag (gtag.js) - Google Analytics