# File lib/openshift-origin-controller/app/models/application.rb, line 1251
  def remove_dependency(dep)
    reply = ResultIO.new
    self.class.notify_observers(:before_remove_dependency, {:application => self, :dependency => dep, :reply => reply})
    self.embedded = {} unless self.embedded

    raise OpenShift::UserException.new("#{dep} not embedded in '#{@name}', try adding it first", 135) unless self.embedded.include? dep
    raise OpenShift::UserException.new("#{dep} is not allowed to be removed from '#{@name}'. It is a required dependency for a scalable application.", 137) if (self.scalable and self.proxy_cartridge==dep)
    remove_from_requires_feature(dep)
    elaborate_descriptor { |removed_component_instances|
      #remove unused components
      removed_component_instances.each do |comp_inst_name|
        comp_inst = self.comp_instance_map[comp_inst_name]
        next if comp_inst.parent_cart_name == self.name
        group_inst = self.group_instance_map[comp_inst.group_instance_name]
        s,f = run_on_gears(group_inst.gears, reply, false) do |gear, r|
          unless gear.configured_components.length == 1 && gear.configured_components.first == comp_inst.name
            reply.append gear.deconfigure(comp_inst)
            process_cartridge_commands(r)
          end
        end

        f.each do |failed_data|
          Rails.logger.debug("Failed to deconfigure cartridge #{comp_inst.parent_cart_name} on gear #{failed_data[:gear].server_identity}:#{failed_data[:gear].uuid}")
          Rails.logger.debug("Exception #{failed_data[:exception].message}")
          Rails.logger.debug("#{failed_data[:exception].backtrace.inspect}")
        end

        run_on_gears(group_inst.gears, reply, false) do |gear, r|
          if gear.configured_components.empty? || (gear.configured_components.length == 1 && gear.configured_components.first == comp_inst.name)
            reply.append group_inst.remove_gear(gear)
          end
        end
      end
    }
    self.save
    self.class.notify_observers(:after_remove_dependency, {:application => self, :dependency => dep, :reply => reply})
    reply
  end