diff --git a/config/alfresco/jbpm-context.xml b/config/alfresco/jbpm-context.xml
index 96287e2982..950fbf23b1 100644
--- a/config/alfresco/jbpm-context.xml
+++ b/config/alfresco/jbpm-context.xml
@@ -25,6 +25,7 @@
+
diff --git a/config/alfresco/repository.properties b/config/alfresco/repository.properties
index b8a96d5e56..a713b1eaba 100644
--- a/config/alfresco/repository.properties
+++ b/config/alfresco/repository.properties
@@ -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
diff --git a/config/alfresco/workflow-context.xml b/config/alfresco/workflow-context.xml
index f596c6f4ce..a468c0454e 100644
--- a/config/alfresco/workflow-context.xml
+++ b/config/alfresco/workflow-context.xml
@@ -68,12 +68,15 @@
-
- ${system.workflow.engine.jbpm.enabled}
-
${system.workflow.engine.activiti.enabled}
+
+ ${system.workflow.engine.jbpm.enabled}
+
+
+ ${system.workflow.jbpm.definitions.visible}
+
diff --git a/source/java/org/alfresco/repo/invitation/AbstractInvitationServiceImplTest.java b/source/java/org/alfresco/repo/invitation/AbstractInvitationServiceImplTest.java
index 508334d8f0..b7d8b90eed 100644
--- a/source/java/org/alfresco/repo/invitation/AbstractInvitationServiceImplTest.java
+++ b/source/java/org/alfresco/repo/invitation/AbstractInvitationServiceImplTest.java
@@ -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);
diff --git a/source/java/org/alfresco/repo/invitation/ActivitiInvitationServiceImplTests.java b/source/java/org/alfresco/repo/invitation/ActivitiInvitationServiceImplTests.java
index 289efe99aa..1b3da836c5 100644
--- a/source/java/org/alfresco/repo/invitation/ActivitiInvitationServiceImplTests.java
+++ b/source/java/org/alfresco/repo/invitation/ActivitiInvitationServiceImplTests.java
@@ -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);
}
}
diff --git a/source/java/org/alfresco/repo/invitation/JbpmInvitationServiceImplTests.java b/source/java/org/alfresco/repo/invitation/JbpmInvitationServiceImplTests.java
index 3710a11d93..ea5eab3b13 100644
--- a/source/java/org/alfresco/repo/invitation/JbpmInvitationServiceImplTests.java
+++ b/source/java/org/alfresco/repo/invitation/JbpmInvitationServiceImplTests.java
@@ -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);
}
}
diff --git a/source/java/org/alfresco/repo/workflow/AbstractWorkflowServiceIntegrationTest.java b/source/java/org/alfresco/repo/workflow/AbstractWorkflowServiceIntegrationTest.java
index d8bbd2d819..7b45c20f00 100644
--- a/source/java/org/alfresco/repo/workflow/AbstractWorkflowServiceIntegrationTest.java
+++ b/source/java/org/alfresco/repo/workflow/AbstractWorkflowServiceIntegrationTest.java
@@ -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);
diff --git a/source/java/org/alfresco/repo/workflow/WorkflowAdminServiceImpl.java b/source/java/org/alfresco/repo/workflow/WorkflowAdminServiceImpl.java
index 7a95df5766..0154981531 100644
--- a/source/java/org/alfresco/repo/workflow/WorkflowAdminServiceImpl.java
+++ b/source/java/org/alfresco/repo/workflow/WorkflowAdminServiceImpl.java
@@ -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)
{
diff --git a/source/java/org/alfresco/repo/workflow/jbpm/JBPMEngine.java b/source/java/org/alfresco/repo/workflow/jbpm/JBPMEngine.java
index db9bf05e77..46ebc78416 100644
--- a/source/java/org/alfresco/repo/workflow/jbpm/JBPMEngine.java
+++ b/source/java/org/alfresco/repo/workflow/jbpm/JBPMEngine.java
@@ -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...
@@ -403,42 +414,49 @@ public class JBPMEngine extends AlfrescoBpmEngine implements WorkflowEngine
@SuppressWarnings("unchecked")
public List getDefinitions()
{
- try
+ if (workflowAdminService.isJBPMWorkflowDefinitionsVisible())
{
- return (List)jbpmTemplate.execute(new JbpmCallback()
+ try
{
- public Object doInJbpm(JbpmContext context)
+ return (List)jbpmTemplate.execute(new JbpmCallback()
{
- GraphSession graphSession = context.getGraphSession();
- List processDefs = graphSession.findLatestProcessDefinitions();
- List workflowDefs = new ArrayList(processDefs.size());
- for (ProcessDefinition processDef : processDefs)
- {
- if (tenantService.isEnabled())
- {
- try
- {
- tenantService.checkDomain(processDef.getName());
+ public Object doInJbpm(JbpmContext context)
+ {
+ GraphSession graphSession = context.getGraphSession();
+ List processDefs = graphSession.findLatestProcessDefinitions();
+ List workflowDefs = new ArrayList(processDefs.size());
+ for (ProcessDefinition processDef : processDefs)
+ {
+ if (tenantService.isEnabled())
+ {
+ try
+ {
+ tenantService.checkDomain(processDef.getName());
+ }
+ catch (RuntimeException re)
+ {
+ // deliberately skip this one - due to domain
+ // mismatch
+ continue;
+ }
}
- catch (RuntimeException re)
- {
- // deliberately skip this one - due to domain
- // mismatch
- continue;
- }
+
+ WorkflowDefinition workflowDef = createWorkflowDefinition(processDef);
+ workflowDefs.add(workflowDef);
}
-
- WorkflowDefinition workflowDef = createWorkflowDefinition(processDef);
- workflowDefs.add(workflowDef);
+ return workflowDefs;
}
- return workflowDefs;
- }
- });
+ });
+ }
+ catch (JbpmException e)
+ {
+ String msg = messageService.getMessage(ERR_GET_WORKFLOW_DEF);
+ throw new WorkflowException(msg, e);
+ }
}
- catch(JbpmException e)
+ else
{
- String msg = messageService.getMessage(ERR_GET_WORKFLOW_DEF);
- throw new WorkflowException(msg, e);
+ return Collections.emptyList();
}
}
@@ -451,42 +469,49 @@ public class JBPMEngine extends AlfrescoBpmEngine implements WorkflowEngine
@SuppressWarnings("unchecked")
public List getAllDefinitions()
{
- try
+ if (workflowAdminService.isJBPMWorkflowDefinitionsVisible())
{
- return (List)jbpmTemplate.execute(new JbpmCallback()
+ try
{
- public Object doInJbpm(JbpmContext context)
+ return (List)jbpmTemplate.execute(new JbpmCallback()
{
- GraphSession graphSession = context.getGraphSession();
- List processDefs = graphSession.findAllProcessDefinitions();
- List workflowDefs = new ArrayList(processDefs.size());
- for (ProcessDefinition processDef : processDefs)
+ public Object doInJbpm(JbpmContext context)
{
- if (tenantService.isEnabled())
- {
- try
- {
- tenantService.checkDomain(processDef.getName());
+ GraphSession graphSession = context.getGraphSession();
+ List processDefs = graphSession.findAllProcessDefinitions();
+ List workflowDefs = new ArrayList(processDefs.size());
+ for (ProcessDefinition processDef : processDefs)
+ {
+ if (tenantService.isEnabled())
+ {
+ try
+ {
+ tenantService.checkDomain(processDef.getName());
+ }
+ catch (RuntimeException re)
+ {
+ // deliberately skip this one - due to domain
+ // mismatch
+ continue;
+ }
}
- catch (RuntimeException re)
- {
- // deliberately skip this one - due to domain
- // mismatch
- continue;
- }
+
+ WorkflowDefinition workflowDef = createWorkflowDefinition(processDef);
+ workflowDefs.add(workflowDef);
}
-
- WorkflowDefinition workflowDef = createWorkflowDefinition(processDef);
- workflowDefs.add(workflowDef);
+ return workflowDefs;
}
- return workflowDefs;
- }
- });
+ });
+ }
+ catch (JbpmException e)
+ {
+ String msg = messageService.getMessage(ERR_GET_WORKFLOW_DEF);
+ throw new WorkflowException(msg, e);
+ }
}
- catch(JbpmException e)
+ else
{
- String msg = messageService.getMessage(ERR_GET_WORKFLOW_DEF);
- throw new WorkflowException(msg, e);
+ return Collections.emptyList();
}
}
diff --git a/source/java/org/alfresco/repo/workflow/jbpm/JBPMEngineTest.java b/source/java/org/alfresco/repo/workflow/jbpm/JBPMEngineTest.java
index ff1df20906..18675ea3a2 100644
--- a/source/java/org/alfresco/repo/workflow/jbpm/JBPMEngineTest.java
+++ b/source/java/org/alfresco/repo/workflow/jbpm/JBPMEngineTest.java
@@ -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;
@@ -86,7 +89,11 @@ public class JBPMEngineTest extends BaseAlfrescoSpringTest
BPMEngineRegistry registry = (BPMEngineRegistry)applicationContext.getBean("bpm_engineRegistry");
workflowComponent = registry.getWorkflowComponent(JBPMEngine.ENGINE_ID);
taskComponent = registry.getTaskComponent(JBPMEngine.ENGINE_ID);
- packageComponent = (WorkflowPackageComponent)applicationContext.getBean("workflowPackageImpl");
+ 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");
@@ -558,7 +565,32 @@ public class JBPMEngineTest extends BaseAlfrescoSpringTest
assertEquals(WorkflowTaskState.IN_PROGRESS, tasks1.get(0).getState());
WorkflowTask updatedTask = taskComponent.endTask(tasks1.get(0).getId(), null);
assertNotNull(updatedTask);
- }
+ }
+
+ public void testWorkflowDefinitionVisibility()
+ {
+ // retrieve workflow definitions
+ List defs = workflowComponent.getDefinitions();
+ List 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
// {
diff --git a/source/java/org/alfresco/service/cmr/workflow/WorkflowAdminService.java b/source/java/org/alfresco/service/cmr/workflow/WorkflowAdminService.java
index cf7cacd071..96a5f67fdd 100644
--- a/source/java/org/alfresco/service/cmr/workflow/WorkflowAdminService.java
+++ b/source/java/org/alfresco/service/cmr/workflow/WorkflowAdminService.java
@@ -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();
}