现在的位置: 首页 > 综合 > 正文

jbpm与ssh完整示例(二)

2013年10月16日 ⁄ 综合 ⁄ 共 5305字 ⁄ 字号 评论关闭
 

流程的发布常用的有二种方式:直接发布processdefinition.xml定义的xml文件, 在以前的文章描述中使用的方式。建议使用第二种方式,gpd.xmlprocessdefinition.xmlprocessimage.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;

         }

        

}

 

 

抱歉!评论已关闭.