class SoarSr::JUDDIProvider

Constants

MAX_THREADS

Attributes

broker[R]
cache[R]
cache_freshness[R]
urns[R]

Public Class Methods

new(urns, broker, cache_freshness) click to toggle source
# File lib/soar_sr/juddi_provider.rb, line 13
def initialize(urns, broker, cache_freshness)
  @urns = urns
  @broker = broker
  @cache_freshness = cache_freshness
  @cache = Persistent::Cache.new("uddi-broker", cache_freshness, Persistent::Cache::STORAGE_RAM)
end

Public Instance Methods

add_service_uri(service, uri) click to toggle source
# File lib/soar_sr/juddi_provider.rb, line 59
def add_service_uri(service, uri)
  result = remove_service_uri(service, uri)
  result = save_service_uri(service, uri) if result['status'] == 'success'
  result
end
assign_service_component_to_business(name, business_key = @urns['company']) click to toggle source
# File lib/soar_sr/juddi_provider.rb, line 27
def assign_service_component_to_business(name, business_key = @urns['company'])
  @broker.authorize
  result = get_service_component(name)
  service = result['data']
  @broker.save_service_element(service['name'], service['description'], service['definition'], @urns['service-components'], business_key)
end
assign_service_to_business(name, business_key = @urns['company']) click to toggle source
# File lib/soar_sr/juddi_provider.rb, line 20
def assign_service_to_business(name, business_key = @urns['company'])
  @broker.authorize
  result = get_service(name)
  service = result['data']
  @broker.save_service_element(service['name'], service['description'], service['definition'], @urns['services'], business_key)
end
delete_business(key) click to toggle source
# File lib/soar_sr/juddi_provider.rb, line 140
def delete_business(key)
  @broker.authorize
  @broker.delete_business(key)
end
delete_service(name) click to toggle source
# File lib/soar_sr/juddi_provider.rb, line 46
def delete_service(name)
  @broker.authorize
  @broker.delete_service_element(name, @urns['services'])
end
delete_service_component(name) click to toggle source
# File lib/soar_sr/juddi_provider.rb, line 92
def delete_service_component(name)
  @broker.authorize
  @broker.delete_service_element(name, @urns['service-components'])
end
find_businesses(pattern = nil) click to toggle source
# File lib/soar_sr/juddi_provider.rb, line 132
def find_businesses(pattern = nil)
  pattern = pattern.nil? ? '%' : "%#{pattern}%"
  key = "find_businesses:#{pattern}"
  lookup_and_cache(key) do
    @broker.find_business(pattern)
  end
end
find_service_component_uri(service_component) click to toggle source
# File lib/soar_sr/juddi_provider.rb, line 113
def find_service_component_uri(service_component)
  key = "find_service_component_uri:#{service_component}"
  lookup_and_cache(key) do
    @broker.find_element_bindings(service_component, @urns['service-components'])
  end
end
find_service_components(pattern = nil) click to toggle source
# File lib/soar_sr/juddi_provider.rb, line 97
def find_service_components(pattern = nil)
  pattern = pattern.nil? ? '%' : "%#{pattern}%"
  key = "find_service_components:#{pattern}"
  lookup_and_cache(key) do
    @broker.find_service_components(pattern)
  end
end
find_services(pattern = nil) click to toggle source
# File lib/soar_sr/juddi_provider.rb, line 51
def find_services(pattern = nil)
  pattern = pattern.nil? ? '%' : "%#{pattern}%"
  key = "find_services:#{pattern}"
  lookup_and_cache(key) do
    @broker.find_services(pattern)
  end
end
get_business(business_key) click to toggle source
# File lib/soar_sr/juddi_provider.rb, line 125
def get_business(business_key)
  key = "get_business:#{business_key}"
  lookup_and_cache(key) do
    @broker.get_business(business_key)
  end
end
get_service(name) click to toggle source
# File lib/soar_sr/juddi_provider.rb, line 34
def get_service(name)
  key = "get_service:#{name}"
  lookup_and_cache(key) do
    @broker.get_service_element(name, @urns['services'])
  end
end
get_service_component(name) click to toggle source
# File lib/soar_sr/juddi_provider.rb, line 80
def get_service_component(name)
  key = "get_service_component:#{name}"
  lookup_and_cache(key) do
    @broker.get_service_element(name, @urns['service-components'])
  end
end
remove_service_uri(service, uri) click to toggle source
# File lib/soar_sr/juddi_provider.rb, line 65
def remove_service_uri(service, uri)
  @broker.authorize
  result = service_uris(service)
  existing_id = has_existing_binding?(result['data']['bindings'], uri) if has_bindings?(result)
  result = @broker.delete_binding(existing_id) if existing_id
  result
end
save_business(key, name, description = nil, contacts = nil) click to toggle source
# File lib/soar_sr/juddi_provider.rb, line 120
def save_business(key, name, description = nil, contacts = nil)
  @broker.authorize
  @broker.save_business(key, name, description, contacts)
end
save_service(name, description = nil, definition = nil) click to toggle source
# File lib/soar_sr/juddi_provider.rb, line 41
def save_service(name, description = nil, definition = nil)
  @broker.authorize
  @broker.save_service_element(name, description.is_a?(Array) ? description : [description], definition, @urns['services'], @urns['company'])
end
save_service_component(name, description = nil, definition = nil) click to toggle source
# File lib/soar_sr/juddi_provider.rb, line 87
def save_service_component(name, description = nil, definition = nil)
  @broker.authorize
  @broker.save_service_element(name, description.is_a?(Array) ? description : [description], definition, @urns['service-components'], @urns['company'])
end
save_service_component_uri(service_component, uri) click to toggle source
# File lib/soar_sr/juddi_provider.rb, line 105
def save_service_component_uri(service_component, uri)
  @broker.authorize
  result = @broker.find_element_bindings(service_component, @urns['service-components'])
  # only one binding for service components
  delete_existing_bindings(result['data']['bindings']) if has_bindings?(result)
  @broker.save_element_bindings(service_component, [uri], @urns['service-components'], "service component")
end
service_uris(service) click to toggle source
# File lib/soar_sr/juddi_provider.rb, line 73
def service_uris(service)
  key = "service_uris:#{service}"
  lookup_and_cache(key) do
    @broker.find_element_bindings(service, @urns['services'])
  end
end

Private Instance Methods

delete_existing_bindings(bindings) click to toggle source
# File lib/soar_sr/juddi_provider.rb, line 185
def delete_existing_bindings(bindings)
  bindings.each do |binding, detail|
    @broker.delete_binding(binding)
  end
end
has_bindings?(result) click to toggle source
# File lib/soar_sr/juddi_provider.rb, line 191
def has_bindings?(result)
  result and result['data'] and result['data']['bindings'] and (result['data']['bindings'].size > 0)
end
has_existing_binding?(bindings, uri) click to toggle source
# File lib/soar_sr/juddi_provider.rb, line 195
def has_existing_binding?(bindings, uri)
  bindings.each do |binding, detail|
    return binding if detail['access_point'] == uri
  end
  nil
end
lookup_and_cache(key, &block) click to toggle source
# File lib/soar_sr/juddi_provider.rb, line 147
def lookup_and_cache(key, &block)
  cached, refresh = lookup_and_refresh(key)
  refresh_entry(key) do
    block.call
  end if refresh
  return cached if cached
  value = block.call
  @cache[key] = value
  value
end
lookup_and_refresh(key) click to toggle source
# File lib/soar_sr/juddi_provider.rb, line 174
def lookup_and_refresh(key)
  timestamp = @cache.timestamp?(key)
  halflife = @cache_freshness / 2
  refresh = false
  if (halflife > 0) and (timestamp)
    refresh = (Time.now - timestamp) > halflife
  end

  return @cache[key], refresh
end
refresh_entry(key, &block) click to toggle source
# File lib/soar_sr/juddi_provider.rb, line 158
def refresh_entry(key, &block)
  return if Thread.list.size > MAX_THREADS
  Thread.new do
    begin
      # thread-safety not important. no mutexes required
      # we do not mind service stale cache values on
      # race conditions, since we refresh on half-life
      # of freshness on a best-effort basis
      value = block.call
      @cache[key] = value
    rescue => ex
      # do not update
    end
  end
end
save_service_uri(service, uri) click to toggle source
# File lib/soar_sr/juddi_provider.rb, line 202
def save_service_uri(service, uri)
  @broker.authorize
  @broker.save_element_bindings(service, [uri], @urns['services'], "service uri") 
end