indexing description: "[ The EGS_SPACE_PROXY is the primary interface that allows you to connect to the space and perform space operations. The EGS_SPACE_PROXY is used with the different space topologies and runtime modes in a transparent manner. You can use the EGS_SPACE_PROXY object with an embedded, remote, single, or clustered replicated or partitioned space. The basic space operations include the following: write - Writes an EGS_ENTRY into the space. read - Reads an EGS_ENTRY from the space that matches a given template. take - Removes an EGS_ENTRY from the space that matches the given template. update - Updates an EGS_ENTRY in the space. notify - Notifies a specified listener object, when an EGS_ENTRY entry that matches a given template is written/taken/updated/expires in the space. For more information see EGS_DATA_EVENT_SESSION. A space entry is any object that inherit the EGS_ENTRY An EGS_ENTRY object type is defined in gs.xml file (for more information on gs.xml see http://www.gigaspaces.com/wiki/x/NYHcAQ).
Before performing any space operation using a new EGS_ENTRY object type, the type must be published to the space by creating a snapshot of this type. In some operations (for example, read) an entry template should be provided. A template is an EGS_ENTRY object. Any field in the template that has a specific value is used to match entries with the same value. Any field that is not specified (and therefore has the default 'null' value) is used as a wildcard and will match any value. Note that gs.xml defines for each field its 'null' value. SqlQuery object is another way to specify a template. EGS_SPACE_PROXY includes appropriate methods that accept SqlQuery argument. The EGS_SPACE_PROXY supports single and batch space operations. Batch operations are used to optimize space operations with multiple objects and can boost the application performance when interacting with the space. The EGS_SPACE_PROXY supports EGS_TRANSACTION. All relevant space operations accept a EGS_TRANSACTION argument. A EGS_SPACE_PROXY is obtained using the EGS_SPACE_FINDER. @see EGS_SPACE_FINDER, EGS_ENTRY, EGS_TRANSACTION, EGS_TRANSACTION_MANAGER, EGS_DATA_EVENT_SESSION ]" legal: "See notice at end of class." status: "See notice at end of class." date: "$Date$" revision: "$Revision$" class EGS_SPACE_PROXY inherit EGS_EXTERNAL_CPP_OBJECT EGS_SHARED_EXCEPTION_HANDLER create make_from_external feature snapshot (template: EGS_ENTRY) is -- Enable the space to recognize a given type of EGS_ENTRY object. Before performing -- any space operation using a new EGS_ENTRY type (EGS_ENTRY derived-class), the type -- must be published to the space by creating a snapshot of a template of this type. -- -- @param template - template object require was_not_exception: not was_exception template_not_void: template /= Void do cpp_snapshot (exception_handler, object_ptr, template.object_ptr) end read (template: EGS_ENTRY; txn: EGS_TRANSACTION; timeout: INTEGER_64; modifiers: INTEGER): EGS_ENTRY is -- Read (according to the modifiers) any matching entry from the space, -- blocking until one exists. Return Void if the timeout expires. -- To read an entry a template is provided in order to find a matching entry. -- Any field in the template that has a specific value is used to match entries -- with the same value. Any field that is not specified (and therefore has the default 'null' value) -- is used as a wildcard and will match any value. -- -- @param template - template used for matching. -- Matching is done against template with null fields being wildcards ("match anything") -- other fields being values -- @param txn - The Transaction object, if any, under which to perform the operation. -- @param timeout - How much time (in milliseconds) the client is willing to wait for a -- proper matching entry. -- @param modifiers - Operation that provide the isolation level. -- -- @return A space entry that matches the given template, or Void if timeout expires and none is found. require was_not_exception: not was_exception template_not_void: template /= Void local res: POINTER txn_pointer: POINTER do if txn /= Void then txn_pointer := txn.object_ptr end res := cpp_read_entry (exception_handler, object_ptr, template.object_ptr, txn_pointer, timeout, modifiers) if res /= default_pointer then create Result.make_from_external (res) end end write (entry: EGS_ENTRY; txn: EGS_TRANSACTION; timeout: INTEGER_64; modifiers: INTEGER): EGS_LEASE is -- Writes an object to this space and returns its Lease. -- -- @param entry - object to be written. -- @param txn - Transaction object, if any, under which to perform the operation. -- @param lease - Requested lease time, in milliseconds. -- @param modifiers - Operation that provide the isolation level. -- -- @return The Lease for the written entry require was_not_exception: not was_exception entry_not_void: entry /= Void local res: POINTER txn_pointer: POINTER do if txn /= Void then txn_pointer := txn.object_ptr end res := cpp_write_entry (exception_handler, object_ptr, entry.object_ptr, txn_pointer, timeout, modifiers) if res /= default_pointer then create Result.make_from_external (res) cpp_delete_lease (res) end end take (template: EGS_ENTRY; txn: EGS_TRANSACTION; timeout: INTEGER_64): EGS_ENTRY is -- Take any matching entry from the space, blocking until one exists. Return -- Void if the timeout expires. -- -- @param template - template used for matching. -- @param txn - The Transaction object, if any, under which to perform the operation. -- @param timeout - How much time (in milliseconds) the client is willing to wait for a -- proper matching entry. -- -- @return A space entry that matches the given template, or Void if timeout expires -- and none is found. require was_not_exception: not was_exception template_not_void: template /= Void local res: POINTER txn_pointer: POINTER do if txn /= Void then txn_pointer := txn.object_ptr end res := cpp_take_entry (exception_handler, object_ptr, template.object_ptr, txn_pointer, timeout) if res /= default_pointer then create Result.make_from_external (res) end end update (entry: EGS_ENTRY; txn: EGS_TRANSACTION; lease: INTEGER_64; timeout: INTEGER_64; modifiers: INTEGER): EGS_ENTRY is -- Update an object in this space. -- An update can be performed, with these modifiers listed in UpdateModifiers: -- UPDATE_ONLY - pure update operation, -- UPDATE_OR_WRITE - writes if absent or updates existing, -- PARTIAL_UPDATE - updates only non-null fields. -- -- @param entry - object to be updated. -- @param txn - Transaction object, if any, under which to perform the operation. -- @param lease - Requested lease time, in milliseconds. -- @param timeout - How much time (in milliseconds) the client is willing to wait for a -- proper matching entry. -- @param modifiers - Operation modifiers. -- -- @return the previous value on success, otherwise Void require was_not_exception: not was_exception entry_not_void: entry /= Void local res: POINTER txn_pointer: POINTER do if txn /= Void then txn_pointer := txn.object_ptr end res := cpp_update_entry (exception_handler, object_ptr, entry.object_ptr, txn_pointer, lease, timeout, modifiers) if res /= default_pointer then create Result.make_from_external (res) end end write_multiple (entries: ARRAY[EGS_ENTRY]; txn: EGS_TRANSACTION; lease: INTEGER_64): ARRAY[EGS_LEASE] is -- Writes the specified entries to this space and return their Leases. -- -- @param entries - Array of EGS_ENTRY objects to write. -- @param txn - The Transaction object, if any, under which to perform the operation. -- @param lease - Requested lease time, in milliseconds. -- -- @return ARRAY of Leases for the written entries. require was_not_exception: not was_exception entries_valid: entries /= Void and then entries.count /= 0 local txn_pointer: POINTER entries_vector: POINTER res: POINTER do if txn /= Void then txn_pointer := txn.object_ptr end entries_vector := create_vector_from_entries_array (entries) res := cpp_write_multiple (exception_handler, object_ptr, entries_vector, txn_pointer, lease) cpp_delete_entries_vector (entries_vector); if res /= default_pointer then Result := create_array_from_lease_vector (res) cpp_delete_gs_lease_vector (res) end end read_multiple (template: EGS_ENTRY; txn: EGS_TRANSACTION; max_entries: INTEGER; modifiers: INTEGER): ARRAY[EGS_ENTRY] is -- Read any matching entries from the space. Matching is done as in -- read() without timeout (timeout = 0). Returns an array of matched entries. -- The amount of entries returned is limited by max_entries. Returns an empty array if no match was found. -- -- @param template - a template used for matching. -- Matching is done against template with null fields being wildcards ("match anything") -- other fields being values -- @param txn - The Transaction object, if any, under which to perform the operation. -- @param maxEntries - Maximum number of entries to be returned. -- @param modifiers - Operation that provide the isolation level. -- -- @return An array of all space entries that match the given template, limited by max_entries. -- The array is empty if no matching entry is found. require was_not_exception: not was_exception template_not_void: template /= Void local txn_pointer: POINTER res: POINTER do if txn /= Void then txn_pointer := txn.object_ptr end res := cpp_read_multiple (exception_handler, object_ptr, template.object_ptr, txn_pointer, max_entries, modifiers) if res /= default_pointer then Result := create_array_from_entries_vector (res) cpp_delete_gs_entries_vector (res); end end take_multiple (template: EGS_ENTRY; txn: EGS_TRANSACTION; max_entries: INTEGER): ARRAY[EGS_ENTRY] is -- Take any matching entries from the space. Matching is done as in -- take() without timeout (timeout = 0). Returns an array of matched entries. -- -- @param template - a template used for matching. -- Matching is done against template with null fields being wildcards ("match anything") -- other fields being values -- @param txn - The Transaction object, if any, under which to perform the operation. -- @param maxEntries - Maximum number of entries to be returned. -- -- @return An array of all space entries that match the given template, limited by max_entries. -- The array is empty if no matching entry is found. require was_not_exception: not was_exception template_not_void: template /= Void local txn_pointer: POINTER res: POINTER do if txn /= Void then txn_pointer := txn.object_ptr end res := cpp_take_multiple (exception_handler, object_ptr, template.object_ptr, txn_pointer, max_entries) if res /= default_pointer then Result := create_array_from_entries_vector (res) cpp_delete_gs_entries_vector (res); end end clear (template: EGS_ENTRY; txn: EGS_TRANSACTION) is -- Removes the entries that match the specified template from this space. -- If template is Void, all entries are removed. -- @param template - EGS_ENTRY template object -- @param txn - The Transaction object, if any, under which to perform the operation. require was_not_exception: not was_exception local txn_pointer: POINTER template_pointer: POINTER do if template /= Void then template_pointer := template.object_ptr end if txn /= Void then txn_pointer := txn.object_ptr end cpp_clear (exception_handler, object_ptr, template_pointer, txn_pointer) end create_local_transaction (lease_time: INTEGER_64): EGS_TRANSACTION is -- Create a Local Transaction. -- -- @param lease_time - The time period in milliseconds until the transaction is discarded. -- -- return New local transaction require was_not_exception: not was_exception local res: POINTER do res := cpp_create_local_transaction (exception_handler, object_ptr, lease_time) if res /= default_pointer then create Result.make_from_external (res) end end get_local_transaction_manager: EGS_TRANSACTION_MANAGER is -- Return a Local Transaction Manager through which a Local Transaction can be obtained. -- -- @return Local Transaction Manager require was_not_exception: not was_exception local res: POINTER do res := cpp_get_local_transaction_manager (exception_handler, object_ptr) if res /= default_pointer then create Result.make_from_external (res) end end get_distributed_transaction_manager (config: EGS_CONFIG): EGS_TRANSACTION_MANAGER is -- Return a Distributed Transaction Manager through which a distributed Transaction -- can be obtained. -- -- @param config - A EGS_CONFIG object that holds the properties relevant for -- the specific type of the Distributed Transaction Manager. -- -- @return Distributed Transaction Manager require was_not_exception: not was_exception config_not_void: config /= Void local res: POINTER do res := cpp_get_distributed_transaction_manager (exception_handler, object_ptr, config.object_ptr) if res /= default_pointer then create Result.make_from_external (res) end end clean is require was_not_exception: not was_exception do cpp_clean (exception_handler, object_ptr) end thread_detach is -- Free the memory allocated in the SpaceProxy for the current thread. -- Call this before the thread exits. do cpp_thread_detach (exception_handler, object_ptr) end feature {NONE} -- Implementation create_array_from_entries_vector (vector: POINTER): ARRAY[EGS_ENTRY] is -- require vector_not_null: vector /= default_pointer local entry_pointer: POINTER entry: EGS_ENTRY i, count: INTEGER do if vector /= default_pointer then count := cpp_get_gs_entry_vector_count (vector) create Result.make (1, count) from i := 0 until i >= count loop entry_pointer := cpp_get_gs_entry_vector_item (vector, i) create entry.make_from_external (entry_pointer) Result.put (entry, i+1) i := i + 1 end end end create_array_from_lease_vector (vector: POINTER): ARRAY[EGS_LEASE] is -- require vector_not_null: vector /= default_pointer local lease_pointer: POINTER lease: EGS_LEASE i, count: INTEGER do if vector /= default_pointer then count := cpp_get_gs_lease_vector_count (vector) create Result.make (1, count) from i := 0 until i >= count loop lease_pointer := cpp_get_gs_lease_vector_item (vector, i) create lease.make_from_external (lease_pointer) Result.put (lease, i+1) i := i + 1 end end end create_vector_from_entries_array (array: ARRAY[EGS_ENTRY]): POINTER is require array_not_void: array /= Void local i: INTEGER do Result := cpp_create_entries_vector from i := array.lower until i > array.upper loop cpp_add_to_entries_vector (Result, array.item (i).object_ptr) i := i + 1 end end feature {NONE} -- Utility externals cpp_create_entries_vector: POINTER is external "C++ inline use " alias "new std::vector" end cpp_add_to_entries_vector (obj_ptr: POINTER; entry: POINTER) is require obj_ptr_not_null: obj_ptr /= default_pointer entry_not_null: entry /= default_pointer external "C++ inline use " alias "((std::vector*)$obj_ptr)->push_back((OpenSpaces::IEntry*)$entry)" end cpp_delete_entries_vector (obj_ptr: POINTER) is require obj_ptr_not_null: obj_ptr /= default_pointer external "C++ inline use " alias "delete ((std::vector*)$obj_ptr)" end cpp_get_gs_lease_vector_count (vector: POINTER): INTEGER is require vector_not_null: vector /= default_pointer external "C++ inline use " alias "((EGS_LeaseVector*)$vector)->getSize()" end cpp_get_gs_entry_vector_count (vector: POINTER): INTEGER is require vector_not_null: vector /= default_pointer external "C++ inline use " alias "((EGS_EntryVector*)$vector)->getSize()" end cpp_get_gs_lease_vector_item (vector: POINTER; i: INTEGER): POINTER require vector_not_null: vector /= default_pointer external "C++ inline use " alias "((EGS_LeaseVector*)$vector)->item($i)" end cpp_get_gs_entry_vector_item (vector: POINTER; i: INTEGER): POINTER require vector_not_null: vector /= default_pointer external "C++ inline use " alias "((EGS_EntryVector*)$vector)->item($i)" end cpp_delete_lease (obj_ptr: POINTER) is require obj_ptr_not_null: obj_ptr /= default_pointer external "C++ inline use " alias "delete ((OpenSpaces::Lease*)$obj_ptr)" end feature {NONE} -- Current object specific externals cpp_delete (obj_ptr: POINTER) is external "C++ inline use " alias "[ delete ((OpenSpaces::SpaceProxyPtr*)$obj_ptr); ]" end cpp_delete_gs_entries_vector (obj_ptr: POINTER) is external "C++ inline use " alias "[ egs_delete_entries_vector((EGS_EntryVector*)$obj_ptr); ]" end cpp_delete_gs_lease_vector (obj_ptr: POINTER) is external "C++ inline use " alias "[ egs_delete_leases_vector((EGS_LeaseVector*)$obj_ptr); ]" end cpp_read_entry (eh: EGS_EXCEPTION_HANDLER; obj_ptr: POINTER; entry_template: POINTER; txn: POINTER; timeout: INTEGER_64; modifiers: INTEGER): POINTER is require eh_not_void: eh /= Void obj_ptr_not_null: obj_ptr /= default_pointer template_not_null: entry_template /= default_pointer external "C++ inline use " alias "[ try { return (*((OpenSpaces::SpaceProxyPtr*)$obj_ptr))->read(((OpenSpaces::IEntry*)$entry_template), ($txn != 0?(*((OpenSpaces::TransactionPtr*)$txn)):OpenSpaces::NULL_TX), $timeout, OpenSpaces::ReadModifiers($modifiers)); } catch(OpenSpaces::XAPException& e) { EGS_HANDLE_XAP_EXCEPTION($eh, e); return 0; } ]" end cpp_write_entry (eh: EGS_EXCEPTION_HANDLER; obj_ptr: POINTER; entry: POINTER; txn: POINTER; timeout: INTEGER_64; modifiers: INTEGER): POINTER is require eh_not_void: eh /= Void obj_ptr_not_null: obj_ptr /= default_pointer entry_not_null: entry /= default_pointer external "C++ inline use " alias "[ try { return new OpenSpaces::Lease((*((OpenSpaces::SpaceProxyPtr*)$obj_ptr))->write(((OpenSpaces::IEntry*)$entry), ($txn != 0?(*((OpenSpaces::TransactionPtr*)$txn)):OpenSpaces::NULL_TX), $timeout, OpenSpaces::UpdateModifiers($modifiers))); } catch(OpenSpaces::XAPException& e) { EGS_HANDLE_XAP_EXCEPTION($eh, e); return 0; } ]" end cpp_snapshot (eh: EGS_EXCEPTION_HANDLER; obj_ptr: POINTER; entry: POINTER) is require eh_not_void: eh /= Void obj_ptr_not_null: obj_ptr /= default_pointer entry_not_null: entry /= default_pointer external "C++ inline use " alias "[ try { (*((OpenSpaces::SpaceProxyPtr*)$obj_ptr))->snapshot(((OpenSpaces::IEntry*)$entry)); } catch(OpenSpaces::XAPException& e) { EGS_HANDLE_XAP_EXCEPTION($eh, e); } ]" end cpp_take_entry (eh: EGS_EXCEPTION_HANDLER; obj_ptr: POINTER; entry_template: POINTER; txn: POINTER; timeout: INTEGER_64): POINTER is require eh_not_void: eh /= Void obj_ptr_not_null: obj_ptr /= default_pointer entry_template_not_null: entry_template /= default_pointer external "C++ inline use " alias "[ try { return (*((OpenSpaces::SpaceProxyPtr*)$obj_ptr))->take(((OpenSpaces::IEntry*)$entry_template), ($txn != 0?(*((OpenSpaces::TransactionPtr*)$txn)):OpenSpaces::NULL_TX), $timeout); } catch(OpenSpaces::XAPException& e) { EGS_HANDLE_XAP_EXCEPTION($eh, e); return 0; } ]" end cpp_update_entry (eh: EGS_EXCEPTION_HANDLER; obj_ptr: POINTER; entry: POINTER; txn: POINTER; lease: INTEGER_64; timeout: INTEGER_64; modifiers: INTEGER): POINTER is require eh_not_void: eh /= Void obj_ptr_not_null: obj_ptr /= default_pointer entry_not_null: entry /= default_pointer external "C++ inline use " alias "[ try { return (*((OpenSpaces::SpaceProxyPtr*)$obj_ptr))->update(((OpenSpaces::IEntry*)$entry),($txn != 0?(*((OpenSpaces::TransactionPtr*)$txn)):OpenSpaces::NULL_TX), $lease, $timeout, OpenSpaces::UpdateModifiers($modifiers)); } catch(OpenSpaces::XAPException& e) { EGS_HANDLE_XAP_EXCEPTION($eh, e); return 0; } ]" end cpp_write_multiple (eh: EGS_EXCEPTION_HANDLER; obj_ptr: POINTER; array: POINTER; txn: POINTER; lease: INTEGER_64): POINTER is require eh_not_void: eh /= Void obj_ptr_not_null: obj_ptr /= default_pointer array_not_null: array /= default_pointer external "C++ inline use , " alias "[ try { return egs_space_proxy_write_multiple( (OpenSpaces::SpaceProxyPtr *)$obj_ptr, *((std::vector*)$array), ($txn != 0?(*((OpenSpaces::TransactionPtr*)$txn)):OpenSpaces::NULL_TX), $lease); } catch(OpenSpaces::XAPException& e) { EGS_HANDLE_XAP_EXCEPTION($eh, e); return 0; } ]" end cpp_read_multiple (eh: EGS_EXCEPTION_HANDLER; obj_ptr: POINTER; entry: POINTER; txn: POINTER; max_entries: INTEGER; modifiers: INTEGER): POINTER is require eh_not_void: eh /= Void obj_ptr_not_null: obj_ptr /= default_pointer entry_not_null: entry /= default_pointer external "C++ inline use " alias "[ try { return egs_space_proxy_read_multiple( (OpenSpaces::SpaceProxyPtr *)$obj_ptr, (OpenSpaces::IEntry*)$entry, ($txn != 0?(*((OpenSpaces::TransactionPtr*)$txn)):OpenSpaces::NULL_TX), $max_entries, OpenSpaces::ReadModifiers($modifiers)); } catch(OpenSpaces::XAPException& e) { EGS_HANDLE_XAP_EXCEPTION($eh, e); return 0; } ]" end cpp_take_multiple (eh: EGS_EXCEPTION_HANDLER; obj_ptr: POINTER; entry: POINTER; txn: POINTER; max_entries: INTEGER): POINTER is require eh_not_void: eh /= Void obj_ptr_not_null: obj_ptr /= default_pointer entry_not_null: entry /= default_pointer external "C++ inline use " alias "[ try { return egs_space_proxy_take_multiple( (OpenSpaces::SpaceProxyPtr *)$obj_ptr, (OpenSpaces::IEntry*)$entry, ($txn != 0?(*((OpenSpaces::TransactionPtr*)$txn)):OpenSpaces::NULL_TX), $max_entries); } catch(OpenSpaces::XAPException& e) { EGS_HANDLE_XAP_EXCEPTION($eh, e); return 0; } ]" end cpp_clear (eh: EGS_EXCEPTION_HANDLER; obj_ptr: POINTER; entry_template: POINTER; txn: POINTER) is require eh_not_void: eh /= Void obj_ptr_not_null: obj_ptr /= default_pointer external "C++ inline use " alias "[ try { (*((OpenSpaces::SpaceProxyPtr*)$obj_ptr))->clear(((OpenSpaces::IEntry*)$entry_template), ($txn != 0?(*((OpenSpaces::TransactionPtr*)$txn)):OpenSpaces::NULL_TX)); } catch(OpenSpaces::XAPException& e) { EGS_HANDLE_XAP_EXCEPTION($eh, e); } ]" end cpp_create_local_transaction (eh: EGS_EXCEPTION_HANDLER; obj_ptr: POINTER; lease_time: INTEGER_64): POINTER is require eh_not_void: eh /= Void obj_ptr_not_null: obj_ptr /= default_pointer external "C++ inline use " alias "[ try { return new OpenSpaces::TransactionPtr((*((OpenSpaces::SpaceProxyPtr*)$obj_ptr))->getLocalTransaction($lease_time)); } catch(OpenSpaces::XAPException& e) { EGS_HANDLE_XAP_EXCEPTION($eh, e); return 0; } ]" end cpp_get_local_transaction_manager (eh: EGS_EXCEPTION_HANDLER; obj_ptr: POINTER): POINTER is require eh_not_void: eh /= Void obj_ptr_not_null: obj_ptr /= default_pointer external "C++ inline use " alias "[ try { return new OpenSpaces::ITransactionManagerPtr((*((OpenSpaces::SpaceProxyPtr*)$obj_ptr))->getLocalTransactionManager()); } catch(OpenSpaces::XAPException& e) { EGS_HANDLE_XAP_EXCEPTION($eh, e); return 0; } ]" end cpp_get_distributed_transaction_manager (eh: EGS_EXCEPTION_HANDLER; obj_ptr: POINTER; config: POINTER): POINTER is require eh_not_void: eh /= Void obj_ptr_not_null: obj_ptr /= default_pointer config_not_null: config /= default_pointer external "C++ inline use " alias "[ try { return new OpenSpaces::ITransactionManagerPtr((*((OpenSpaces::SpaceProxyPtr*)$obj_ptr))->getDistributedTransactionManager((*((OpenSpaces::IConfigPtr*)$config)))); } catch(OpenSpaces::XAPException& e) { EGS_HANDLE_XAP_EXCEPTION($eh, e); return 0; } ]" end cpp_thread_detach (eh: EGS_EXCEPTION_HANDLER; obj_ptr: POINTER) is require eh_not_void: eh /= Void obj_ptr_not_null: obj_ptr /= default_pointer external "C++ inline use " alias "[ try { (*((OpenSpaces::SpaceProxyPtr*)$obj_ptr))->ThreadDetach(); } catch(OpenSpaces::XAPException& e) { EGS_HANDLE_XAP_EXCEPTION($eh, e); } ]" end cpp_clean (eh: EGS_EXCEPTION_HANDLER; obj_ptr: POINTER) is require eh_not_void: eh /= Void obj_ptr_not_null: obj_ptr /= default_pointer external "C++ inline use " alias "[ try { (*((OpenSpaces::SpaceProxyPtr*)$obj_ptr))->clean(); } catch(OpenSpaces::XAPException& e) { EGS_HANDLE_XAP_EXCEPTION($eh, e); } ]" end indexing library: "egigs-cpp: Library for accessing the GigaSpaces platform, POCO library based implementation." copyright: "Copyright (c) 2008, Eiffel Software and others" license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)" source: "[ Eiffel Software 356 Storke Road, Goleta, CA 93117 USA Telephone 805-685-1006, Fax 805-685-6869 Website http://www.eiffel.com Customer support http://support.eiffel.com ]" end