package com.norteksoft.wf.engine.web.listener; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import org.jbpm.internal.log.Log; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.ApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils; import com.norteksoft.mms.form.service.FormViewManager; import com.norteksoft.wf.engine.service.WorkflowDefinitionManager; /** * 在系统启动时初始化所有的流程定义 * @author Administrator */ public class WorkflowContextListener implements ServletContextListener{ private static final Log log = Log.getLog(WorkflowContextListener.class.getName()); Logger logg = LoggerFactory.getLogger(WorkflowContextListener.class); public void contextDestroyed(ServletContextEvent event) { } public void contextInitialized(ServletContextEvent event) { // try { // Security.checkAuthorizationFile(); // } catch (IllegalAccess e) { // log.error(e.getMessage()); // } ServletContext context = event.getServletContext(); initSecurityWorkflowDefinitions(context); } private Object getBeanFromApplicationContext(ServletContext servletContext, String beanName) { ApplicationContext applicationContext = WebApplicationContextUtils.getWebApplicationContext(servletContext); Object object = applicationContext.getBean(beanName); if(object == null){ StringBuilder builder = new StringBuilder(); builder.append("无法实例化Bean[").append(beanName).append("],系统启动失败"); log.debug(builder.toString()); throw new RuntimeException(builder.toString()); } return object; } private void initSecurityWorkflowDefinitions(ServletContext context){ logg.debug("================================================initSecurityWorkflowDefinitions"); Object obj = getBeanFromApplicationContext(context, "workflowDefinitionManager"); ((WorkflowDefinitionManager)obj).initAllWorkflowDefinition(); //将标准表单中所有签章字段存入缓存 Object viewManager = getBeanFromApplicationContext(context, "formViewManager"); ((FormViewManager)viewManager).getAllSignatureFields(); //给实例中流程编码赋值,再启动注释该语句 // obj=getBeanFromApplicationContext(context, "workflowInstanceManager"); // ((WorkflowInstanceManager)obj).initAllWorkflowInstances(); } }