home | O'Reilly's CD bookshelfs | FreeBSD | Linux | Cisco | Cisco Exam    

Book Home Java Enterprise in a Nutshell Search this book

Chapter 35. The org.omg.CosNaming Package

The org.omg.CosNaming package is a Java mapping of the IDL interfaces defined by the CORBA Naming Service. The principal interface in the service is the NamingContext, which represents a directory of named object references. The package also contains various support classes that allow you to iterate through an NamingContext and query its contents. Figure 35-1 shows the class hierarchy of this package.

figure

Figure 35-1. The org.omg.CosNaming package

_BindingIteratorImplBaseJava 1.2
org.omg.CosNamingserializable

The IDL-generated skeleton class for the BindingIterator interface.

public abstract class _BindingIteratorImplBase extends org.omg.CORBA.DynamicImplementationimplements BindingIterator {
// Public Constructors
public _BindingIteratorImplBase ();
// Methods implementing BindingIterator
public abstract void destroy ();
public abstract boolean next_n (int how_many, BindingListHolder bl);
public abstract boolean next_one (BindingHolder b);
// Public methods overriding DynamicImplementation
public void invoke (org.omg.CORBA.ServerRequest r);
// Public methods overriding ObjectImpl
public String[ ] _ids ();
}

Hierarchy: Object-->org.omg.CORBA.portable.ObjectImpl(org.omg.CORBA.Object)-->org.omg.CORBA.DynamicImplementation-->_BindingIteratorImplBase(BindingIterator(org.omg.CORBA.Object,org.omg.CORBA.portable.IDLEntity(Serializable)))

_BindingIteratorStubJava 1.2
org.omg.CosNamingserializable

The IDL-generated stub class for the BindingIterator interface.

public class _BindingIteratorStub extends org.omg.CORBA.portable.ObjectImplimplements BindingIterator {
// Public Constructors
public _BindingIteratorStub (org.omg.CORBA.portable.Delegate d);
// Methods implementing BindingIterator
public void destroy ();
public boolean next_n (int how_many, BindingListHolder bl);
public boolean next_one (BindingHolder b);
// Public methods overriding ObjectImpl
public String[ ] _ids ();
}

Hierarchy: Object-->org.omg.CORBA.portable.ObjectImpl(org.omg.CORBA.Object)-->_BindingIteratorStub(BindingIterator(org.omg.CORBA.Object,org.omg.CORBA.portable.IDLEntity(Serializable)))

_NamingContextImplBaseJava 1.2
org.omg.CosNamingserializable

The IDL-generated skeleton class for the NamingContext interface.

public abstract class _NamingContextImplBase extends org.omg.CORBA.DynamicImplementationimplements NamingContext {
// Public Constructors
public _NamingContextImplBase ();
// Methods implementing NamingContext
public abstract void bind (NameComponent[ ] n, org.omg.CORBA.Object obj) throws NotFound, CannotProceed, org.omg.CosNaming.NamingContextPackage.InvalidName, AlreadyBound;
public abstract void bind_context (NameComponent[ ] n, NamingContext nc) throws NotFound, CannotProceed, org.omg.CosNaming.NamingContextPackage.InvalidName, AlreadyBound;
public abstract NamingContext bind_new_context (NameComponent[ ] n) throws NotFound, AlreadyBound, CannotProceed, org.omg.CosNaming.NamingContextPackage.InvalidName;
public abstract void destroy () throws NotEmpty;
public abstract void list (int how_many, BindingListHolder bl, BindingIteratorHolder bi);
public abstract NamingContext new_context ();
public abstract void rebind (NameComponent[ ] n, org.omg.CORBA.Object obj) throws NotFound, CannotProceed, org.omg.CosNaming.NamingContextPackage.InvalidName;
public abstract void rebind_context (NameComponent[ ] n, NamingContext nc) throws NotFound, CannotProceed, org.omg.CosNaming.NamingContextPackage.InvalidName;
public abstract org.omg.CORBA.Object resolve (NameComponent[ ] n) throws NotFound, CannotProceed, org.omg.CosNaming.NamingContextPackage.InvalidName;
public abstract void unbind (NameComponent[ ] n) throws NotFound, CannotProceed, org.omg.CosNaming.NamingContextPackage.InvalidName;
// Public methods overriding DynamicImplementation
public void invoke (org.omg.CORBA.ServerRequest r);
// Public methods overriding ObjectImpl
public String[ ] _ids ();
}

Hierarchy: Object-->org.omg.CORBA.portable.ObjectImpl(org.omg.CORBA.Object)-->org.omg.CORBA.DynamicImplementation-->_NamingContextImplBase(NamingContext(org.omg.CORBA.Object,org.omg.CORBA.portable.IDLEntity(Serializable)))

_NamingContextStubJava 1.2
org.omg.CosNamingserializable

The IDL-generated stub class for the NamingContext interface.

public class _NamingContextStub extends org.omg.CORBA.portable.ObjectImplimplements NamingContext {
// Public Constructors
public _NamingContextStub (org.omg.CORBA.portable.Delegate d);
// Methods implementing NamingContext
public void bind (NameComponent[ ] n, org.omg.CORBA.Object obj) throws NotFound, CannotProceed, org.omg.CosNaming.NamingContextPackage.InvalidName, AlreadyBound;
public void bind_context (NameComponent[ ] n, NamingContext nc) throws NotFound, CannotProceed, org.omg.CosNaming.NamingContextPackage.InvalidName, AlreadyBound;
public NamingContext bind_new_context (NameComponent[ ] n) throws NotFound, AlreadyBound, CannotProceed, org.omg.CosNaming.NamingContextPackage.InvalidName;
public void destroy () throws NotEmpty;
public void list (int how_many, BindingListHolder bl, BindingIteratorHolder bi);
public NamingContext new_context ();
public void rebind (NameComponent[ ] n, org.omg.CORBA.Object obj) throws NotFound, CannotProceed, org.omg.CosNaming.NamingContextPackage.InvalidName;
public void rebind_context (NameComponent[ ] n, NamingContext nc) throws NotFound, CannotProceed, org.omg.CosNaming.NamingContextPackage.InvalidName;
public org.omg.CORBA.Object resolve (NameComponent[ ] n) throws NotFound, CannotProceed, org.omg.CosNaming.NamingContextPackage.InvalidName;
public void unbind (NameComponent[ ] n) throws NotFound, CannotProceed, org.omg.CosNaming.NamingContextPackage.InvalidName;
// Public methods overriding ObjectImpl
public String[ ] _ids ();
}

Hierarchy: Object-->org.omg.CORBA.portable.ObjectImpl(org.omg.CORBA.Object)-->_NamingContextStub(NamingContext(org.omg.CORBA.Object,org.omg.CORBA.portable.IDLEntity(Serializable)))

BindingJava 1.2
org.omg.CosNamingserializable

A Binding describes a name binding within a naming context. It contains a NameComponent array, which represents the name associated with the binding, and a BindingType, which indicates whether the bound object is a regular object or a NamingContext.

public final class Binding implements org.omg.CORBA.portable.IDLEntity {
// Public Constructors
public Binding ();
public Binding (NameComponent[ ] __binding_name, BindingType __binding_type);
// Public Instance Fields
public NameComponent[ ] binding_name ;
public BindingType binding_type ;
}

Hierarchy: Object-->org.omg.CosNaming.Binding(org.omg.CORBA.portable.IDLEntity(Serializable))

Passed To: BindingHelper.{insert(), write()}, BindingHolder.BindingHolder(), BindingListHelper.{insert(), write()}, BindingListHolder.BindingListHolder()

Returned By: BindingHelper.{extract(), read()}, BindingListHelper.{extract(), read()}

Type Of: BindingHolder.value, BindingListHolder.value

BindingHelperJava 1.2
org.omg.CosNaming

The helper class for the Binding class.

public class BindingHelper {
// No Constructor
// Public Class Methods
public static org.omg.CosNaming.Binding extract (org.omg.CORBA.Any a);
public static String id ();
public static void insert (org.omg.CORBA.Any a, org.omg.CosNaming.Binding that);
public static org.omg.CosNaming.Binding read (org.omg.CORBA.portable.InputStream in);
public static org.omg.CORBA.TypeCode type (); synchronized
public static void write (org.omg.CORBA.portable.OutputStream out, org.omg.CosNaming.Binding that);
}
BindingHolderJava 1.2
org.omg.CosNaming

The holder class for out and inout IDL method arguments that are mapped to Java Binding objects.

public final class BindingHolder implements org.omg.CORBA.portable.Streamable {
// Public Constructors
public BindingHolder ();
public BindingHolder (org.omg.CosNaming.Binding __arg);
// Methods implementing Streamable
public void _read (org.omg.CORBA.portable.InputStream in);
public org.omg.CORBA.TypeCode _type ();
public void _write (org.omg.CORBA.portable.OutputStream out);
// Public Instance Fields
public org.omg.CosNaming.Binding value ;
}

Hierarchy: Object-->BindingHolder(org.omg.CORBA.portable.Streamable)

Passed To: _BindingIteratorImplBase.next_one(), _BindingIteratorStub.next_one(), BindingIterator.next_one()

BindingIteratorJava 1.2
org.omg.CosNamingserializable

If you request a set of name/object bindings from a NamingContext using its list() method, the BindingListHolder you pass in is filled with any results, up to its maximum capacity. If the NamingContext contains more bound objects than the binding array you provide can hold, the BindingIteratorHolder argument is initialized to contain a BindingIterator that allows you to iterate through the rest of the bindings in the context. You can iterate through the remainder of the bindings one at a time, using the next_one() method, or in sets, using the next_n() method.

public abstract interface BindingIterator extends org.omg.CORBA.Object, org.omg.CORBA.portable.IDLEntity {
// Public Instance Methods
public abstract void destroy ();
public abstract boolean next_n (int how_many, BindingListHolder bl);
public abstract boolean next_one (BindingHolder b);
}

Hierarchy: (BindingIterator(org.omg.CORBA.Object,org.omg.CORBA.portable.IDLEntity(Serializable)))

Implementations: _BindingIteratorImplBase, _BindingIteratorStub

Passed To: BindingIteratorHelper.{insert(), write()}, BindingIteratorHolder.BindingIteratorHolder()

Returned By: BindingIteratorHelper.{extract(), narrow(), read()}

Type Of: BindingIteratorHolder.value

BindingIteratorHelperJava 1.2
org.omg.CosNaming

The helper class for the BindingIterator class.

public class BindingIteratorHelper {
// No Constructor
// Public Class Methods
public static BindingIterator extract (org.omg.CORBA.Any a);
public static String id ();
public static void insert (org.omg.CORBA.Any a, BindingIterator that);
public static BindingIterator narrow (org.omg.CORBA.Object that) throws org.omg.CORBA.BAD_PARAM;
public static BindingIterator read (org.omg.CORBA.portable.InputStream in);
public static org.omg.CORBA.TypeCode type (); synchronized
public static void write (org.omg.CORBA.portable.OutputStream out, BindingIterator that);
}
BindingIteratorHolderJava 1.2
org.omg.CosNaming

The holder class for out and inout IDL method arguments that are mapped to Java BindingIterator objects.

public final class BindingIteratorHolder implements org.omg.CORBA.portable.Streamable {
// Public Constructors
public BindingIteratorHolder ();
public BindingIteratorHolder (BindingIterator __arg);
// Methods implementing Streamable
public void _read (org.omg.CORBA.portable.InputStream in);
public org.omg.CORBA.TypeCode _type ();
public void _write (org.omg.CORBA.portable.OutputStream out);
// Public Instance Fields
public BindingIterator value ;
}

Hierarchy: Object-->BindingIteratorHolder(org.omg.CORBA.portable.Streamable)

Passed To: _NamingContextImplBase.list(), _NamingContextStub.list(), NamingContext.list()

BindingListHelperJava 1.2
org.omg.CosNaming

The helper class for the BindingList class, which is the Java mapping for Binding arrays.

public class BindingListHelper {
// No Constructor
// Public Class Methods
public static org.omg.CosNaming.Binding[ ] extract (org.omg.CORBA.Any a);
public static String id ();
public static void insert (org.omg.CORBA.Any a, org.omg.CosNaming.Binding[ ] that);
public static org.omg.CosNaming.Binding[ ] read (org.omg.CORBA.portable.InputStream in);
public static org.omg.CORBA.TypeCode type (); synchronized
public static void write (org.omg.CORBA.portable.OutputStream out, org.omg.CosNaming.Binding[ ] that);
}
BindingListHolderJava 1.2
org.omg.CosNaming

The holder class for out and inout IDL method arguments that are mapped to Java BindingList objects.

public final class BindingListHolder implements org.omg.CORBA.portable.Streamable {
// Public Constructors
public BindingListHolder ();
public BindingListHolder (org.omg.CosNaming.Binding[ ] __arg);
// Methods implementing Streamable
public void _read (org.omg.CORBA.portable.InputStream in);
public org.omg.CORBA.TypeCode _type ();
public void _write (org.omg.CORBA.portable.OutputStream out);
// Public Instance Fields
public org.omg.CosNaming.Binding[ ] value ;
}

Hierarchy: Object-->BindingListHolder(org.omg.CORBA.portable.Streamable)

Passed To: _BindingIteratorImplBase.next_n(), _BindingIteratorStub.next_n(), _NamingContextImplBase.list(), _NamingContextStub.list(), BindingIterator.next_n(), NamingContext.list()

BindingTypeJava 1.2
org.omg.CosNamingserializable

A BindingType indicates what type of object is involved in a given binding, a regular object or a NamingContext. Its value() method returns an int value that can be compared to the two static int values on the class, to differentiate between these two cases.

public final class BindingType implements org.omg.CORBA.portable.IDLEntity {
// No Constructor
// Public Constants
public static final int _ncontext ; =1
public static final int _nobject ; =0
public static final BindingType ncontext ;
public static final BindingType nobject ;
// Public Class Methods
public static final BindingType from_int (int i) throws org.omg.CORBA.BAD_PARAM;
// Public Instance Methods
public int value ();
}

Hierarchy: Object-->BindingType(org.omg.CORBA.portable.IDLEntity(Serializable))

Passed To: org.omg.CosNaming.Binding.Binding(), BindingTypeHelper.{insert(), write()}, BindingTypeHolder.BindingTypeHolder()

Returned By: BindingType.from_int(), BindingTypeHelper.{extract(), read()}

Type Of: org.omg.CosNaming.Binding.binding_type, BindingType.{ncontext, nobject}, BindingTypeHolder.value

BindingTypeHelperJava 1.2
org.omg.CosNaming

The helper class for the BindingType class.

public class BindingTypeHelper {
// No Constructor
// Public Class Methods
public static BindingType extract (org.omg.CORBA.Any a);
public static String id ();
public static void insert (org.omg.CORBA.Any a, BindingType that);
public static BindingType read (org.omg.CORBA.portable.InputStream in);
public static org.omg.CORBA.TypeCode type (); synchronized
public static void write (org.omg.CORBA.portable.OutputStream out, BindingType that);
}
BindingTypeHolderJava 1.2
org.omg.CosNaming

The holder class for out and inout IDL method arguments that are mapped to Java BindingType objects.

public final class BindingTypeHolder implements org.omg.CORBA.portable.Streamable {
// Public Constructors
public BindingTypeHolder ();
public BindingTypeHolder (BindingType __arg);
// Methods implementing Streamable
public void _read (org.omg.CORBA.portable.InputStream in);
public org.omg.CORBA.TypeCode _type ();
public void _write (org.omg.CORBA.portable.OutputStream out);
// Public Instance Fields
public BindingType value ;
}

Hierarchy: Object-->BindingTypeHolder(org.omg.CORBA.portable.Streamable)

IstringHelperJava 1.2
org.omg.CosNaming

The helper class for the Istring class. The Istring class is used in the Naming Service as a placeholder for an internationalized string type. (Note that IString is just a typedef in the CORBA specification at this point; the OMG hasn't defined an internationalized string interface yet. That's why you cannot find a definition for IString anywhere in Java IDL.)

public class IstringHelper {
// No Constructor
// Public Class Methods
public static String extract (org.omg.CORBA.Any a);
public static String id ();
public static void insert (org.omg.CORBA.Any a, String that);
public static String read (org.omg.CORBA.portable.InputStream in);
public static org.omg.CORBA.TypeCode type (); synchronized
public static void write (org.omg.CORBA.portable.OutputStream out, String that);
}
NameComponentJava 1.2
org.omg.CosNamingserializable

A NameComponent represents one element in a name binding for an object. The name of an object in a NamingContext is composed of a sequence of NameComponent objects. Each NameComponent represents a subcontext that the object falls within, and the last NameComponent is the object's name within its closest context. Consider an object bound to the name apple-146 within a context bound to the name fruit within the root context. This object has two NameComponent objects in its fully qualified name within the root context: fruit, apple-146.

A NameComponent contains an id member, which represents the name associated with the component, and a kind member, which can optionally be used to further differentiate branches in a naming directory. The Naming Service does not consider the kind field on NameComponent objects when determining the uniqueness of name bindings, so each ordered list of id fields extracted from a fully qualified name binding must be unique.

public final class NameComponent implements org.omg.CORBA.portable.IDLEntity {
// Public Constructors
public NameComponent ();
public NameComponent (String __id, String __kind);
// Public Instance Fields
public String id ;
public String kind ;
}

Hierarchy: Object-->NameComponent(org.omg.CORBA.portable.IDLEntity(Serializable))

Passed To: Too many methods to list.

Returned By: NameComponentHelper.{extract(), read()}, NameHelper.{extract(), read()}

Type Of: org.omg.CosNaming.Binding.binding_name, NameComponentHolder.value, NameHolder.value, CannotProceed.rest_of_name, NotFound.rest_of_name

NameComponentHelperJava 1.2
org.omg.CosNaming

The helper class for the NameComponent class.

public class NameComponentHelper {
// No Constructor
// Public Class Methods
public static NameComponent extract (org.omg.CORBA.Any a);
public static String id ();
public static void insert (org.omg.CORBA.Any a, NameComponent that);
public static NameComponent read (org.omg.CORBA.portable.InputStream in);
public static org.omg.CORBA.TypeCode type (); synchronized
public static void write (org.omg.CORBA.portable.OutputStream out, NameComponent that);
}
NameComponentHolderJava 1.2
org.omg.CosNaming

The holder class for out and inout IDL method arguments that are mapped to NameComponent objects.

public final class NameComponentHolder implements org.omg.CORBA.portable.Streamable {
// Public Constructors
public NameComponentHolder ();
public NameComponentHolder (NameComponent __arg);
// Methods implementing Streamable
public void _read (org.omg.CORBA.portable.InputStream in);
public org.omg.CORBA.TypeCode _type ();
public void _write (org.omg.CORBA.portable.OutputStream out);
// Public Instance Fields
public NameComponent value ;
}

Hierarchy: Object-->NameComponentHolder(org.omg.CORBA.portable.Streamable)

NameHelperJava 1.2
org.omg.CosNaming

The helper class generated for the Name typedef declared in the IDL module for the Naming Service specification. The IDL typedef associates the type Name to a sequence of NameComponent objects.

public class NameHelper {
// No Constructor
// Public Class Methods
public static NameComponent[ ] extract (org.omg.CORBA.Any a);
public static String id ();
public static void insert (org.omg.CORBA.Any a, NameComponent[ ] that);
public static NameComponent[ ] read (org.omg.CORBA.portable.InputStream in);
public static org.omg.CORBA.TypeCode type (); synchronized
public static void write (org.omg.CORBA.portable.OutputStream out, NameComponent[ ] that);
}
NameHolderJava 1.2
org.omg.CosNaming

The holder class for out and inout IDL method arguments that are typed as an IDL Name. An IDL typedef in the Naming Service specification associates the type Name to a sequence of NameComponent objects, so any in arguments using this type are mapped to NameComponent arrays in Java, and any out or inout arguments are mapped to NameHolder objects.

public final class NameHolder implements org.omg.CORBA.portable.Streamable {
// Public Constructors
public NameHolder ();
public NameHolder (NameComponent[ ] __arg);
// Methods implementing Streamable
public void _read (org.omg.CORBA.portable.InputStream in);
public org.omg.CORBA.TypeCode _type ();
public void _write (org.omg.CORBA.portable.OutputStream out);
// Public Instance Fields
public NameComponent[ ] value ;
}

Hierarchy: Object-->NameHolder(org.omg.CORBA.portable.Streamable)

NamingContextJava 1.2
org.omg.CosNamingserializable

A NamingContext represents a naming directory structure, where objects are bound to unique branches, or names, in the naming directory. The full name each object is given in the NamingContext must be unique. New branches in the naming directory are created by binding a NamingContext to a name within another, root NamingContext. The child context represents a subdirectory, or subcontext, within the parent context.

Objects are bound to names in a context using the bind() and rebind() methods. The rebind() method allows you to reassign a name to a new object, if the name has already been bound. You can bind contexts using the bind_context(), bind_new_context(), and rebind_context() methods. If you want to simply create a new context without binding it to a name, use the new_context() method. Bound objects in the context can be found using the resolve() (for singular objects) and list() methods. The unbind() method lets you remove objects from their bindings in the context.

Objects can be bound to names in multiple NamingContext objects at the same time. Their names within each context are independent. The same object can also be bound to multiple, different names in a single context.

public abstract interface NamingContext extends org.omg.CORBA.Object, org.omg.CORBA.portable.IDLEntity {
// Public Instance Methods
public abstract void bind (NameComponent[ ] n, org.omg.CORBA.Object obj) throws NotFound, CannotProceed, org.omg.CosNaming.NamingContextPackage.InvalidName, AlreadyBound;
public abstract void bind_context (NameComponent[ ] n, NamingContext nc) throws NotFound, CannotProceed, org.omg.CosNaming.NamingContextPackage.InvalidName, AlreadyBound;
public abstract NamingContext bind_new_context (NameComponent[ ] n) throws NotFound, AlreadyBound, CannotProceed, org.omg.CosNaming.NamingContextPackage.InvalidName;
public abstract void destroy () throws NotEmpty;
public abstract void list (int how_many, BindingListHolder bl, BindingIteratorHolder bi);
public abstract NamingContext new_context ();
public abstract void rebind (NameComponent[ ] n, org.omg.CORBA.Object obj) throws NotFound, CannotProceed, org.omg.CosNaming.NamingContextPackage.InvalidName;
public abstract void rebind_context (NameComponent[ ] n, NamingContext nc) throws NotFound, CannotProceed, org.omg.CosNaming.NamingContextPackage.InvalidName;
public abstract org.omg.CORBA.Object resolve (NameComponent[ ] n) throws NotFound, CannotProceed, org.omg.CosNaming.NamingContextPackage.InvalidName;
public abstract void unbind (NameComponent[ ] n) throws NotFound, CannotProceed, org.omg.CosNaming.NamingContextPackage.InvalidName;
}

Hierarchy: (NamingContext(org.omg.CORBA.Object,org.omg.CORBA.portable.IDLEntity(Serializable)))

Implementations: _NamingContextImplBase, _NamingContextStub

Passed To: _NamingContextImplBase.{bind_context(), rebind_context()}, _NamingContextStub.{bind_context(), rebind_context()}, NamingContext.{bind_context(), rebind_context()}, NamingContextHelper.{insert(), write()}, NamingContextHolder.NamingContextHolder(), CannotProceed.CannotProceed()

Returned By: _NamingContextImplBase.{bind_new_context(), new_context()}, _NamingContextStub.{bind_new_context(), new_context()}, NamingContext.{bind_new_context(), new_context()}, NamingContextHelper.{extract(), narrow(), read()}

Type Of: NamingContextHolder.value, CannotProceed.cxt

NamingContextHelperJava 1.2
org.omg.CosNaming

The helper class for the NamingContext interface.

public class NamingContextHelper {
// No Constructor
// Public Class Methods
public static NamingContext extract (org.omg.CORBA.Any a);
public static String id ();
public static void insert (org.omg.CORBA.Any a, NamingContext that);
public static NamingContext narrow (org.omg.CORBA.Object that) throws org.omg.CORBA.BAD_PARAM;
public static NamingContext read (org.omg.CORBA.portable.InputStream in);
public static org.omg.CORBA.TypeCode type (); synchronized
public static void write (org.omg.CORBA.portable.OutputStream out, NamingContext that);
}
NamingContextHolderJava 1.2
org.omg.CosNaming

The holder class for out and inout IDL method arguments that are mapped to Java NamingContext objects.

public final class NamingContextHolder implements org.omg.CORBA.portable.Streamable {
// Public Constructors
public NamingContextHolder ();
public NamingContextHolder (NamingContext __arg);
// Methods implementing Streamable
public void _read (org.omg.CORBA.portable.InputStream in);
public org.omg.CORBA.TypeCode _type ();
public void _write (org.omg.CORBA.portable.OutputStream out);
// Public Instance Fields
public NamingContext value ;
}

Hierarchy: Object-->NamingContextHolder(org.omg.CORBA.portable.Streamable)



Library Navigation Links

Copyright © 2001 O'Reilly & Associates. All rights reserved.







??????????????@Mail.ru