Posted on 2010-10-02 11:15
penngo 阅读(8035)
评论(5) 编辑 收藏 所属分类:
JBPM
上一篇
在spring mvc下发布jbpm流程只介绍了发布jpdl的流程定义文件,并没有把流程图也一起发布,本篇将把流程定义文件和流程图一起打包为zip格式发布。
先介绍
jbpm流程设计器开发(3)的代码修改
com.workflow.designer.view.Menu.java代码,主要是增加生成图片和把jpdl和图片打包为zip文件。
1
saveItem.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文件。
1
public 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
2
public 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