Posted on 2010-10-02 11:15
penngo 阅读(8026)
评论(5) 编辑 收藏 所属分类:
JBPM
上一篇
在spring mvc下发布jbpm流程只介绍了发布jpdl的流程定义文件,并没有把流程图也一起发布,本篇将把流程定义文件和流程图一起打包为zip格式发布。
先介绍
jbpm流程设计器开发(3)的代码修改
com.workflow.designer.view.Menu.java代码,主要是增加生成图片和把jpdl和图片打包为zip文件。
1saveItem.addActionListener(new ActionListener(){
2 public void actionPerformed(ActionEvent e)
3 {
4 JFileChooser fileChooser = new JFileChooser();
5 fileChooser.setFileFilter(new FileNameExtensionFilter("zip", "zip"));
6 int result = fileChooser.showSaveDialog(Menu.this);
7 if(result == fileChooser.APPROVE_OPTION){
8 String path = fileChooser.getSelectedFile().getAbsolutePath();
9 Map<String, InputStream> map = new Hashtable<String, InputStream>();
10 SaveJpdl saveJpdl = new SaveJpdl();
11 saveJpdl.save(map, gv.getGraph());
12 try{
13 Color bg = null;
14 bg = gv.getBackground();
15 BufferedImage image = mxCellRenderer
16 .createBufferedImage(gv.getGraph(), null, 1, bg,
17 gv.isAntiAlias(), gv.getLayoutAreaSize(),
18 gv.getCanvas());
19 ByteArrayOutputStream bs = new ByteArrayOutputStream();
20 ImageOutputStream imOut = ImageIO.createImageOutputStream(bs);
21 ImageIO.write(image, "png", imOut);
22 InputStream is = new ByteArrayInputStream(bs.toByteArray());
23 map.put("process.png", is);
24 ZipUtil.saveZip(path + ".zip", map);
25 }
26 catch(Exception ex){
27 ex.printStackTrace();
28 }
29 }
30 }
31 });
ZipUtil生成zip文件。
1public class ZipUtil {
2 //调用该方法生成zip文件
3 public static void saveZip(String fileName, Map<String, InputStream> dataMap) {
4 try {
5 FileOutputStream fos = new FileOutputStream(fileName);
6 JarOutputStream jos = new JarOutputStream(fos);
7 byte buf[] = new byte[256];
8 if (dataMap != null) {
9 Set<Entry<String, InputStream>> entrySet = dataMap.entrySet();
10 int len = -1;
11 for (Entry<String, InputStream> entry : entrySet) {
12 String name = entry.getKey();
13 InputStream inputStream = entry.getValue();
14 if (name != null && inputStream != null) {
15 BufferedInputStream bis = new BufferedInputStream(
16 inputStream);
17 JarEntry jarEntry = new JarEntry(name);
18 jos.putNextEntry(jarEntry);
19
20 while ((len = bis.read(buf)) >= 0) {
21 jos.write(buf, 0, len);
22 }
23
24 bis.close();
25 jos.closeEntry();
26 }
27 }
28 }
29 jos.flush();
30 jos.close();
31 fos.flush();
32 fos.close();
33 } catch (Exception ex) {
34 throw new RuntimeException(ex);
35 }
36 }
37}
继续使用上一篇
在spring mvc下发布jbpm流程代码发布流程
类com.mvc.rest.RestController修改
1@Controller
2public class RestController {
3
4 public RestController() {
5
6 }
7
8 @RequestMapping(value = "/welcome", method = RequestMethod.GET)
9 public String registPost() {
10 return "/welcome";
11 }
12
13 @RequestMapping(value = "/deploy", method = RequestMethod.GET)
14 public String deployRest() {
15 return "/deploy";
16 }
17
18
19 @RequestMapping(value = "/end/{processId}", method = RequestMethod.GET)
20 public void deployend(HttpServletRequest request,
21 HttpServletResponse response, @PathVariable("processId") String processId) {
22 ProcessEngine processEngine = (ProcessEngine) SpringContextTool
23 .getBean("processEngine");
24 ProcessInstance processInstance = processEngine.getExecutionService().startProcessInstanceByKey("myprocess");
25 ProcessDefinition processDefinition = processEngine.getRepositoryService().createProcessDefinitionQuery()
26 .processDefinitionId(processInstance.getProcessDefinitionId())
27 .uniqueResult();
28 //获取流程图
29 InputStream inputStream = processEngine.getRepositoryService().getResourceAsStream(processDefinition.getDeploymentId(), processDefinition.getImageResourceName());
30 byte[] b = new byte[256];
31 int len = -1;
32 try{
33 while((len = inputStream.read(b)) > 0) {
34 response.getOutputStream().write(b, 0, len);
35 }
36
37 inputStream.close();
38 response.getOutputStream().flush();
39 response.getOutputStream().close();
40 }
41 catch(Exception e){
42 e.printStackTrace();
43 }
44 }
45
46 @RequestMapping(value = "/deployAction", method = RequestMethod.POST)
47 public ModelAndView deployAction(HttpServletRequest request,
48 HttpServletResponse response, ModelMap modelMap) {
49 String realPath = request.getSession().getServletContext().getRealPath(
50 "")
51 + "/WEB-INF/deploy/";
52 try {
53 if (ServletFileUpload.isMultipartContent(request)) {
54 MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
55 for (Iterator it = multipartRequest.getFileNames(); it
56 .hasNext();) {
57 String key = (String) it.next();
58 MultipartFile file = multipartRequest.getFile(key);
59 if (file.getOriginalFilename().length() > 0) {
60 String filename = file.getOriginalFilename();
61
62 File saveFile = new File(realPath + filename);
63 FileOutputStream fos = new FileOutputStream(saveFile);
64 fos.write(file.getBytes());
65 fos.flush();
66 fos.close();
67 ProcessEngine processEngine = (ProcessEngine) SpringContextTool
68 .getBean("processEngine");
69 RepositoryService rs = processEngine.getRepositoryService();
70 File deployFile = new File(saveFile.getAbsolutePath());
71 if (deployFile.exists()) {
72 // 发布流程
73 FileInputStream in = new FileInputStream(deployFile.getAbsolutePath());
74 ZipInputStream zin = new ZipInputStream(in);
75 String deploymentId = processEngine
76 .getRepositoryService().createDeployment().addResourcesFromZipInputStream(zin).deploy();
77
78 modelMap.put("deploy", "发布成功,版本号为:" + deploymentId);
79 in.close();
80 zin.close();
81 }
82 }
83 }
84 }
85 } catch (Exception e) {
86 modelMap.put("deploy", "发布失败!" );
87 e.printStackTrace();
88 }
89
90 return new ModelAndView("/end", modelMap);
91 }
92}
WEB-INF/view增加文件end.jsp,主要用来显示流程图
1<html>
2<head>
3<meta http-equiv="Content-Type" content="text/html; charset=GBK">
4<title>流程发布</title>
5</head>
6<body>
7<label><%=request.getAttribute("deploy")%></label>
8<img src="end/myprocess" />
9</body>
10</html>
运行效果:
设计器生成带jpdl和图片的zip流程包。
把该流程保存为Test.zip。
终于在国庆有空,把这一篇也写了。正好在国庆把做过的东西,整理下。
设计器:
设计器程序
源码:
jbpmspring