ALF-10117: JBPM workflows should be hidden.

A new property "system.workflow.jbpm.definitions.visible" has been added, set to false by default. This means that when the JBPM engine is enabled (the default for upgrades) in-flight workflows can continue but the JBPM definitions will not be returned and therefore hide them from the UI preventing new instances from being created.

If customers want to show the JBPM workflows again all is required is to set the "system.workflow.jbpm.definitions.visible" property to true.

The Workflow MBean has also been updated to expose the new property and the Workflow admin console now displays the value.

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@30356 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Gavin Cornwell
2011-09-08 21:49:35 +00:00
parent af956b0064
commit 5f14a5105b
11 changed files with 166 additions and 70 deletions

View File

@@ -25,6 +25,7 @@
<property name="companyHomeStore" value="${spaces.store}" />
<property name="companyHomePath" value="/${spaces.company_home.childname}" />
<property name="unprotectedSearchService" ref="searchService" />
<property name="workflowAdminService" ref="workflowAdminService" />
</bean>
</beans>

View File

@@ -45,6 +45,13 @@ system.workflow.deployservlet.enabled=false
# Sets the location for the JBPM Configuration File
system.workflow.jbpm.config.location=classpath:org/alfresco/repo/workflow/jbpm/jbpm.cfg.xml
# Determines if JBPM workflow definitions are shown.
# Default is false. This controls the visibility of JBPM
# workflow definitions from the getDefinitions and
# getAllDefinitions WorkflowService API but still allows
# any in-flight JBPM workflows to be completed.
system.workflow.jbpm.definitions.visible=false
# Determines if the JBPM engine is enabled
system.workflow.engine.jbpm.enabled=true

View File

@@ -68,12 +68,15 @@
<!-- -->
<bean id="workflowAdminService" class="org.alfresco.repo.workflow.WorkflowAdminServiceImpl">
<property name="jbpmEngineEnabled">
<value>${system.workflow.engine.jbpm.enabled}</value>
</property>
<property name="activitiEngineEnabled">
<value>${system.workflow.engine.activiti.enabled}</value>
</property>
<property name="JBPMEngineEnabled">
<value>${system.workflow.engine.jbpm.enabled}</value>
</property>
<property name="JBPMWorkflowDefinitionsVisible">
<value>${system.workflow.jbpm.definitions.visible}</value>
</property>
</bean>
<!-- -->

View File

@@ -152,7 +152,7 @@ public abstract class AbstractInvitationServiceImplTest extends BaseAlfrescoSpri
{
// Make sure both workflow engines are enabled.
workflowAdminService.setActivitiEngineEnabled(true);
workflowAdminService.setJbpmEngineEnabled(true);
workflowAdminService.setJBPMEngineEnabled(true);
this.authenticationComponent.setSystemUserAsCurrentUser();
invitationServiceImpl.setSendEmails(startSendEmails);

View File

@@ -59,7 +59,7 @@ public class ActivitiInvitationServiceImplTests extends AbstractInvitationServic
resourceType, resourceName, inviteeRole);
// Disable Jbpm and enable Activiti
workflowAdminService.setJbpmEngineEnabled(false);
workflowAdminService.setJBPMEngineEnabled(false);
workflowAdminService.setActivitiEngineEnabled(true);
}
}

View File

@@ -38,7 +38,7 @@ public class JbpmInvitationServiceImplTests extends AbstractInvitationServiceImp
super.onSetUpInTransaction();
// Add a few Jbpm invitations to check they dont' interfere with Activiti invitations.
workflowAdminService.setJbpmEngineEnabled(false);
workflowAdminService.setJBPMEngineEnabled(false);
String invitee = USER_ONE;
Invitation.ResourceType resourceType = Invitation.ResourceType.WEB_SITE;
@@ -60,6 +60,6 @@ public class JbpmInvitationServiceImplTests extends AbstractInvitationServiceImp
// Disable Jbpm and enable Activiti
workflowAdminService.setActivitiEngineEnabled(false);
workflowAdminService.setJbpmEngineEnabled(true);
workflowAdminService.setJBPMEngineEnabled(true);
}
}

View File

@@ -79,6 +79,7 @@ public abstract class AbstractWorkflowServiceIntegrationTest extends BaseSpringT
protected TestPersonManager personManager;
protected TestGroupManager groupManager;
protected NodeService nodeService;
protected WorkflowAdminServiceImpl workflowAdminService;
private NodeRef companyHome;
public void testDeployWorkflowDefinition()
@@ -1151,6 +1152,10 @@ public abstract class AbstractWorkflowServiceIntegrationTest extends BaseSpringT
authenticationComponent.setSystemUserAsCurrentUser();
// for the purposes of the tests make sure JBPM workflow definitions are visible
this.workflowAdminService = (WorkflowAdminServiceImpl) applicationContext.getBean("workflowAdminService");
this.workflowAdminService.setJBPMWorkflowDefinitionsVisible(true);
// create test users
this.personManager = new TestPersonManager(authenticationService, personService, nodeService);
this.groupManager = new TestGroupManager(authorityService, searchService);

View File

@@ -32,19 +32,31 @@ public class WorkflowAdminServiceImpl implements WorkflowAdminService
{
public static final String NAME = "workflowAdminService";
private boolean jbpmEngineEnabled = true;
private boolean activitiEngineEnabled = true;
public void setJbpmEngineEnabled(boolean jbpmEngineEnabled)
{
this.jbpmEngineEnabled = jbpmEngineEnabled;
}
private boolean jbpmEngineEnabled = true;
private boolean jbpmDefinitionsVisible = false;
public void setActivitiEngineEnabled(boolean activitiEngineEnabled)
{
this.activitiEngineEnabled = activitiEngineEnabled;
}
public void setJBPMEngineEnabled(boolean jbpmEngineEnabled)
{
this.jbpmEngineEnabled = jbpmEngineEnabled;
}
public void setJBPMWorkflowDefinitionsVisible(boolean jbpmDefinitionsVisible)
{
this.jbpmDefinitionsVisible = jbpmDefinitionsVisible;
}
@Override
public boolean isJBPMWorkflowDefinitionsVisible()
{
return this.jbpmDefinitionsVisible;
}
@Override
public boolean isEngineEnabled(String engineId)
{

View File

@@ -54,6 +54,7 @@ import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter;
import org.alfresco.service.cmr.search.SearchService;
import org.alfresco.service.cmr.security.AuthorityType;
import org.alfresco.service.cmr.security.PersonService;
import org.alfresco.service.cmr.workflow.WorkflowAdminService;
import org.alfresco.service.cmr.workflow.WorkflowDefinition;
import org.alfresco.service.cmr.workflow.WorkflowDeployment;
import org.alfresco.service.cmr.workflow.WorkflowException;
@@ -126,6 +127,7 @@ public class JBPMEngine extends AlfrescoBpmEngine implements WorkflowEngine
protected AuthorityDAO authorityDAO;
protected JbpmTemplate jbpmTemplate;
protected SearchService unprotectedSearchService;
protected WorkflowAdminService workflowAdminService;
// Company Home
protected StoreRef companyHomeStore;
@@ -281,6 +283,15 @@ public class JBPMEngine extends AlfrescoBpmEngine implements WorkflowEngine
this.unprotectedSearchService = unprotectedSearchService;
}
/**
* Sets the Workflow Admin Service
*
* @param workflowAdminService
*/
public void setWorkflowAdminService(WorkflowAdminService workflowAdminService)
{
this.workflowAdminService = workflowAdminService;
}
//
// Workflow Definition...
@@ -402,6 +413,8 @@ public class JBPMEngine extends AlfrescoBpmEngine implements WorkflowEngine
*/
@SuppressWarnings("unchecked")
public List<WorkflowDefinition> getDefinitions()
{
if (workflowAdminService.isJBPMWorkflowDefinitionsVisible())
{
try
{
@@ -441,6 +454,11 @@ public class JBPMEngine extends AlfrescoBpmEngine implements WorkflowEngine
throw new WorkflowException(msg, e);
}
}
else
{
return Collections.<WorkflowDefinition>emptyList();
}
}
/*
* (non-Javadoc)
@@ -450,6 +468,8 @@ public class JBPMEngine extends AlfrescoBpmEngine implements WorkflowEngine
*/
@SuppressWarnings("unchecked")
public List<WorkflowDefinition> getAllDefinitions()
{
if (workflowAdminService.isJBPMWorkflowDefinitionsVisible())
{
try
{
@@ -489,6 +509,11 @@ public class JBPMEngine extends AlfrescoBpmEngine implements WorkflowEngine
throw new WorkflowException(msg, e);
}
}
else
{
return Collections.<WorkflowDefinition>emptyList();
}
}
/*
* (non-Javadoc)

View File

@@ -32,11 +32,13 @@ import org.alfresco.repo.content.MimetypeMap;
import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.repo.workflow.BPMEngineRegistry;
import org.alfresco.repo.workflow.TaskComponent;
import org.alfresco.repo.workflow.WorkflowAdminServiceImpl;
import org.alfresco.repo.workflow.WorkflowComponent;
import org.alfresco.repo.workflow.WorkflowModel;
import org.alfresco.repo.workflow.WorkflowPackageComponent;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.security.PersonService;
import org.alfresco.service.cmr.workflow.WorkflowAdminService;
import org.alfresco.service.cmr.workflow.WorkflowDefinition;
import org.alfresco.service.cmr.workflow.WorkflowDeployment;
import org.alfresco.service.cmr.workflow.WorkflowException;
@@ -68,6 +70,7 @@ public class JBPMEngineTest extends BaseAlfrescoSpringTest
private WorkflowPackageComponent packageComponent;
private PersonService personService;
private WorkflowDefinition testWorkflowDef;
private WorkflowAdminServiceImpl workflowAdminService;
private NodeRef person1;
private NodeRef person2;
private NodeRef person3;
@@ -88,6 +91,10 @@ public class JBPMEngineTest extends BaseAlfrescoSpringTest
taskComponent = registry.getTaskComponent(JBPMEngine.ENGINE_ID);
packageComponent = (WorkflowPackageComponent)applicationContext.getBean("workflowPackageImpl");
// for the purposes of the tests make sure JBPM workflow definitions are visible
this.workflowAdminService = (WorkflowAdminServiceImpl) applicationContext.getBean("workflowAdminService");
this.workflowAdminService.setJBPMWorkflowDefinitionsVisible(true);
// deploy test process messages
I18NUtil.registerResourceBundle("jbpmresources/test-messages");
@@ -560,6 +567,31 @@ public class JBPMEngineTest extends BaseAlfrescoSpringTest
assertNotNull(updatedTask);
}
public void testWorkflowDefinitionVisibility()
{
// retrieve workflow definitions
List<WorkflowDefinition> defs = workflowComponent.getDefinitions();
List<WorkflowDefinition> allDefs = workflowComponent.getAllDefinitions();
// make sure both lists are populated (only if the JBPM engine is enabled)
if (workflowAdminService.isEngineEnabled(JBPMEngine.ENGINE_ID))
{
assertFalse(defs.isEmpty());
assertFalse(allDefs.isEmpty());
}
// turn off workflow definition visibility
this.workflowAdminService.setJBPMWorkflowDefinitionsVisible(false);
// retrieve workflow definitions again
defs = workflowComponent.getDefinitions();
allDefs = workflowComponent.getAllDefinitions();
// ensure the list of workflow definitions are empty
assertTrue(defs.isEmpty());
assertTrue(allDefs.isEmpty());
}
// public void testAssignTaskVariablesWithScript() throws Exception
// {
// WorkflowDefinition definition = workflowComponent.getDefinitionByName("jbpm$testwf:testTaskVarScriptAssign");

View File

@@ -34,4 +34,15 @@ public interface WorkflowAdminService
* @return true if the engine id is valid and is enabled
*/
public boolean isEngineEnabled(String engineId);
/**
* Determines whether the JBPM workflow definitions are visible
* when the JBPM engine is enabled.
*
* NOTE: Workflow definitions can always be retrieved directly
* i.e. via name or id
*
* @return true if the definitions are visible
*/
public boolean isJBPMWorkflowDefinitionsVisible();
}