/**
   * Performs the actual work of stopping the service. Should be called by {@link
   * #stop(org.jboss.msc.service.StopContext)} asynchronously from the MSC thread that invoked stop.
   */
  protected synchronized void stopService() {
    if (deploymentMD != null) {

      if (deploymentMD.getResourceAdapterKey() != null) {
        try {
          raRepository.getValue().unregisterResourceAdapter(deploymentMD.getResourceAdapterKey());
        } catch (org.jboss.jca.core.spi.rar.NotFoundException nfe) {
          ConnectorLogger.ROOT_LOGGER.exceptionDuringUnregistering(nfe);
        }
      }

      if (deploymentMD.getResourceAdapter() != null) {
        deploymentMD.getResourceAdapter().stop();

        BootstrapContextCoordinator.getInstance()
            .removeBootstrapContext(deploymentMD.getBootstrapContextIdentifier());
      }

      if (deploymentMD.getDataSources() != null && managementRepositoryValue.getValue() != null) {
        for (org.jboss.jca.core.api.management.DataSource mgtDs : deploymentMD.getDataSources()) {
          managementRepositoryValue.getValue().getDataSources().remove(mgtDs);
        }
      }

      if (deploymentMD.getConnectionManagers() != null) {
        for (ConnectionManager cm : deploymentMD.getConnectionManagers()) {
          cm.shutdown();
        }
      }
    }

    sqlDataSource = null;
  }