@Override
  protected void validateUpdatePopulation(
      SimpleDataSourceDescriptor bean, HttpServletRequest req, User user, URIParser uriParser)
      throws ValidationException, SQLException, Exception {

    if (bean.isEnabled()) {
      if (bean.getType().equals(DataSourceType.ContainerManaged)
          && !ContextUtils.isBound(bean.getUrl())) {
        throw new ValidationException(new ValidationError("nameNotBound"));
      } else if (!ReflectionUtils.isAvailable(bean.getDriver())) {
        throw new ValidationException(new ValidationError("driverNotAvailable"));
      }
    }
  }
  @Override
  protected ForegroundModuleResponse beanUpdated(
      SimpleDataSourceDescriptor bean,
      HttpServletRequest req,
      HttpServletResponse res,
      User user,
      URIParser uriParser)
      throws Exception {

    if (bean.isEnabled()) {
      this.dataSourceCache.update(bean);
    } else {
      this.dataSourceCache.stop(bean.getDataSourceID());
    }

    return super.beanUpdated(bean, req, res, user, uriParser);
  }
  @Override
  protected List<Breadcrumb> getUpdateBreadcrumbs(
      SimpleDataSourceDescriptor bean, HttpServletRequest req, User user, URIParser uriParser) {

    return CollectionUtils.getList(
        this.callback.getDefaultBreadcrumb(),
        new Breadcrumb(
            callback.getUpdateDataSourceBreadcrumbText() + bean.getName(),
            callback.getUpdateDataSourceBreadcrumbText() + bean.getName(),
            uriParser.getFormattedURI(),
            URLType.RELATIVE_FROM_CONTEXTPATH));
  }
  @Override
  protected ForegroundModuleResponse beanDeleted(
      SimpleDataSourceDescriptor bean,
      HttpServletRequest req,
      HttpServletResponse res,
      User user,
      URIParser uriParser)
      throws Exception {

    this.dataSourceCache.delete(bean.getDataSourceID());

    return super.beanDeleted(bean, req, res, user, uriParser);
  }