jbpm3 本身提供很多API,可直接操作实体,包结构是以对象去规划的。假设对jbpm进行扩展,继承任务实例、增加其它实体,那么就少不了对于实体的新增、删除和修改;数据要返回给应用(J2EE),需要定义Interface、DAO、DTO等等。以前的项目并没有去区分这一块,对于实例的操作没有使用DAO,而是定义一个类和所需的方法,然后传入JbpmContext或Session 如:
其实使用Interface有很多好处,所以定义DAO层;每个方法中都有一个JbpmContext/Session,不够优雅,所以简化参数。如
public class WorkflowUtil {
public List<ProcessInstance> findProcessInstancesByProcessDefinition(JbpmContext jbpmContext, String accountName) {
Session session = jbpmContext.getSession();
String ql = "SELECT processInstance\n"
+ "FROM org.jbpm.graph.exe.ProcessInstance processInstance\n"
+ "WHERE processInstance.processDefinition = :processDefinition\n"
+ "AND processInstance.end IS NULL\n";
session.createQuery(ql);
Query query = session.createQuery(ql).setParameter("processDefinition", processDefinition);
return query.list();
}
其实使用Interface有很多好处,所以定义DAO层;每个方法中都有一个JbpmContext/Session,不够优雅,所以简化参数。如
public class WorkflowDaoBean implements WorkflowDao {
private Session session;
private final static Log log = LogFactory.getLog(WorkflowDaoBean.class);
@SuppressWarnings("deprecation")
public WorkflowDaoBean(){
JbpmContext currentJbpmContext = JbpmContext.getCurrentJbpmContext();
if (currentJbpmContext!=null) {
session = currentJbpmContext.getSession();
} else {
log.info("无法获取当前JbpmContext。");
}
}
public WorkflowDaoBean(Session session){
this.session = session;
}
@SuppressWarnings("unchecked")
public List<ProcessInstance> findProcessInstancesByProcessDefinition(ProcessDefinition processDefinition) {
String ql = "SELECT processInstance\n"
+ "FROM org.jbpm.graph.exe.ProcessInstance processInstance\n"
+ "WHERE processInstance.processDefinition = :processDefinition\n"
+ "AND processInstance.end IS NULL\n";
session.createQuery(ql);
Query query = session.createQuery(ql).setParameter("processDefinition", processDefinition);
return query.list();
}