All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.camunda.bpm.engine.repository.DeploymentHandler Maven / Gradle / Ivy

There is a newer version: 7.22.0-alpha5
Show newest version
/*
 * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH
 * under one or more contributor license agreements. See the NOTICE file
 * distributed with this work for additional information regarding copyright
 * ownership. Camunda licenses this file to you under the Apache License,
 * Version 2.0; you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.camunda.bpm.engine.repository;

import java.util.Set;

/**
 * 

The {@link DeploymentHandler} interface should be implemented when there is a need to * define a custom behavior for determining what Resources should be added to a new Deployment.

* *

The class that implements this interface must provide a Process Engine parameter in it's * constructor. Custom implementations of this interface should be coupled with an implementation * of the {@link DeploymentHandlerFactory} interface, which can then be wired to the Process Engine * through the * {@link org.camunda.bpm.engine.impl.cfg.ProcessEngineConfigurationImpl#setDeploymentHandlerFactory(DeploymentHandlerFactory)} * method.

* *

See {@link org.camunda.bpm.engine.impl.repository.DefaultDeploymentHandler} for the default * behavior of the deployment process.

*/ public interface DeploymentHandler { /** *

This method is called in the first stage of the deployment process. It determines if there * is a difference between a {@link Resource} that is included in the set of resources provided * for deployment, and a Resource of the same name, already deployed to the Process Engine * with a previous Deployment. The method will be called for every (new, existing) Resource * pair. If a Resource of the same name doesn't exist in the Process Engine database, the new * Resource is deployed by default and this method is not called.

* *

An implementation should define the comparison criteria for the two provided * Resources. For the default comparison criteria, see * {@link org.camunda.bpm.engine.impl.repository.DefaultDeploymentHandler#shouldDeployResource(Resource, Resource)}.

* *

The output of this method (Boolean) will determine if newResource is * included in the list of Resources to be deployed (true), or not (false).

* * @param newResource is a resource that is part of the new Deployment. * @param existingResource is the most recently deployed resource that has the same resource name. * @return true, if the new Resource satisfies the comparison criteria, or * false if not. */ boolean shouldDeployResource(Resource newResource, Resource existingResource); /** *

This method is called in the second stage of the deployment process, when the previously * called {@link #shouldDeployResource(Resource, Resource)} method determines that none of the * provided resources for deployment satisfy the comparison criteria, i.e. there are no new * Resources to deploy. This method then determines a {@link Deployment} already present in the * Process Engine database that is a duplicate of the new Deployment.

* *

An implementation should determine what defines a duplicate Deployment.

* *

The returned Deployment ID (String) will be used to retrieve the corresponding * Deployment from the Process Engine database. This Deployment will then be registered * with the JobExecutor and the Process Application (if a Process Application Deployment is * performed). Furthermore, any Process Definitions that this Deployment contains will be * scheduled for activation, if a Process Definition Activation Date was set.

* * @param candidateDeployment a wrapper for the set of Resources provided for deployment and the * name under which they should have been deployed. At this stage, * it should be assumed that all of the Resources of this set didn't * satisfy the comparison criteria and will not be deployed. * @return the Deployment ID of the Deployment determined to be a duplicate of the data * provided by the candidateDeployment. */ String determineDuplicateDeployment(CandidateDeployment candidateDeployment); /** *

This method is called in the last stage of the deployment process, if a Process Application * deployment is performed. An additional condition is that the * {@link ProcessApplicationDeploymentBuilder#resumePreviousVersions()} flag of the Process * Application Deployment Builder is set, and * {@link ProcessApplicationDeploymentBuilder#resumePreviousVersionsBy(String)} ()} is set to the * default, {@link ResumePreviousBy#RESUME_BY_PROCESS_DEFINITION_KEY} value.

* *

The implementation of this method determines a {@link Set} of Deployment IDs of Deployments * already present in the Process Engine database. These deployments will then be registered * with the Process Application, so that any Java classes that the Process Application provides * can be utilised by the Process Definitions of the Deployments.

* * @param processDefinitionKeys are the Process Definition Keys of a subset of Process Resources * provided for deployment. The subset includes Process Definition * Keys from: *
    *
  • Processes from Resources that will not be deployed to the * Process Engine database due to the outcome of the * {@link #shouldDeployResource(Resource, Resource)} method.
  • *
  • Processes from Resources that will be deployed to the Process * Engine database, that update an existing Process Definition, * i.e. there is a Process Definition with the same key present * in the Process Engine database.
  • *
* It should be noted that, if {@link #shouldDeployResource(Resource, Resource)} * determines that all of the provided resources should be deployed * to the database, and there are no Process Definitions with the * same key already present in the database (i.e. the Process * Resources are completely new), this method will not be called. * * @return a {@link Set} of deployment IDs of Deployments already present in the Process Engine * database, that should be resumed (registered with the * {@link org.camunda.bpm.engine.impl.jobexecutor.JobExecutor} and registered with the newly * deployed Process Application). */ Set determineDeploymentsToResumeByProcessDefinitionKey(String[] processDefinitionKeys); /** *

This method is called in the last stage of the deployment process, if a Process Application * deployment is performed. An additional condition is that the * {@link ProcessApplicationDeploymentBuilder#resumePreviousVersions()} flag of the Process * Application Deployment Builder is set, and * {@link ProcessApplicationDeploymentBuilder#resumePreviousVersionsBy(String)} ()} is set to the * {@link ResumePreviousBy#RESUME_BY_DEPLOYMENT_NAME} value.

* *

The implementation of this method should determine a set of Deployment IDs of Deployments * with the same name, that are already present in the Process Engine database.

* * @param candidateDeployment a wrapper for the set of resources that were provided for * deployment and the name that should be used for this deployment. * This information can be used to find any Deployments of the same * name already present in the Process Engine database. The set of * Resources can then be used, if needed, to filter out the resulting * Deployments according to a given criteria. * @return a {@link Set} of deployment IDs of Deployments already present in the Process Engine * database, that should be resumed (registered with the * {@link org.camunda.bpm.engine.impl.jobexecutor.JobExecutor} and registered with the newly * deployed Process Application). */ Set determineDeploymentsToResumeByDeploymentName(CandidateDeployment candidateDeployment); }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy