|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
但是一些大型开发或者是保密型比较高的项目都会用java,原因有2点,一:java是开源的,不怕别人留后门,偷我工具,.net网页编程就不一样了,保持微软的一向风格,源代码不公开jBPM是对照盛行的事情流引擎之一。
供应对照天真的机制来完成事情流引擎。
jBPM的下载地点为:
http://www.jboss.com/products/jbpm/downloads能够下载到jBMP的开辟包、在jBoss服务器下的部署情况、和eclipse下的界说流程的工具。
jBMP3.0的文档在我看来有点复杂,
把文档重新看完,仍是有点无从动手的感到,
带的几个例子也绝对复杂,
先把触及的相干观点,按本人的了解收拾一下。另有值得一提的是,jBMP利用hiberanter来做耐久层,
也是进修hibernate的利用的好项目。
jBMP次要触及到以下观点:
processdefinition:事情流的流程的完全界说,包含节点和节点之间的走向等关头信息。一般以xml格局供应。
processinstance:是基于processdefination而天生的营业层的实例。当processinstancep创立今后,一个token就发生,代表流程的实行路径,并被界说到入手下手节点。
token:暗示了一个实行的路径,它是运转时发生的。
node:暗示流程中的一个节点。transition:联系关系两个节点,用于暗示节点的走向
signal:让一个token实行下一步。
当token进进到一个node时,node会被实行,并发生一些事务,好比进进、分开节点等,这也是实行营业逻辑的中央。事务由action来暗示。
再把本人做的一个复杂的例子贴下去:
<process-definitionname="DeclDefinition2">
<start-statename="start">
<transitionto="ComposeBatchValidate"/>
</start-state>
<statename="ComposeBatchValidate">
<eventtype="node-enter">
<actionclass="org.jbpm.tutorial.DeclComposeBatchAction"/>
</event>
<transitionto="FirstAudit"/>
</state>
<statename="FirstAudit">
<transitionto="end"/>
</state>
<end-statename="end"/>
</process-definition>
- 将process-definition文件耐久化到数据库
InputStreamis=DeclBatchTest.class
.getResourceAsStream("DeclBillStats.xml");
ProcessDefinitionprocessDefinition=ProcessDefinition
.parseXmlInputStream(is);
JbpmSessionjbpmSession=jbpmSessionFactory.openJbpmSession();
jbpmSession.beginTransaction();
jbpmSession.getGraphSession().saveProcessDefinition(processDefinition);
jbpmSession.commitTransaction();
jbpmSession.close();
JbpmSessionjbpmSession=jbpmSessionFactory.openJbpmSession();
jbpmSession.beginTransaction();
ProcessDefinitionprocessDefinition=jbpmSession.getGraphSession()
.findLatestProcessDefinition("DeclDefinition2");
ProcessInstanceprocessInstance=newProcessInstance(processDefinition);
ContextInstancecontextInstance=
processInstance.getContextInstance();
contextInstance.setVariable("no","1234");
Tokentoken=processInstance.getRootToken();
//System.out.println(token.getNode().getName());
//token.signal();
//System.out.println(token.getNode().getName());
//token.signal();
//System.out.println(token.getNode().getName());
jbpmSession.getGraphSession().saveProcessInstance(processInstance);
jbpmSession.commitTransaction();
jbpmSession.close();
注重:个中的Context,是流程把持和营业逻辑层互换数据的体例。要互换的信息,能够保留在ContextInstance中,并在今后读取此processinstance时,及Action的完成类中失掉这些信息。
JbpmSessionjbpmSession=jbpmSessionFactory.openJbpmSession();
jbpmSession.beginTransaction();
GraphSessiongraphSession=jbpmSession.getGraphSession();
ProcessDefinitionprocessDefinition=
graphSession.findLatestProcessDefinition("DeclDefinition2");
ListprocessInstances=
graphSession.findProcessInstances(processDefinition.getId());
System.out.println(processInstances.size());
for(inti=0;i<processInstances.size();i++){
ProcessInstanceprocessInstance=
(ProcessInstance)processInstances.get(i);
Tokentoken=processInstance.getRootToken();
token.signal();
System.out.println(token.getNode().getName());
ContextInstancecontextInstance=
processInstance.getContextInstance();
System.out.println(contextInstance.getVariable("no"));
jbpmSession.getGraphSession().saveProcessInstance(processInstance);
}
jbpmSession.commitTransaction();
jbpmSession.close();
action要承继ActionHandler,并供应execute办法。如:
publicvoidexecute(ExecutionContextexecutionContext){
System.out.println("comein");
System.out.println(executionContext.getContextInstance().getVariable("no"));
}
关于第二点:俺问问你,如果是企业级项目的话,诸如RMI,EJB,等一些关键技术,这些难道都不需要学么?如果光是使用jsp,servlet,javabean的话。 |
|