/** * Copyright 2007-2010 非也 * All rights reserved. * * This library is free software; you can redistribute it and/or modify it under the * terms of the GNU Lesser General Public License v3 as published by the Free Software * Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License along * with this library; if not, see http://www.gnu.org/licenses/lgpl.html. * */ package org.fireflow.server; import java.util.List; import java.util.Map; import javax.jws.WebMethod; import javax.jws.WebParam; import net.sf.ehcache.Cache; import net.sf.ehcache.CacheManager; import net.sf.ehcache.Element; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.fireflow.client.WorkflowSessionFactory; import org.fireflow.client.impl.WorkflowQueryImpl; import org.fireflow.client.impl.WorkflowSessionLocalImpl; import org.fireflow.client.impl.WorkflowStatementLocalImpl; import org.fireflow.engine.context.EngineModule; import org.fireflow.engine.context.RuntimeContext; import org.fireflow.engine.context.RuntimeContextAware; import org.fireflow.engine.context.TransactionTemplateAware; import org.fireflow.engine.entity.AbsWorkflowEntity; import org.fireflow.engine.entity.repository.ProcessKey; import org.fireflow.engine.entity.repository.impl.ProcessDescriptorImpl; import org.fireflow.engine.entity.runtime.ActivityInstance; import org.fireflow.engine.entity.runtime.ProcessInstance; import org.fireflow.engine.entity.runtime.WorkItem; import org.fireflow.engine.entity.runtime.impl.AbsActivityInstance; import org.fireflow.engine.entity.runtime.impl.AbsProcessInstance; import org.fireflow.engine.entity.runtime.impl.AbsWorkItem; import org.fireflow.engine.entity.runtime.impl.ActivityInstanceImpl; import org.fireflow.engine.entity.runtime.impl.LocalWorkItemImpl; import org.fireflow.engine.entity.runtime.impl.ProcessInstanceImpl; import org.fireflow.engine.exception.EngineException; import org.fireflow.engine.exception.InvalidOperationException; import org.fireflow.engine.exception.WorkflowProcessNotFoundException; import org.fireflow.engine.invocation.impl.ReassignmentHandler; import org.fireflow.engine.modules.ousystem.OUSystemConnector; import org.fireflow.engine.modules.ousystem.User; import org.fireflow.model.InvalidModelException; import org.fireflow.server.support.MapConvertor; import org.fireflow.server.support.ObjectWrapper; import org.fireflow.server.support.PropertiesConvertor; import org.fireflow.server.support.ScopeBean; import org.springframework.transaction.TransactionStatus; import org.springframework.transaction.support.TransactionCallback; import org.springframework.transaction.support.TransactionTemplate; /** * * @author 非也 nychen2000@163.com * Fire Workflow 官方网站:www.firesoa.com 或者 www.fireflow.org * */ public class WorkflowEngineServiceInternalImpl implements WorkflowEngineService, RuntimeContextAware, EngineModule, TransactionTemplateAware { private static final Log log = LogFactory .getLog(WorkflowEngineServiceInternalImpl.class); protected static final String SESSION_CACHE = "SESSION_CACHE"; protected RuntimeContext runtimeContext = null; protected int sessionToIdleSeconds = 30*60;//最大空闲时间,30分钟, protected int maxSessions = 50;//可并行存在的session数量 protected TransactionTemplate springTransactionTemplate = null; /** * 登录成功后,WorkflowSession被缓存。 * 目前采用EhCache实现。 * */ protected CacheManager cacheManager = null; public WorkflowEngineServiceInternalImpl(){ } public void init(RuntimeContext runtimeContext)throws EngineException{ try { cacheManager = CacheManager.create(); /* * CacheConfiguration config = new CacheConfiguration(); config * .setName(SESSION_CACHE); * config.setMaxElementsInMemory(maxSessions); * config.setMemoryStoreEvictionPolicyFromObject * (MemoryStoreEvictionPolicy.LFU); config.setOverflowToDisk(false); * config.setEternal(false); config.setTimeToLiveSeconds(0); * config.setTimeToIdleSeconds(sessionToIdleSeconds); * config.setDiskPersistent(false); */ Cache cache = new Cache(SESSION_CACHE, maxSessions, false, false, 0, sessionToIdleSeconds); cacheManager.addCache(cache); } catch (Exception e) { log.error(e.getMessage(), e); } } public TransactionTemplate getTransactionTemplate() { return springTransactionTemplate; } public void setTransactionTemplate( TransactionTemplate springTransactionTemplate) { this.springTransactionTemplate = springTransactionTemplate; } public int getMaxSessions() { return maxSessions; } public void setMaxSessions(int maxSessions) { this.maxSessions = maxSessions; } public int getSessionToIdleSeconds() { return sessionToIdleSeconds; } public void setSessionToIdleSeconds(int sessionToIdleSeconds) { this.sessionToIdleSeconds = sessionToIdleSeconds; } /* (non-Javadoc) * @see org.fireflow.engine.context.RuntimeContextAware#setRuntimeContext(org.fireflow.engine.context.RuntimeContext) */ public void setRuntimeContext(RuntimeContext ctx) { runtimeContext = ctx; } /* (non-Javadoc) * @see org.fireflow.engine.context.RuntimeContextAware#getRuntimeContext() */ public RuntimeContext getRuntimeContext() { return runtimeContext; } /* (non-Javadoc) * @see org.fireflow.engine.server.WorkflowServer#login(java.lang.String, java.lang.String) */ public WorkflowSessionLocalImpl login(String userName, String password) throws EngineException{ //OUSystemConnector是一个与流程语言无关的Module, OUSystemConnector connector = runtimeContext.getDefaultEngineModule(OUSystemConnector.class); if (connector==null){ throw new EngineException("Fire Workflow 引擎没有配置正确的组织机构链接器模块。"); } User u = connector.login(userName, password); if (u==null){ throw new EngineException("用户名或者密码错误;登录Fire Workflow失败。"); } WorkflowSessionLocalImpl session = (WorkflowSessionLocalImpl)WorkflowSessionFactory.createWorkflowSession(runtimeContext, u); if (cacheManager!=null){ Cache cache = cacheManager.getCache(SESSION_CACHE); if (cache!=null){ cache.put(new Element(session.getSessionId(),session)); } } return session; } /* (non-Javadoc) * @see org.fireflow.engine.server.WorkflowServer#uploadProcessXml(java.lang.String, org.fireflow.engine.entity.repository.ProcessDescriptor) */ @SuppressWarnings("unchecked") public ProcessDescriptorImpl uploadProcessXml(String sessionId, final String processXml,final int version)throws EngineException{ final WorkflowSessionLocalImpl session = validateSession(sessionId); final WorkflowStatementLocalImpl statement = (WorkflowStatementLocalImpl)session.createWorkflowStatement(); ProcessDescriptorImpl descriptor = (ProcessDescriptorImpl)springTransactionTemplate.execute(new TransactionCallback(){ public Object doInTransaction(TransactionStatus status) { try { return statement.uploadProcessXml(processXml, version); } catch (InvalidModelException e) { throw new EngineException(e); } } }); return descriptor; } public String getWorkflowProcessXml( String sessionId, String processId, int processVersion, String processType)throws EngineException{ final WorkflowSessionLocalImpl session = validateSession(sessionId); final WorkflowStatementLocalImpl statement = (WorkflowStatementLocalImpl)session.createWorkflowStatement(); ProcessKey pk = new ProcessKey(processId,processVersion,processType); return statement.getWorkflowProcessXml(pk); } public AbsWorkflowEntity getEntity(String sessionId,String entityId,String entityClassName){ final WorkflowSessionLocalImpl session = validateSession(sessionId); if (entityClassName==null || entityClassName.trim().equals("")){ return null; } if (entityId==null || entityId.trim().equals("")) { return null; } final WorkflowStatementLocalImpl statement = (WorkflowStatementLocalImpl)session.createWorkflowStatement(); if (ProcessInstance.class.getName().equals(entityClassName.trim())){ return (AbsProcessInstance)statement.getEntity(entityId, ProcessInstance.class); } else if (ActivityInstance.class.getName().equals(entityClassName.trim())){ return (AbsActivityInstance)statement.getEntity(entityId, ActivityInstance.class); } else if (WorkItem.class.getName().equals(entityClassName.trim())){ return (AbsWorkItem)statement.getEntity(entityId, WorkItem.class); } //TODO 待补充 return null; } public List<AbsWorkflowEntity> executeQueryList(String sessionId,WorkflowQueryImpl q){ final WorkflowSessionLocalImpl session = validateSession(sessionId); final WorkflowStatementLocalImpl statement = (WorkflowStatementLocalImpl)session.createWorkflowStatement(); List result = statement.executeQueryList(q); return result; } public int executeQueryCount(String sessionId, WorkflowQueryImpl q){ final WorkflowSessionLocalImpl session = validateSession(sessionId); final WorkflowStatementLocalImpl statement = (WorkflowStatementLocalImpl)session.createWorkflowStatement(); int i = statement.executeQueryCount(q); return i; } protected WorkflowSessionLocalImpl validateSession(String sessionId){ if (cacheManager!=null){ Cache cache = cacheManager.getCache(SESSION_CACHE); if (cache!=null){ try{ Element cacheElement = cache.get(sessionId); if (cacheElement==null){ throw new EngineException("Workflow Session超时,sessionId是:"+sessionId); } WorkflowSessionLocalImpl session = (WorkflowSessionLocalImpl)cacheElement.getValue(); return session; }catch(Exception e){ log.error(e.getMessage(),e); } } } return null; } /* (non-Javadoc) * @see org.fireflow.server.WorkflowEngineService#createProcessInstance(java.lang.String, java.lang.String) */ @SuppressWarnings("unchecked") public ProcessInstanceImpl createProcessInstance1(String sessionId, final String workflowProcessId) throws InvalidModelException, WorkflowProcessNotFoundException { final WorkflowSessionLocalImpl session = validateSession(sessionId); final WorkflowStatementLocalImpl statement = (WorkflowStatementLocalImpl)session.createWorkflowStatement(); ProcessInstanceImpl procInst = (ProcessInstanceImpl)springTransactionTemplate.execute(new TransactionCallback(){ public Object doInTransaction(TransactionStatus status){ ProcessInstance processInstance = null; try { processInstance = statement.createProcessInstance(workflowProcessId); } catch (InvalidModelException e) { throw new EngineException(e); } catch (WorkflowProcessNotFoundException e) { throw new EngineException(e); } return processInstance; } }); return procInst; } @SuppressWarnings("unchecked") public ProcessInstanceImpl createProcessInstance2(String sessionId, final String workflowProcessId,final int version) throws InvalidModelException, WorkflowProcessNotFoundException { final WorkflowSessionLocalImpl session = validateSession(sessionId); final WorkflowStatementLocalImpl statement = (WorkflowStatementLocalImpl)session.createWorkflowStatement(); ProcessInstanceImpl procInst = (ProcessInstanceImpl)springTransactionTemplate.execute(new TransactionCallback(){ public Object doInTransaction(TransactionStatus status){ ProcessInstance processInstance = null; try { processInstance = statement.createProcessInstance(workflowProcessId,version); } catch (InvalidModelException e) { throw new EngineException(e); } catch (WorkflowProcessNotFoundException e) { throw new EngineException(e); } return processInstance; } }); return procInst; } @SuppressWarnings("unchecked") public ProcessInstanceImpl createProcessInstance4(String sessionId, final String workflowProcessId,final int version,final String subProcessId) throws InvalidModelException, WorkflowProcessNotFoundException { final WorkflowSessionLocalImpl session = validateSession(sessionId); final WorkflowStatementLocalImpl statement = (WorkflowStatementLocalImpl)session.createWorkflowStatement(); ProcessInstanceImpl procInst = (ProcessInstanceImpl)springTransactionTemplate.execute(new TransactionCallback(){ public Object doInTransaction(TransactionStatus status){ ProcessInstance processInstance = null; try { processInstance = statement.createProcessInstance(workflowProcessId,version,subProcessId); } catch (InvalidModelException e) { throw new EngineException(e); } catch (WorkflowProcessNotFoundException e) { throw new EngineException(e); } return processInstance; } }); return procInst; } @SuppressWarnings("unchecked") public ProcessInstanceImpl createProcessInstance3(String sessionId, final String workflowProcessId,final String subProcessId) throws InvalidModelException, WorkflowProcessNotFoundException { final WorkflowSessionLocalImpl session = validateSession(sessionId); final WorkflowStatementLocalImpl statement = (WorkflowStatementLocalImpl)session.createWorkflowStatement(); ProcessInstanceImpl procInst = (ProcessInstanceImpl)springTransactionTemplate.execute(new TransactionCallback(){ public Object doInTransaction(TransactionStatus status){ ProcessInstance processInstance = null; try { processInstance = statement.createProcessInstance(workflowProcessId,subProcessId); } catch (InvalidModelException e) { throw new EngineException(e); } catch (WorkflowProcessNotFoundException e) { throw new EngineException(e); } return processInstance; } }); return procInst; } @SuppressWarnings("unchecked") public ProcessInstanceImpl runProcessInstance( String sessionId, final String processInstanceId, final String bizId, final MapConvertor mapConvertor){ final WorkflowSessionLocalImpl session = validateSession(sessionId); final WorkflowStatementLocalImpl statement = (WorkflowStatementLocalImpl)session.createWorkflowStatement(); ProcessInstanceImpl procInst = (ProcessInstanceImpl)springTransactionTemplate.execute(new TransactionCallback(){ public Object doInTransaction(TransactionStatus status){ ProcessInstance processInstance = null; processInstance = statement.runProcessInstance(processInstanceId, bizId, mapConvertor.getMap()); return processInstance; } }); return procInst; } @SuppressWarnings("unchecked") public ProcessInstanceImpl startProcess2( String sessionId,final String workflowProcessId, final int version,final String bizId, final MapConvertor mapConvertor) throws InvalidModelException, WorkflowProcessNotFoundException, InvalidOperationException{ final WorkflowSessionLocalImpl session = validateSession(sessionId); final WorkflowStatementLocalImpl statement = (WorkflowStatementLocalImpl)session.createWorkflowStatement(); ProcessInstanceImpl procInst = (ProcessInstanceImpl)springTransactionTemplate.execute(new TransactionCallback(){ public Object doInTransaction(TransactionStatus status){ ProcessInstance processInstance = null; try { processInstance = statement.startProcess(workflowProcessId,version,bizId,mapConvertor.getMap()); } catch (InvalidModelException e) { throw new EngineException(e); } catch (WorkflowProcessNotFoundException e) { throw new EngineException(e); } catch(InvalidOperationException e){ throw new EngineException(e); } return processInstance; } }); return procInst; } @SuppressWarnings("unchecked") public ProcessInstanceImpl startProcess4( String sessionId,final String workflowProcessId, final int version,final String subProcessId,final String bizId, final MapConvertor mapConvertor) throws InvalidModelException, WorkflowProcessNotFoundException, InvalidOperationException{ final WorkflowSessionLocalImpl session = validateSession(sessionId); final WorkflowStatementLocalImpl statement = (WorkflowStatementLocalImpl)session.createWorkflowStatement(); ProcessInstanceImpl procInst = (ProcessInstanceImpl)springTransactionTemplate.execute(new TransactionCallback(){ public Object doInTransaction(TransactionStatus status){ ProcessInstance processInstance = null; try { processInstance = statement.startProcess(workflowProcessId,version,subProcessId,bizId,mapConvertor.getMap()); } catch (InvalidModelException e) { throw new EngineException(e); } catch (WorkflowProcessNotFoundException e) { throw new EngineException(e); } catch(InvalidOperationException e){ throw new EngineException(e); } return processInstance; } }); return procInst; } @SuppressWarnings("unchecked") public ProcessInstanceImpl startProcess1( String sessionId,final String workflowProcessId,final String bizId, final MapConvertor mapConvertor) throws InvalidModelException, WorkflowProcessNotFoundException, InvalidOperationException{ final WorkflowSessionLocalImpl session = validateSession(sessionId); final WorkflowStatementLocalImpl statement = (WorkflowStatementLocalImpl)session.createWorkflowStatement(); ProcessInstanceImpl procInst = (ProcessInstanceImpl)springTransactionTemplate.execute(new TransactionCallback(){ public Object doInTransaction(TransactionStatus status){ ProcessInstance processInstance = null; try { processInstance = statement.startProcess(workflowProcessId,bizId,mapConvertor.getMap()); } catch (InvalidModelException e) { throw new EngineException(e); } catch (WorkflowProcessNotFoundException e) { throw new EngineException(e); } catch(InvalidOperationException e){ throw new EngineException(e); } return processInstance; } }); return procInst; } @SuppressWarnings("unchecked") public ProcessInstanceImpl startProcess3( String sessionId,final String workflowProcessId,final String subProcessId, final String bizId, final MapConvertor mapConvertor) throws InvalidModelException, WorkflowProcessNotFoundException, InvalidOperationException{ final WorkflowSessionLocalImpl session = validateSession(sessionId); final WorkflowStatementLocalImpl statement = (WorkflowStatementLocalImpl)session.createWorkflowStatement(); ProcessInstanceImpl procInst = (ProcessInstanceImpl)springTransactionTemplate.execute(new TransactionCallback(){ public Object doInTransaction(TransactionStatus status){ ProcessInstance processInstance = null; try { processInstance = statement.startProcess(workflowProcessId,subProcessId,bizId,mapConvertor.getMap()); } catch (InvalidModelException e) { throw new EngineException(e); } catch (WorkflowProcessNotFoundException e) { throw new EngineException(e); } catch(InvalidOperationException e){ throw new EngineException(e); } return processInstance; } }); return procInst; } @SuppressWarnings("unchecked") public ActivityInstanceImpl abortActivityInstance( String sessionId,final String activityInstanceId, final String note) throws InvalidOperationException { final WorkflowSessionLocalImpl session = validateSession(sessionId); final WorkflowStatementLocalImpl statement = (WorkflowStatementLocalImpl)session.createWorkflowStatement(); @SuppressWarnings("rawtypes") ActivityInstanceImpl actInst = (ActivityInstanceImpl)springTransactionTemplate.execute(new TransactionCallback(){ public Object doInTransaction(TransactionStatus status){ ActivityInstance actInst = null; try { actInst = statement.abortActivityInstance(activityInstanceId,note); } catch(InvalidOperationException e){ throw new EngineException(e); } return actInst; } }); return actInst; } @SuppressWarnings("unchecked") public ActivityInstanceImpl suspendActivityInstance( String sessionId,final String activityInstanceId, final String note) throws InvalidOperationException { final WorkflowSessionLocalImpl session = validateSession(sessionId); final WorkflowStatementLocalImpl statement = (WorkflowStatementLocalImpl)session.createWorkflowStatement(); @SuppressWarnings("rawtypes") ActivityInstanceImpl actInst = (ActivityInstanceImpl)springTransactionTemplate.execute(new TransactionCallback(){ public Object doInTransaction(TransactionStatus status){ ActivityInstance actInst = null; try { actInst = statement.suspendActivityInstance(activityInstanceId,note); } catch(InvalidOperationException e){ throw new EngineException(e); } return actInst; } }); return actInst; } @SuppressWarnings("unchecked") public ActivityInstanceImpl restoreActivityInstance( String sessionId,final String activityInstanceId, final String note) throws InvalidOperationException { final WorkflowSessionLocalImpl session = validateSession(sessionId); final WorkflowStatementLocalImpl statement = (WorkflowStatementLocalImpl)session.createWorkflowStatement(); @SuppressWarnings("rawtypes") ActivityInstanceImpl actInst = (ActivityInstanceImpl)springTransactionTemplate.execute(new TransactionCallback(){ public Object doInTransaction(TransactionStatus status){ ActivityInstance actInst = null; try { actInst = statement.restoreActivityInstance(activityInstanceId,note); } catch(InvalidOperationException e){ throw new EngineException(e); } return actInst; } }); return actInst; } @SuppressWarnings("unchecked") public ProcessInstanceImpl abortProcessInstance( String sessionId,final String processInstanceId, final String note) throws InvalidOperationException { final WorkflowSessionLocalImpl session = validateSession(sessionId); final WorkflowStatementLocalImpl statement = (WorkflowStatementLocalImpl)session.createWorkflowStatement(); @SuppressWarnings("rawtypes") ProcessInstanceImpl procInst = (ProcessInstanceImpl)springTransactionTemplate.execute(new TransactionCallback(){ public Object doInTransaction(TransactionStatus status){ ProcessInstance procInst = null; try { procInst = statement.abortProcessInstance(processInstanceId,note); } catch(InvalidOperationException e){ throw new EngineException(e); } return procInst; } }); return procInst; } @SuppressWarnings("unchecked") public ProcessInstanceImpl suspendProcessInstance( String sessionId,final String processInstanceId, final String note) throws InvalidOperationException { final WorkflowSessionLocalImpl session = validateSession(sessionId); final WorkflowStatementLocalImpl statement = (WorkflowStatementLocalImpl)session.createWorkflowStatement(); @SuppressWarnings("rawtypes") ProcessInstanceImpl procInst = (ProcessInstanceImpl)springTransactionTemplate.execute(new TransactionCallback(){ public Object doInTransaction(TransactionStatus status){ ProcessInstance procInst = null; try { procInst = statement.suspendProcessInstance(processInstanceId,note); } catch(InvalidOperationException e){ throw new EngineException(e); } return procInst; } }); return procInst; } @SuppressWarnings("unchecked") public ProcessInstanceImpl restoreProcessInstance( String sessionId,final String processInstanceId, final String note) throws InvalidOperationException { final WorkflowSessionLocalImpl session = validateSession(sessionId); final WorkflowStatementLocalImpl statement = (WorkflowStatementLocalImpl)session.createWorkflowStatement(); @SuppressWarnings("rawtypes") ProcessInstanceImpl procInst = (ProcessInstanceImpl)springTransactionTemplate.execute(new TransactionCallback(){ public Object doInTransaction(TransactionStatus status){ ProcessInstance procInst = null; try { procInst = statement.restoreProcessInstance(processInstanceId,note); } catch(InvalidOperationException e){ throw new EngineException(e); } return procInst; } }); return procInst; } @SuppressWarnings("unchecked") public LocalWorkItemImpl claimWorkItem(String sessionId,final String workItemId){ final WorkflowSessionLocalImpl session = validateSession(sessionId); final WorkflowStatementLocalImpl statement = (WorkflowStatementLocalImpl)session.createWorkflowStatement(); @SuppressWarnings("rawtypes") LocalWorkItemImpl workItem = (LocalWorkItemImpl)springTransactionTemplate.execute(new TransactionCallback(){ public Object doInTransaction(TransactionStatus status){ WorkItem workItem = null; try { workItem = statement.claimWorkItem(workItemId); } catch(InvalidOperationException e){ throw new EngineException(e); } return workItem; } }); return workItem; } @SuppressWarnings("unchecked") public LocalWorkItemImpl withdrawWorkItem(String sessionId,final String workItemId){ final WorkflowSessionLocalImpl session = validateSession(sessionId); final WorkflowStatementLocalImpl statement = (WorkflowStatementLocalImpl)session.createWorkflowStatement(); @SuppressWarnings("rawtypes") LocalWorkItemImpl workItem = (LocalWorkItemImpl)springTransactionTemplate.execute(new TransactionCallback(){ public Object doInTransaction(TransactionStatus status){ WorkItem workItem = null; try { workItem = statement.withdrawWorkItem(workItemId); } catch(InvalidOperationException e){ throw new EngineException(e); } return workItem; } }); return workItem; } @SuppressWarnings("unchecked") public LocalWorkItemImpl disclaimWorkItem(String sessionId,final String workItemId, final String attachmentId, final String attachmentType,final String note){ final WorkflowSessionLocalImpl session = validateSession(sessionId); final WorkflowStatementLocalImpl statement = (WorkflowStatementLocalImpl)session.createWorkflowStatement(); @SuppressWarnings("rawtypes") LocalWorkItemImpl workItem = (LocalWorkItemImpl)springTransactionTemplate.execute(new TransactionCallback(){ public Object doInTransaction(TransactionStatus status){ WorkItem workItem = null; try { workItem = statement.disclaimWorkItem(workItemId,attachmentId,attachmentType,note); } catch(InvalidOperationException e){ throw new EngineException(e); } return workItem; } }); return workItem; } @SuppressWarnings("unchecked") public LocalWorkItemImpl completeWorkItem1(String sessionId,final String workItemId, final String attachmentId, final String attachmentType,final String note){ final WorkflowSessionLocalImpl session = validateSession(sessionId); final WorkflowStatementLocalImpl statement = (WorkflowStatementLocalImpl)session.createWorkflowStatement(); @SuppressWarnings("rawtypes") LocalWorkItemImpl workItem = (LocalWorkItemImpl)springTransactionTemplate.execute(new TransactionCallback(){ public Object doInTransaction(TransactionStatus status){ WorkItem workItem = null; try { workItem = statement.completeWorkItem(workItemId,attachmentId,attachmentType,note); } catch(InvalidOperationException e){ throw new EngineException(e); } return workItem; } }); return workItem; } @SuppressWarnings("unchecked") public LocalWorkItemImpl completeWorkItem2(String sessionId,final String workItemId, final MapConvertor mapConvertor, final String attachmentId, final String attachmentType,final String note){ final WorkflowSessionLocalImpl session = validateSession(sessionId); final WorkflowStatementLocalImpl statement = (WorkflowStatementLocalImpl)session.createWorkflowStatement(); @SuppressWarnings("rawtypes") LocalWorkItemImpl workItem = (LocalWorkItemImpl)springTransactionTemplate.execute(new TransactionCallback(){ public Object doInTransaction(TransactionStatus status){ WorkItem workItem = null; try { workItem = statement.completeWorkItem(workItemId,mapConvertor.getMap(),attachmentId,attachmentType,note); } catch(InvalidOperationException e){ throw new EngineException(e); } return workItem; } }); return workItem; } @SuppressWarnings("unchecked") public LocalWorkItemImpl completeWorkItemAndJumpTo1(String sessionId,final String workItemId, final String targetActivityId, final String attachmentId, final String attachmentType,final String note){ final WorkflowSessionLocalImpl session = validateSession(sessionId); final WorkflowStatementLocalImpl statement = (WorkflowStatementLocalImpl)session.createWorkflowStatement(); @SuppressWarnings("rawtypes") LocalWorkItemImpl workItem = (LocalWorkItemImpl)springTransactionTemplate.execute(new TransactionCallback(){ public Object doInTransaction(TransactionStatus status){ WorkItem workItem = null; try { workItem = statement.completeWorkItemAndJumpTo(workItemId,targetActivityId,attachmentId,attachmentType,note); } catch(InvalidOperationException e){ throw new EngineException(e); } return workItem; } }); return workItem; } @SuppressWarnings("unchecked") public LocalWorkItemImpl completeWorkItemAndJumpTo2(String sessionId,final String workItemId, final String targetActivityId, final MapConvertor assignmentStrategy, final String attachmentId, final String attachmentType,final String note){ final WorkflowSessionLocalImpl session = validateSession(sessionId); final WorkflowStatementLocalImpl statement = (WorkflowStatementLocalImpl)session.createWorkflowStatement(); @SuppressWarnings("rawtypes") LocalWorkItemImpl workItem = (LocalWorkItemImpl)springTransactionTemplate.execute(new TransactionCallback(){ public Object doInTransaction(TransactionStatus status){ WorkItem workItem = null; try { workItem = statement.completeWorkItemAndJumpTo(workItemId,targetActivityId,assignmentStrategy.getMap(),attachmentId,attachmentType,note); } catch(InvalidOperationException e){ throw new EngineException(e); } return workItem; } }); return workItem; } @SuppressWarnings("unchecked") public LocalWorkItemImpl reassignWorkItemTo(String sessionId,final String workItemId, final ReassignmentHandler handler, final String attachmentId, final String attachmentType,final String note){ final WorkflowSessionLocalImpl session = validateSession(sessionId); final WorkflowStatementLocalImpl statement = (WorkflowStatementLocalImpl)session.createWorkflowStatement(); @SuppressWarnings("rawtypes") LocalWorkItemImpl workItem = (LocalWorkItemImpl)springTransactionTemplate.execute(new TransactionCallback(){ public Object doInTransaction(TransactionStatus status){ WorkItem workItem = null; try { workItem = statement.reassignWorkItemTo(workItemId,handler,attachmentId,attachmentType,note); } catch(InvalidOperationException e){ throw new EngineException(e); } return workItem; } }); return workItem; } public ObjectWrapper getVariableValue(String sessionId,ScopeBean scopeBean, String varName){ final WorkflowSessionLocalImpl session = validateSession(sessionId); final WorkflowStatementLocalImpl statement = (WorkflowStatementLocalImpl)session.createWorkflowStatement(); Object result = statement.getVariableValue(scopeBean, varName); ObjectWrapper objWrapper = new ObjectWrapper(); objWrapper.setOriginalValue(result); return objWrapper; } @WebMethod public MapConvertor getVariableValues( @WebParam(name="sessionId") String sessionId, @WebParam(name="scope") ScopeBean scopeBean){ final WorkflowSessionLocalImpl session = validateSession(sessionId); final WorkflowStatementLocalImpl statement = (WorkflowStatementLocalImpl)session.createWorkflowStatement(); Map<String,Object> vars = statement.getVariableValues(scopeBean); MapConvertor convertor = new MapConvertor(); convertor.putAll(vars, MapConvertor.MAP_TYPE_VARIABLE); return convertor; } @SuppressWarnings("unchecked") public void setVariableValue1(String sessionId,final ScopeBean scopeBean,final String name, final ObjectWrapper obj){ final WorkflowSessionLocalImpl session = validateSession(sessionId); final WorkflowStatementLocalImpl statement = (WorkflowStatementLocalImpl)session.createWorkflowStatement(); springTransactionTemplate.execute(new TransactionCallback(){ public Object doInTransaction(TransactionStatus status){ try { statement.setVariableValue(scopeBean, name, obj==null?null:obj.getOriginalValue()); } catch(InvalidOperationException e){ throw new EngineException(e); } return null; } }); } @SuppressWarnings("unchecked") public void setVariableValue2(String sessionId,final ScopeBean scopeBean,final String name, final ObjectWrapper obj,final PropertiesConvertor convertor){ final WorkflowSessionLocalImpl session = validateSession(sessionId); final WorkflowStatementLocalImpl statement = (WorkflowStatementLocalImpl)session.createWorkflowStatement(); springTransactionTemplate.execute(new TransactionCallback(){ public Object doInTransaction(TransactionStatus status){ try { statement.setVariableValue(scopeBean, name, obj==null?null:obj.getOriginalValue(), convertor==null?null:convertor.getProperties()); } catch(InvalidOperationException e){ throw new EngineException(e); } return null; } }); } public boolean isSessionValid(String sessionId){ try{ WorkflowSessionLocalImpl sessionLocalImpl = validateSession(sessionId); if (sessionLocalImpl!=null)return true; else return false; }catch(Exception e){ return false; } } /* (non-Javadoc) * @see org.fireflow.server.WorkflowEngineService#test(java.lang.String) */ // @Override // public Customer test(String name) { // if (name.equals("zhangsan")){ // Customer c = new Customer(); // Address a = new Address(); // a.setAddress("天河东路123号"); // c.setContactInfo(a); // // c.addContactInfo(a); // // PhoneNumber phone = new PhoneNumber(); // phone.setNumber("186203203012"); // c.addContactInfo(phone); // // return c; // }else{ // Customer c = new Customer(); // PhoneNumber phone = new PhoneNumber(); // phone.setNumber("186203203012"); // c.setContactInfo(phone); // return c; // } // } // // public ContactInfo test2(String s){ // if (s.equals("a")){ // Address a = new Address(); // a.setAddress("天河东路123号"); // return a; // }else{ // PhoneNumber phone = new PhoneNumber(); // phone.setNumber("186203203012"); // return phone; // } // } /* (non-Javadoc) * @see org.fireflow.server.WorkflowEngineService#updateProcessDescriptor(java.lang.String, org.fireflow.engine.entity.repository.impl.ProcessDescriptorImpl) */ public void updateProcessDescriptor(String sessionId, final ProcessDescriptorImpl processDescriptor) { final WorkflowSessionLocalImpl session = validateSession(sessionId); final WorkflowStatementLocalImpl statement = (WorkflowStatementLocalImpl)session.createWorkflowStatement(); springTransactionTemplate.execute(new TransactionCallback(){ public Object doInTransaction(TransactionStatus status) { statement.updateProcessDescriptor(processDescriptor); return null; } }); } }