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