org.omg.CosNaming

接口
为 Java IDL 提供命名服务。

请参见:
          描述

接口摘要
BindingIterator BindingIterator 接口允许客户端使用 next_one 或 next_n 迭代绑定。
BindingIteratorOperations BindingIterator 接口允许客户端使用 next_one 或 next_n 迭代绑定。
NamingContext 命名上下文是包含一组名称绑定的对象,在这些名称绑定中,每个名称都是唯一的。
NamingContextExt NamingContextExtNamingContext(它包含一组名称绑定,在这些名称绑定中,每个名称都是唯一的)的扩展,并且是互操作命名服务 (Interoperable Naming Service) 的一部分。
NamingContextExtOperations NamingContextExtNamingContext(它包含一组名称绑定,在这些名称绑定中,每个名称都是唯一的)的扩展,并且是互操作命名服务 (Interoperable Naming Service) 的一部分。
NamingContextOperations 命名上下文是包含一组名称绑定的对象,在这些名称绑定中,每个名称都是唯一的。
 

类摘要
_BindingIteratorImplBase  
_BindingIteratorStub BindingIterator 接口允许客户端使用 next_one 或 next_n 操作在绑定上进行迭代。
_NamingContextExtStub NamingContextExtNamingContext(它包含一组名称绑定,在这些名称绑定中,每个名称都是唯一的)的扩展,并且是互操作命名服务 (Interoperable Naming Service) 的一部分。
_NamingContextImplBase  
_NamingContextStub 命名上下文是包含一组名称绑定的对象,在这些名称绑定中,每个名称都是唯一的。
Binding org/omg/CosNaming/Binding.java。
BindingHelper org/omg/CosNaming/BindingHelper.java。
BindingHolder org/omg/CosNaming/BindingHolder.java。
BindingIteratorHelper BindingIterator 接口允许客户端使用 next_one 或 next_n 操作迭代绑定。
BindingIteratorHolder BindingIterator 接口允许客户端使用 next_one 或 next_n 操作迭代绑定。
BindingIteratorPOA BindingIterator 接口允许客户端使用 next_one 或 next_n 操作迭代绑定。
BindingListHelper 绑定列表。
BindingListHolder 绑定列表。
BindingType 指定给定的绑定对应于对象(非命名上下文的对象)还是命名上下文。
BindingTypeHelper 指定给定的绑定对应于对象(非命名上下文的对象)还是命名上下文。
BindingTypeHolder 指定给定的绑定是对象(非命名上下文的对象)的还是命名上下文的。
IstringHelper org/omg/CosNaming/IstringHelper.java。
NameComponent org/omg/CosNaming/NameComponent.java。
NameComponentHelper org/omg/CosNaming/NameComponentHelper.java。
NameComponentHolder org/omg/CosNaming/NameComponentHolder.java。
NameHelper 名称是名称组件的序列。
NameHolder 名称是名称组件的序列。
NamingContextExtHelper NamingContextExtNamingContext(它包含一组名称绑定,在这些名称绑定中,每个名称都是唯一的)的扩展,并且是互操作命名服务 (Interoperable Naming Service) 的一部分。
NamingContextExtHolder NamingContextExtNamingContext(它包含一组名称绑定,在这些名称绑定中,每个名称都是唯一的)的扩展,并且是互操作命名服务 (Interoperable Naming Service) 的一部分。
NamingContextExtPOA NamingContextExtNamingContext(它包含一组名称绑定,在这些名称绑定中,每个名称都是唯一的)的扩展,并且是互操作命名服务 (Interoperable Naming Service) 的一部分。
NamingContextHelper 命名上下文是包含一组名称绑定的对象,在这些名称绑定中,每个名称都是唯一的。
NamingContextHolder 命名上下文是包含一组名称绑定的对象,在这些名称绑定中,每个名称都是唯一的。
NamingContextPOA 命名上下文是包含一组名称绑定的对象,在这些名称绑定中,每个名称都是唯一的。
 

软件包 org.omg.CosNaming 的描述

为 Java IDL 提供命名服务。对象请求代理守护程序(Object Request Broker Daemon,ORBD)还包括瞬态和持久命名服务。

该包及其所有类和接口都是通过在 nameservice.idl 文件上运行 idlj 工具生成的,该文件是用 OMG IDL 编写的模块。

包规范

有关 Java[tm] Platform, Standard Edition 6 ORB 遵守的官方规范的受支持部分的明确列表,请参阅 Official Specifications for CORBA support in Java[tm] SE 6

接口

org.omg.CosNaming 包包含两个公共接口和若干辅助类。

这两个接口是:

  • NamingContext
  • BindingIterator

这两个接口提供了一些方法,有些用来绑定/取消绑定名称和对象引用,有些用来检索绑定的对象引用,还有些用来迭代绑定列表。NamingContext 接口提供命名服务的主要功能,BindingIterator 提供迭代名称/对象引用绑定列表的各种方法。

辅助类

为了将 OMG IDL 接口映射到 Java 编程语言,idlj 编译器创建了一些 Java 类,这些类可视为辅助类。在这里提供有关接口 NamingContextBindingIterator 所使用的已生成辅助类的注释。

NamingContextBindingIterator 所使用的类

以下是命名服务所使用的类。(以下讨论为此处列出的每个类所生成的 helper 和 holder 类。)
  • public final class NameComponent - 名称的构建块 (building block)。(名称被绑定到命名上下文中的对象引用。)

    名称是一个或多个 NameComponent 对象所组成的数组。带有单个 NameComponent 的名称称为简单名称;带有多个 NameComponent 对象的名称称为组合名称

    NameComponent 对象由两个字段组成:

    1. id - 用作标识符的 String
    2. kind - 可用于任何描述性内容的 String。其重要性在于,可以使用它来描述对象,但不会影响到语法。例如,C 编程语言使用这样的语法约定:将扩展名 ".c" 附加到文件名上指示其为源代码文件。在 NameComponent 对象中,kind 字段可用于描述对象类型,而不是文件扩展名或其他语法约定。kind 字段值的示例如下:字符串 "c_source""object_code""executable""postscript"""kind 字段为空字符串也很常见。

    在名称中,每个 NameComponent 对象(除了最后一个)都表示一个 NamingContext 对象;最后一个 NameComponent 对象表示绑定的对象引用。这类似于路径名,路径名中最后一个名称是文件名,而前面的所有名称都是目录名。

  • public final class Binding - 将名称与对象引用或命名上下文关联的对象。Binding 对象具有两个字段:
    1. binding_name - 表示绑定名称的一个或多个 NameComponent 对象所组成的数组
    2. binding_type - BindingType 对象,该对象指示绑定发生在名称和对象引用之间,还是发生在名称和命名上下文之间

    NamingContext 接口具有一些方法,其中有些用来绑定/取消绑定名称与对象引用或命名上下文,有些用来列举绑定,还有些用来解析绑定(给定名称时,resolve 方法返回绑定到它的对象引用)。

  • public final class BindingType - 一个对象,指定给定的 Binding 对象是名称与对象引用(即非命名上下文)之间的绑定还是名称与命名上下文之间的绑定。

    BindingType 类由两个方法和四个常量组成。这些常量中有两个是 BindingType 对象,另外两个是 int

    BindingType 对象可以传递到 Binding 类的构造方法,也可以用作参数或返回值。这些 BindingType 对象是:

    • public static final BindingType nobject - 指示是与对象引用之间的绑定
    • public static final BindingType ncontext - 指示是与命名上下文之间的绑定

    int 常量可以提供给 from_int 方法以创建 BindingType 对象,也可以作为 value 方法的返回值。这些常量是:

    • public static final int _nobject
    • public static final int _ncontext
    如果提供的 from_int 方法带有的参数是 _nobject_ncontext 之外的任何内容,则它将抛出异常 org.omg.CORBA.BAD_PARAM

    用法如下:

           BindingType btObject = from_int(_nobject);
           BindingType btContext = from_int(_ncontext);
        
    btObject 变量引用 BindingType 对象,该对象初始化后表示一个与对象引用的绑定。btContext 变量引用 BindingType 对象,该对象初始化后表示一个与 NamingContex 对象的绑定。

    value 方法返回 _nobject_ncontext,因此在以下代码行中,变量 bt 将包含 _nobject_ncontext

           int bt = BindingType.value();
        

Holder 类

OMG IDL 使用 OUT 和 INOUT 参数从操作返回值。到 Java 编程语言的映射(不具有 OUT 和 INOUT 参数)为每个类型创建一个特殊类,称为 holder 类。可以将 holder 类的实例作为参数传递给 Java 方法,并可以为该实例的 value 字段分配值。这允许它执行 OUT 和 INOUT 参数的功能。

以下是为 org.omg.CosNaming 包生成的 holder 类:

  • NamingContextHolder
  • BindingIteratorHolder
  • BindingHolder
  • BindingListHolder
  • BindingTypeHolder
  • NameComponentHolder
  • NameHolder

注意,在 org.omg.CORBA 包中,每个基本 Java 类型都有一个 holder 类:IntHolderShortHolderStringHolder,等等。

另请注意,即使不存在 Name 类,也会存在一个 NameHolder 类;类似地,即使不存在 BindingList 类,也会存在一个 BindingListHolder 类。出现这种现象是因为在 OMG IDL 接口中,NameBindingList 都是 typedef。不存在从 IDL typedef 到 Java 结构的映射,但是如果 typedef 用于序列或数组,则会生成 holder 类。与映射到 Java 编程语言一样,NameNameComponent 对象数组,BindingListBinding 对象数组。 所有 holder 类都具有至少两个构造方法和一个字段:

  • value 字段 - 用作 OUT 或 INOUT 参数的类型的实例。例如,NamingContextHoldervalue 字段将是一个 NamingContext 对象。
  • 默认构造方法 - 创建新 holder 对象并使用该类型的默认值初始化的构造方法。例如,用默认构造方法创建的新 BindingHolder 对象的 value 字段将被设置为 null,因为此为对象的默认值。其他默认值有用于 booleanfalse、用于数值和 char 类型的 0 和用于对象引用的 null
  • 实例中的构造方法 - 创建新 holder 对象并使用提供的实例初始化其 value 字段的构造方法

为用户定义类型(Java 类)创建的 holder 类另外还有三种方法,但是应用程序开发人员不直接使用它们。

Helper 类

Helper 类是为 OMG IDL 接口中所有用户定义类型生成的,提供操作这些类型所需的静态方法。

Helper 类中只有一种供应用程序员使用的方法。narrow 方法。只有从 IDL 接口映射的 Java 接口才具有包含 narrow 方法的 helper 类,因此在 CosNaming 包中,只有类 NamingContextHelperBindingIteratorHelper 才具有 narrow 方法。

  • public static NamingContext narrow(org.omg.CORBA.Object obj) - 将给定的 CORBA 对象转换为 NamingContext 对象
  • public static BindingIterator narrow(org.omg.CORBA.Object obj) - 将给定的 CORBA 对象转换为 BindingIterator 对象

org.omg.CosNaming.NamingContextPackage

此包为 org.omg.CosNaming 包中使用的异常以及 NotFoundReason 类(为 NotFound 异常提供原因)提供 Helper 和 Holder 类。

为以下异常提供 Helper 和 Holder 类:

  • AlreadyBound
  • CannotProceed
  • InvalidName
  • NotEmpty
  • NotFound

命名服务兼容性

Sun CosNaming 包的实现遵守 OMG COSNaming 规范。换句话说,Sun 命名服务中的 API 根据 OMG 提供的命名服务指南实现。因此,如果第三方供应商已实现与 OMG 兼容的命名服务,则可以在 Sun 的 CosNaming 实现和第三方供应商的实现之间切换。然而,不同供应商实现命名服务的方式可能稍有不同(如异常字符串不同),理解这一点很重要。

第三方命名服务用法说明

尽管我们鼓励使用出自同一个供应商的 ORB 和 ORB 服务,但使用 Sun 的 RMI-IIOP ORB 插入第三方的 COSNaming 实现也是可能的。以下是要执行的步骤:
  1. 为 Bootstrap 服务器创建属性文件,并在该文件中给出两个条目。例如,可以将此属性文件称为 /tmp/services,并将以下内容置于其中:NameService, <Stringified IOR of the Root Naming Context>

    此操作将 NameService 与要使用的 CosNaming 实现的根命名上下文 (Root Naming Context) 相关联。

  2. 使用以下命令启动独立的 Bootstrap 服务器:
          
          java -classpath $(CLASSPATH)
          com.sun.corba.ee.internal.CosNaming.BootstrapServer -InitialServicesFile
          "/tmp/services" [-ORBInitialPort port]
          
      

    注意,位于命令末尾的方括号指示指定一个可选的端口号。

这时,如果应用程序调用 org.omg.CORBA.ORB.resolve_initial_references 方法,则 CORBA 进程将联系 Bootstrap 服务器来获取根命名上下文。

包规范

相关文档

有关如何使用 CosNaming API 的概述和示例,请参阅:

有关 Java IDL 概述,请参阅:

从以下版本开始:
JDK1.3