流程的发布常用的有二种方式:直接发布processdefinition.xml定义的xml文件, 在以前的文章描述中使用的方式。建议使用第二种方式,gpd.xml、processdefinition.xml、processimage.jpg压缩成zip文件上传。注rar不可以,java当中不支持这种商业化的压缩文件。
代码如下:
1 deployjbpm.jsp下选择zip压缩文件上传
<%@ page contentType="text/html;charset=UTF-8"%>
<%@ include file="/commons/taglibs.jsp"%>
<html>
<head>
</head>
<body>
<form action="${ctx}/jbpmdeploy.do?method=deploy" enctype="multipart/form-data" method="post" />
选择zip类型流程上传 : <input type="file" name="file" />
<br/>
<input type="submit">
</form>
</body>
</html>
2 struts中的action文件
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import com.shane.commons.core.web.StrutsAction;
import com.shane.security.service.UploadProcessManager;
public class JbpmAction extends StrutsAction {
private static Log log = LogFactory.getLog(JbpmAction.class);
private UploadProcessManager uploadProcessManager;
public void setUploadProcessManager(UploadProcessManager uploadProcessManager) {
this.uploadProcessManager = uploadProcessManager;
}
/**
* 上传流程文件
* @param mapping
* @param form
* @param request
* @param response
* @return
*/
public ActionForward deploy(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)throws Exception {
log.info("执行流程部署!");
log.info(uploadProcessManager.handleRequest(request));
return mapping.findForward("delpoyindex");
}
}
3 Service类,使用时要修改自已的hibernate的封装。代码中使用spring的设置式注入方式。相关文件可以自行编写。本方式是根据jbpm自带的示例改写。
3.1接口定义
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
public interface UploadProcessManager {
public void printInput(HttpServletRequest request) throws IOException;
public String handleRequest(HttpServletRequest request);
}
3.2实现类
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;
import java.util.List;
import java.util.zip.ZipInputStream;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.fileupload.DiskFileUpload;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUpload;
import org.apache.commons.fileupload.FileUploadException;
import org.jbpm.JbpmConfiguration;
import org.jbpm.JbpmContext;
import org.jbpm.graph.def.ProcessDefinition;
import com.shane.commons.core.dao.HibernateEntityDao;
public class UploadProcessManagerImpl extends HibernateEntityDao implements UploadProcessManager{
private JbpmConfiguration jbpmConfiguration;
public void printInput(HttpServletRequest request) throws IOException {
InputStream inputStream = request.getInputStream();
StringBuffer buffer = new StringBuffer();
int read;
while ((read = inputStream.read()) != -1) {
buffer.append((char)read);
}
}
public String handleRequest(HttpServletRequest request) {
if (!FileUpload.isMultipartContent(request)) {
return "Not a multipart request";
}
try {
DiskFileUpload fileUpload = new DiskFileUpload();
List list = fileUpload.parseRequest(request);
Iterator iterator = list.iterator();
if (!iterator.hasNext()) {
return "No process file in the request";
}
FileItem fileItem = (FileItem)iterator.next();
if (fileItem.getContentType().indexOf("application/x-zip-compressed") == -1) {
return "Not a process archive";
}
return doDeployment(fileItem);
} catch (FileUploadException e) {
e.printStackTrace();
return "FileUploadException";
}
}
public String doDeployment(FileItem fileItem) {
try {
ZipInputStream zipInputStream = new ZipInputStream(fileItem.getInputStream());
JbpmContext jbpmContext = JbpmContext.getCurrentJbpmContext();
if(jbpmContext == null) {
jbpmContext = this.getJbpmContext();
}
ProcessDefinition processDefinition = ProcessDefinition.parseParZipInputStream(zipInputStream);
jbpmContext.deployProcessDefinition(processDefinition);
zipInputStream.close();
return "Deployed archive " + processDefinition.getName() + " successfully";
} catch (IOException e) {
return "IOException";
}
}
private JbpmContext getJbpmContext(){
JbpmContext context = jbpmConfiguration.getInstance().createJbpmContext();
context.setSession(this.getSession());
return context;
}
public void setJbpmConfiguration(JbpmConfiguration jbpmConfiguration) {
this.jbpmConfiguration = jbpmConfiguration;
}
}
分享到:
- 2009-01-10 08:12
- 浏览 1874
- 评论(4)
- 论坛回复 / 浏览 (3 / 3961)
- 查看更多
相关推荐
JBPM4 SSH EXTJS JBPM SSH EXTJS JBPM4 SSH EXTJS JBPM SSH EXTJS JBPM4 SSH EXTJS JBPM SSH EXTJS JBPM4 SSH EXTJS JBPM SSH EXTJS 希望对大家有帮助。
大概整理jbpm4与ssh框架整合,如果大家整合使用有什么问题可以给我留言。
完整项目案例 包含完整架包 和数据库表结构 以及完整数据 在eclipse和myeclipse都可以完美运行 下载后遇到问题 可以给我留言解决
jbpm+SSH完整例子,有详细文档说明。入门最适合用的例子,一看就懂。
这里包括jbpm4.3与SSh集成的步骤,集成过程出现的问题,jbpm的简单介绍
jbpm与SPRING,STRUTS,HIBERNATE集成整合的示例,主要给大家分享学习。
jbpm4.4+ssh整合还需要安装插件进入到myeclipse中 将相应的jar文件放进去 就能够运行 jbpm4.4 jar ssh(strut2,hibernate3,spring3)三大框架整合的jar包 例子是 请假流程 代码中有很好的注释 便于初学者学习
JBPM4与SSH三大框架整合的请假流程
jbpm整合ssh的例子.tomcat,mysql.jbpm整合ssh的例子.tomcat,mysql
Jbpm工作流与ssh框架集成,开发实例
完整的JBPM示例,下载后解压直接运行。
基于JBPM4.3 整合SSH2 框架的请假流程完整实例。 需要jar可以发email给我或留言
jBPM4.4+ssh 整合配置及完整实例
本示例是jBPM4工作流示例jbpmDemo,详细演示了jBPM4工作流引擎的使用,对工作流采用Canvas动画形象演示,非常实用。也非常先进和有趣。 希望您喜欢。
jbpm4.4与ssh框架的整合
JBPM4.4与SSH2之整合(附完整源码) 这些天,想着把jbpm4.4与ssh2整合一下,由于之前从来没用过jbpm,也不知道各版本之间会有什么差异(经过网上的收集对比,还真有些差异),整合起来,还真是有些步履艰难。收集了...
一个简单的工作流示例 Struts 1.2 + spring 2.0 + hibernate 3.1 + jbpm3.1
有代码示例也有文档说明,适合学习JBPM的童鞋们上手