summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/orbsvcs/CosNaming.idl
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/orbsvcs/orbsvcs/CosNaming.idl')
-rw-r--r--TAO/orbsvcs/orbsvcs/CosNaming.idl274
1 files changed, 274 insertions, 0 deletions
diff --git a/TAO/orbsvcs/orbsvcs/CosNaming.idl b/TAO/orbsvcs/orbsvcs/CosNaming.idl
new file mode 100644
index 00000000000..2587ab26e56
--- /dev/null
+++ b/TAO/orbsvcs/orbsvcs/CosNaming.idl
@@ -0,0 +1,274 @@
+/* -*- C++ -*- */
+// $Id$
+
+// ============================================================================
+//
+// = LIBRARY
+// cos
+//
+// = FILENAME
+// CosNaming.idl
+//
+// = AUTHOR
+// Marina Spivak <marina@cs.wustl.edu>
+//
+// ============================================================================
+
+#ifndef TAO_NAMING_IDL
+#define TAO_NAMING_IDL
+
+#pragma prefix "omg.org"
+
+/**
+ * This module provides interface for using COS Naming Service.
+ */
+module CosNaming
+{
+ /// Define a typedef for String. Maybe at some point, <Istring> will
+ /// be different to support Internationalization.
+ typedef string Istring;
+
+ /*
+ * This is a 'simple' name.
+ *
+ * Both id and kind fields are used in resolving names.
+ */
+ struct NameComponent
+ {
+ /// This is the name that is used to identify object references.
+ Istring id;
+
+ /// Stores any additional info about the object reference.
+ Istring kind;
+ };
+
+ /// This is a compound name: <c1; c2; c3; cn> where c1 to cn-1 are
+ /// the names of the nested contexts, and cn is the name of the
+ /// object bound in cn-1.
+ typedef sequence <NameComponent> Name;
+
+ enum BindingType
+ {
+ /// object binding.
+ nobject,
+
+ /// Naming context binding.
+ ncontext
+ };
+
+ struct Binding
+ {
+ /// Simple name, under which an object is bound in a given context.
+ Name binding_name;
+
+ /// Indicates whether the binding_name identifies a context, and, therefore, can
+ /// participate in name resolution.
+ BindingType binding_type;
+ };
+
+ typedef sequence <Binding> BindingList;
+
+ // Forward declaration.
+ interface BindingIterator;
+
+ /// Interface for managing name bindings and naming contexts.
+ interface NamingContext
+ {
+ // = Exceptions.
+
+ enum NotFoundReason
+ {
+ missing_node,
+ not_context,
+ not_object
+ };
+
+ /// Indicates that the name does not identify a binding.
+ exception NotFound
+ {
+
+ NotFoundReason why;
+ Name rest_of_name;
+ };
+
+ /// Implementation may throw this exception if some reason it cannot
+ /// complete the operation. This is currently not used in TAO.
+ exception CannotProceed
+ {
+
+ NamingContext cxt;
+ Name rest_of_name;
+ };
+
+ /// A name of length 0 is invalid. Implementations may place
+ /// further restrictions.
+ exception InvalidName
+ {
+ };
+
+ /// Indicates that the specified name is already bound to
+ /// some object. Only one object can be bound to a
+ /// particular name in an context. To change the binding,
+ /// <rebind> and <rebind_context> can be used.
+ exception AlreadyBound
+ {
+ };
+
+ /// Indicates that the context is not empty.
+ exception NotEmpty
+ {
+ };
+
+ // = Binding operations.
+
+ /// Create a binding for name <n> and object <obj> in the naming
+ /// context. Compound names are treated as follows: ctx->bind
+ /// (<c1; c2; c3; cn>, obj) = (ctx->resolve (<c1; c2;
+ /// cn-1>))->bind (<cn>, obj) if the there already exists a
+ /// binding for the specified name, <AlreadyBound> exception is
+ /// thrown. Naming contexts should be bound using <bind_context>
+ /// and <rebind_context> in order to participate in name
+ /// resolution later.
+ void bind (in Name n, in Object obj)
+ raises (NotFound, CannotProceed, InvalidName, AlreadyBound);
+
+ /// This is similar to <bind> operation above, except for when
+ /// the binding for the specified name already exists in the
+ /// specified context. In that case, the existing binding is
+ /// replaced with the new one.
+ void rebind (in Name n, in Object obj)
+ raises (NotFound, CannotProceed, InvalidName);
+
+ /// This is the version of <bind> specifically for binding naming
+ /// contexts, so that they will participate in name resolution
+ /// when compound names are passed to be resolved.
+ void bind_context (in Name n, in NamingContext nc)
+ raises(NotFound, CannotProceed, InvalidName, AlreadyBound);
+
+ /// This is a version of <rebind> specifically for naming
+ /// contexts, so that they can participate in name resolution
+ /// when compound names are passed.
+ void rebind_context (in Name n, in NamingContext nc)
+ raises (NotFound, CannotProceed, InvalidName);
+
+ // = Resolving names.
+
+ /// Return object reference that is bound to the name. Compound
+ /// name resolve is defined as follows: ctx->resolve (<c1; c2;
+ /// cn>) = ctx->resolve (<c1; c2 cn-1>)->resolve (<cn>) The
+ /// naming service does not return the type of the object.
+ /// Clients are responsible for "narrowing" the object to the
+ /// appropriate type.
+ Object resolve (in Name n)
+ raises (NotFound, CannotProceed, InvalidName);
+
+ // = Unbinding names.
+
+ /// Remove the name binding from the context. When compound
+ /// names are used, unbind is defined as follows: ctx->unbind
+ /// (<c1; c2; cn>) = (ctx->resolve (<c1; c2; cn-1>))->unbind
+ /// (<cn>)
+ void unbind (in Name n)
+ raises (NotFound, CannotProceed, InvalidName);
+
+ // = Creating Naming Contexts.
+
+ /// This operation returns a new naming context implemented by
+ /// the same naming server in which the operation was invoked.
+ /// The context is not bound.
+ NamingContext new_context ();
+
+ /// This operation creates a new context and binds it to the name
+ /// supplied as an argument. The newly-created context is
+ /// implemented by the same server as the context in which it was
+ /// bound (the name argument excluding the last component).
+ NamingContext bind_new_context (in Name n)
+ raises (NotFound, AlreadyBound, CannotProceed, InvalidName);
+
+ // = Deleting contexts.
+
+ /// Delete the naming context. NOTE: the user should <unbind>
+ /// any bindings in which the given context is bound to some
+ /// names before invoking <destroy> operation on it.
+ void destroy ()
+ raises (NotEmpty);
+
+
+ // = Listing the naming context.
+
+ /// Returns at most the requested number of bindings @a how_many
+ /// in @a bl. If the naming context contains additional bindings,
+ /// they are returned with a BindingIterator. In the naming
+ /// context does not contain any additional bindings @a bi
+ /// returned as null.
+ void list (in unsigned long how_many,
+ out BindingList bl,
+ out BindingIterator bi);
+ };
+
+ /// Interface for iterating over Bindings returned with the
+ /// <list> operation.
+ interface BindingIterator
+ {
+ /// This operation returns the next binding. If there are no
+ /// more bindings false is returned.
+ boolean next_one (out Binding b);
+
+ /// This operation returns at most the requested number of
+ /// bindings.
+ boolean next_n (in unsigned long how_many,
+ out BindingList bl);
+
+ /// This operation destroys the iterator.
+ void destroy ();
+ };
+
+ /// Interface for providing operations required to use URLs and
+ /// stringified names.
+ ///
+ /// Reference to: Document orbos/98-10-11 (Interoperable Naming Joint Revised Submission)
+ /// Joint Submission by BEA Systems, DSTC, IONA, and Inprise
+ interface NamingContextExt : NamingContext
+ {
+ /// Stringified form of a Name.
+ typedef string StringName;
+
+ /// URL address such as myhost.xyz.com.
+ typedef string Address;
+
+ /// Stringified form of a URL address componoent.
+ typedef string URLString;
+
+ /// This operation accepts a Name and returns a stringified
+ /// name. If the name is invalid, an InvalidName exception is
+ /// raised.
+ StringName to_string (in Name n)
+ raises (InvalidName);
+
+ /// This operation returns a Name. If the input stringified
+ /// name is syntactically malformed or violates an
+ /// implementation limit, an InvalidName exception is
+ /// raised.
+ Name to_name (in StringName sn)
+ raises (InvalidName);
+
+ /// Indicates that the URL address is invalid.
+ exception InvalidAddress {
+ };
+
+ /// It performs any escapes necessary on the stringified name
+ /// and returns a fully formed URL string. An exception is
+ /// raised if either the protocol or name parameters are invalid.
+ URLString to_url (in Address addr,
+ in StringName sn)
+ raises (InvalidAddress, InvalidName);
+
+ /// This is similar to @c resolve as in the
+ /// CosNaming::NamingContext interface, except that it accepts
+ /// a stringified name as an argument instead of a Name.
+ Object resolve_str (in StringName n)
+ raises (NotFound, CannotProceed, InvalidName);
+ };
+};
+
+#endif /* TAO_NAMING_IDL */