JBPM 实践

JBPM 实践
环境
安装Eclipse3.3
安装MyEclipse6.0
安装Tomcat5.5
安装MySQL5.0
下载JBoss jBPM Starters Kit 3.1.2

下载后解压到 D:\jbpm-starters-kit-3.1.2。目录下含有五个子目录:

jbpm jBPM的软件包,包含源码,例子等文件内容。
jbpm-bpel只含有一个网页
jbpm-db各种数据库hibernate配置文件示例,有些还包含了相应的jdbc驱动程序。
jbpm-designer辅助开发jBPM的Eclipse插件,具体在jbpm-gpd-feature子目录中
jbpm-server一个已经配置好了的基于JBoss的jBPM示例。

安装jBPM的Eclipse开发插件(略)

配置
1.导入工程
启动myEclipse,通过“Import”将jBPM工程导入eclipse中.
2.建库
在MySQL中建立数据库jbpm。字符集采用GBK。建表SQL如下:
CREATE DATABASE `jbpm`
CHARACTER SET 'gbk'
COLLATE 'gbk_chinese_ci';
3.添加MySQL驱动
在工程jbpm的lib目录下建立mysql文件夹,将MySQL需要的JDBC驱动程序拷贝其中。
4.建立数据库表
在工程jbpm的src/resources目录下建立mysql目录,并将jbpm/src/resources/hsqldb目录下的所有文件(create.db.hibernate.properties和identity.db.xml)拷贝入mysql中.
5修改create.db.hibernate.properties
hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.connection.driver_class=com.mysql.jdbc.Driver
hibernate.connection.url=jdbc:mysql://192.200.1.104:3306/jbpm
hibernate.connection.username=zhoucw
hibernate.connection.password=0632
hibernate.show_sql=true
6 修改build.deploy.xml
在<target name="create.db" depends="declare.jbpm.tasks, db.clean, db.start"
description="creates a hypersonic database with the jbpm tables and loads the processes in there">前面添加
<target
name="create.db.mysql"
depends="declare.jbpm.tasks"
description="creates a mysql database with the jbpm tables and loads the processes in there.
Run this target after starting mysql">
<jbpmschema
actions="create"
cfg="${basedir}/src/config.files/hibernate.cfg.xml"
properties="${basedir}/src/resources/mysql/create.db.hibernate.properties" />
<loadidentities
file="${basedir}/src/resources/mysql/identity.db.xml"
cfg="${basedir}/src/config.files/hibernate.cfg.xml"
properties="${basedir}/src/resources/mysql/create.db.hibernate.properties" />
<ant antfile="build.xml"
target="build.processes"
inheritall="false" />
<deployprocess
cfg="${basedir}/src/config.files/hibernate.cfg.xml"
properties="${basedir}/src/resources/mysql/create.db.hibernate.properties">
<fileset dir="build" includes="*.process" />
</deployprocess>
</target>
<property
file="${basedir}/src/resources/mysql/create.db.hibernate.properties" />
<target
name="execute.mysql.sql"
description="execute a mysql sql script with -Dmysql.script=path-to-script.">
<sql
driver="${hibernate.connection.driver_class}"
url="${hibernate.connection.url}" userid="${hibernate.connection.username}"
password="${hibernate.connection.password}"
delimiter=";"
autocommit="true"
οnerrοr="continue">
<classpath
refid="classpath.ant" />
<transaction
src="${mysql.script}" />
</sql>
</target>
在myeEclipse中,右键点击工程jbpm下的build.deploy.xml文件,在菜单中选择“Run As\Ant Build…”,在出现的窗口中选择“target”为“create db mysql”,然后点击“Run”按钮,开始运行Ant。

7 修改hibernate.cfg.xml
在myeclipse中打开工程jbpm下的src/config.files目录下的hibernate.cfg.xml文件,修改其中的内容为:
<!-- jdbc connection properties -->
<property name="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="hibernate.connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="hibernate.connection.url">
jdbc:mysql://192.200.1.104:3306/jbpm
</property>
<property name="hibernate.connection.username">zhoucw</property>
<property name="hibernate.connection.password">0632</property>
<!-- other hibernate properties -->
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">false</property>
<property name="hibernate.use_sql_comments">false</property>

8 修改build.deploy.xml
在eclipse中打开工程jbpm下的build.deploy.xml文件,找到如下“target”,<target name="build.webapp" description="builds jbpm.war">
并将此“target”内容更改为如下内容:
<target name="build.webapp" description="builds jbpm.war">
<ant antfile="build.xml" target="build.webapp" />
<mkdir dir="build/jbpm.war.dir" />
<copy todir="build/jbpm.war.dir">
<fileset dir="src/resources/jbpm.war" />
</copy>
<copy todir="build/jbpm.war.dir/WEB-INF/classes">
<fileset dir="src/config.files" />
</copy>
<copy todir="build/jbpm.war.dir/WEB-INF/lib">
<fileset dir="build"
includes="jbpm*.jar,converter.jar"
excludes="*src*.jar" />
<fileset dir="lib/jsf" includes="*.jar" />
<fileset dir="lib/dom4j" includes="*.jar" />
<fileset dir="lib/hibernate" includes="*.jar" />
<fileset dir="lib/mysql" includes="*.jar" />
<fileset dir="lib/commons"
includes="commons-digester-*.jar,
commons-beanutils-*.jar,
commons-fileupload-*.jar" />
<fileset dir="lib/jboss"
includes="*.jar"
excludes="jboss*.jar,
*servlet*.jar,
*hsql*.jar" />
</copy>
<jar destfile="build/jbpm.war">
<fileset dir="build/jbpm.war.dir" />
</jar>
</target>
打包成war文件
在eclipse中,右键点击工程jbpm.3下的build.deploy.xml文件,在菜单中选择“Run As\Ant Build…”,在出现的窗口中选择“target”为“build webapp”,然后点击“Run”按钮,开始运行Ant。


搭建一个例子
建立流程图如下:

[img]http://zhoucw.iteye.com/upload/attachment/18333/32d2b31a-90c5-3a3e-ad80-11a8e113c4b2.jpg[/img]

processdefinition.xml 内容如下:
<?xml version="1.0" encoding="UTF-8"?>

<process-definition
xmlns="urn:jbpm.org:jpdl-3.1" name="testNo2">
<start-state name="start">
<task name="apply account">
<controller>
<variable name="baoxiaoId" access="read,write,required" mapped-name="baoxiao_ID"></variable>
<variable name="baoxiaoNum" access="read,write,required" mapped-name="baoxiao_num"></variable>
</controller>
<assignment class="com.test.action.UserAssignment"></assignment>
</task>
<transition name="" to="to direct"></transition>
</start-state>

<decision name="to direct">
<handler class="com.test.action.DecisionProcess"/>
<transition name="to caiwu" to="caiwu check apply"></transition>
<transition name="to boss" to="boss signature apply"></transition>
</decision>
<task-node name="boss signature apply">
<task name="boss signature">
<controller>
<variable name="baoxiaoId" access="read" mapped-name="baoxiao_ID"></variable>
<variable name="baoxiaoNum" access="read" mapped-name="baoxiao_num">
</variable>
</controller>
<assignment class="com.test.action.BossAssignment">
</assignment>
</task>
<transition name="to confirm" to="confirm apply1"></transition>
</task-node>
<task-node name="caiwu check apply">
<task name="caiwu check">
<controller>
<variable name="baoxiaoId" access="read" mapped-name="baoxiao_ID"></variable>
<variable name="baoxiaoNum" access="read" mapped-name="baoxiao_num">
</variable>
</controller>
<assignment class="com.test.action.CaiWuAssignment">
</assignment>
</task>
<transition name="to confirm" to="confirm apply2"></transition>
</task-node>

<task-node name="confirm apply1">
<task name="confirm1">
<assignment class="com.test.action.UserAssignment"></assignment>

</task>
<transition name="" to="end1"></transition>
</task-node>

<task-node name="confirm apply2">
<task name="confirm2">
<assignment class="com.test.action.UserAssignment"></assignment>

</task>
<transition name="" to="end1"></transition>
</task-node>

<end-state name="end1"></end-state>


</process-definition>

其中涉及到的类如下:
BossAssignment
package com.test.action;

import org.jbpm.graph.exe.ExecutionContext;
import org.jbpm.taskmgmt.def.AssignmentHandler;
import org.jbpm.taskmgmt.exe.Assignable;

public class BossAssignment implements AssignmentHandler {

public void assign(Assignable assignable, ExecutionContext executionContext)
throws Exception {
assignable.setActorId("boss1");
// TODO Auto-generated method stub

}

}

package com.test.action;

import org.jbpm.graph.exe.ExecutionContext;
import org.jbpm.taskmgmt.def.AssignmentHandler;
import org.jbpm.taskmgmt.exe.Assignable;

public class CaiWuAssignment implements AssignmentHandler {

public void assign(Assignable assignable, ExecutionContext executionContext)
throws Exception {
assignable.setActorId("Caiwu1");
// TODO Auto-generated method stub

}

}
CaiWuAssignment
package com.test.action;

import org.jbpm.graph.exe.ExecutionContext;
import org.jbpm.taskmgmt.def.AssignmentHandler;
import org.jbpm.taskmgmt.exe.Assignable;

public class CaiWuAssignment implements AssignmentHandler {

public void assign(Assignable assignable, ExecutionContext executionContext)
throws Exception {
assignable.setActorId("Caiwu1");
// TODO Auto-generated method stub

}

}

DecisionProcess
package com.test.action;

import org.jbpm.graph.exe.ExecutionContext;
import org.jbpm.graph.node.DecisionHandler;

public class DecisionProcess implements DecisionHandler {

public String decide(ExecutionContext executionContext) throws Exception {
// TODO Auto-generated method stub
String go="";
Object baoxiaoId=executionContext.getContextInstance().getVariable("baoxiaoId");
Object baoxiaoNum=executionContext.getContextInstance().getVariable("baoxiaoNum");

if(Integer.parseInt((String)baoxiaoNum) >1000){
go="to boss";
}
else{

go="to caiwu";
}

return go;
}

}
UserAssignment
package com.test.action;

import org.jbpm.graph.exe.ExecutionContext;
import org.jbpm.taskmgmt.def.AssignmentHandler;
import org.jbpm.taskmgmt.exe.Assignable;

public class UserAssignment implements AssignmentHandler {

public void assign(Assignable assignable, ExecutionContext executionContext)
throws Exception {
assignable.setActorId("actor1");
// TODO Auto-generated method stub

}

}

发布到数据库以后,作为客户端业务层的java类如下:
No1Actor1ConfirmTest
package com.test;

import java.util.List;

import org.jbpm.JbpmConfiguration;
import org.jbpm.JbpmContext;
import org.jbpm.graph.exe.ProcessInstance;
import org.jbpm.graph.exe.Token;
import org.jbpm.taskmgmt.exe.TaskInstance;

public class No1Actor1ConfirmTest {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String user_name = "actor1";
JbpmConfiguration config=JbpmConfiguration.getInstance();
JbpmContext jbpmContext=config.createJbpmContext();
List ls=jbpmContext.getTaskList(user_name);
int num = ls.size();
System.out.println(String.valueOf(num));
for(int i= 0;i<num;i++){
TaskInstance ti = (TaskInstance)ls.get(i);
System.out.println(ti.getActorId()+"完成"+ti.getName());
ti.end();
}
jbpmContext.close();
}

}

No1Actor1Test
package com.test;

import org.hibernate.Session;
import org.hibernate.Transaction;
import org.jbpm.JbpmConfiguration;
import org.jbpm.JbpmContext;
import org.jbpm.graph.def.ProcessDefinition;
import org.jbpm.graph.exe.ProcessInstance;
import org.jbpm.taskmgmt.exe.TaskInstance;

public class No1Actor1Test {

/**
* @param args
*/
public static void main(String[] args) {
String user_name = "actor1";
String baoxiaoNum = "1300";
JbpmConfiguration config=JbpmConfiguration.getInstance();
JbpmContext jbpmContext=config.createJbpmContext();
Session session=jbpmContext.getSessionFactory().openSession();
Transaction trans=session.beginTransaction();
ProcessDefinition pd=jbpmContext.getGraphSession().findLatestProcessDefinition("testNo2");
ProcessInstance pi=pd.createProcessInstance();
TaskInstance ti=pi.getTaskMgmtInstance().createStartTaskInstance();
long pi_id= pi.getId();
No1Constant.baoxiaoId =pi_id;
ti.setVariable("baoxiaoId",pi_id);
ti.setVariable("baoxiaoNum",baoxiaoNum);
ti.end();
trans.commit();
session.close();
jbpmContext.close();
}

}

No1Boss1Test
package com.test;

import java.util.List;

import org.jbpm.JbpmConfiguration;
import org.jbpm.JbpmContext;
import org.jbpm.taskmgmt.exe.TaskInstance;


public class No1Boss1Test {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String user_name = "boss1";
JbpmConfiguration config=JbpmConfiguration.getInstance();
JbpmContext jbpmContext=config.createJbpmContext();

List ls=jbpmContext.getTaskList(user_name);
int num = ls.size();
System.out.println(String.valueOf(num));
for(int i= 0;i<num;i++){
TaskInstance ti = (TaskInstance)ls.get(i);
System.out.println(ti.getActorId()+"完成"+ti.getName());
ti.end();
}
jbpmContext.close();
}

}
No1CaiwuTest
package com.test;

import java.util.List;

import org.jbpm.JbpmConfiguration;
import org.jbpm.JbpmContext;
import org.jbpm.graph.exe.ProcessInstance;
import org.jbpm.graph.exe.Token;
import org.jbpm.taskmgmt.exe.TaskInstance;

public class No1CaiwuTest {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String user_name = "Caiwu1";
JbpmConfiguration config=JbpmConfiguration.getInstance();
JbpmContext jbpmContext=config.createJbpmContext();
//TaskInstance ti = jbpmContext.getTaskInstance(19);

ProcessInstance pi=jbpmContext.getProcessInstance(12);
Token token = pi.getRootToken();
System.out.println(token.getNode().getName());
//System.out.println(ti.getActorId());
List ls=jbpmContext.getTaskList(user_name);

int num = ls.size();
System.out.println(String.valueOf(num));
for(int i= 0;i<num;i++){
TaskInstance ti = (TaskInstance)ls.get(i);
System.out.println(ti.getActorId()+"完成"+ti.getName());
ti.end();
}
jbpmContext.close();
}

}
No1Constant
package com.test;

public class No1Constant {
public static long baoxiaoId=0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值