public void install(
      TierInstance tierInstance,
      ClaudiaData claudiaData,
      String envName,
      String vdc,
      ProductRelease productRelease,
      Set<Attribute> attributes,
      Task task,
      String callback)
      throws EntityNotFoundException {

    EnvironmentInstance environmentInstance = environmentInstanceManager.load(vdc, envName);

    try {
      ProductInstance productInstance =
          productInstanceManager.install(
              tierInstance, claudiaData, environmentInstance, productRelease);
      log.info(
          "Product "
              + productRelease.getProduct()
              + '-'
              + productRelease.getVersion()
              + " installed successfully");
    } catch (InvalidProductInstanceRequestException e) {
      String errorMsg = e.getMessage();
      ProductInstance instance = getInstalledProduct(productRelease, tierInstance.getVM());
      if (instance != null) {
        updateErrorTask(instance, task, errorMsg, e);
      } else {
        updateErrorTask(task, errorMsg, e);
      }
    } catch (Exception e) {
      String errorMsg =
          "The product "
              + productRelease.getProduct()
              + "-"
              + productRelease.getVersion()
              + " can not be installed in"
              + tierInstance.getVM();
      ProductInstance instance = getInstalledProduct(productRelease, tierInstance.getVM());
      if (instance != null) {
        updateErrorTask(instance, task, errorMsg, e);
      } else {
        updateErrorTask(task, errorMsg, e);
      }
    } finally {
      notifyTask(callback, task);
    }
  }