<div> JavaScript is disabled on your browser.
Skip navigation links
Java™ Platform
Standard Ed. 8

Package org.omg.CORBA

提供了对OMG的CORBA映射的API TM java编程语言,包括班级 ORB,并使程序员可以使用它作为一个全功能的对象请求代理(ORB)。

See: 描述

Package org.omg.CORBA Description

提供了对OMG的CORBA映射的API TM java编程语言,包括班级 ORB,并使程序员可以使用它作为一个全功能的对象请求代理(ORB)。

对于精确的名单支持官方的CORBA规范的java [商标]平台部分,标准版6符合,看到Official Specifications for CORBA support in Java[TM] SE 6

一般信息

此部分中的信息是有人编写的接口定义语言(IDL)相关信息文件和使用ORB编写客户端和服务器。

在本节中描述的类和接口可以分为四组:ORB classes,例外,Helper类,和Holder类。

ORB

ORB处理(或经纪人)服务器上的客户端和方法的实现方法调用之间。因为客户端和服务器可以在网络的任何地方,因为调用的实现可能是写在不同的编程语言,一个球体做大量的幕后工作,完成通信。

大多数是ORB确实对用户是完全透明的,和CORBA包的主要部分由幕后的ORB使用的类。其结果是,大多数程序员将只使用这个包的一小部分。事实上,大多数程序员都会使用从ORB类,只有少数方法有些例外,偶尔,一架类。

ORB方法

在一个应用程序进入CORBA环境,它必须首先:

下列操作提供初始化应用程序,并获得适当的对象引用:

当应用程序需要一个CORBA环境需要一种机制来获得一个对象引用,可能一个OA对象引用(如根POA)。这有两个目的。首先,它初始化应用程序到ORB和办公环境。其次,它返回的对象引用和对象引用OA在将来使用ORB和OA操作中的应用。

为了获得一个对象引用,应用程序调用ORB.init操作。在调用参数可以包括该对象引用所需的ORB的标识符,和arg_list,以允许特定环境下的数据被传递到调用。

这些都是ORB方法提供访问ORB:

没有参数init()方法启动一个单独的天体,它只能给anys TypeCode创作的idlj在辅助类生成的代码需要。

应用程序需要一个便携式的装置,以获得他们的初始对象引用。引用的根早熟,早熟的电流,接口库,以及各种服务的对象实例。应用程序所需的功能与命名服务提供的功能类似。然而,OMG不想授权,命名服务可以为所有的应用程序,他们可以随身携带的初始化。因此,在本节中显示的操作提供了一个简化的、应用程序可以使用的本地版本的命名服务,以获得一个小的、定义的对象引用集,其操作是必不可少的。由于只有一个小的定义的一组对象的预期与这个机制,命名上下文可以被夷为平地是一个单一的级名称空间。这种简化的结果只有两个操作被定义,以实现所需的功能。

通过两个作业在ORB对象接口提供了初步参考,列出和解决初始对象的引用提供设施。这些都是:

一个例子,使用这些方法的一些 Getting Started with Java IDL

例外

异常在java语言中相似的任何代码用java编程语言编写的。如果一个方法的定义是抛出一个异常,那么任何代码使用方法必须有 try / catch块和处理异常时抛出。

Java IDL exceptions文档有更多的信息和解释之间的差异,系统异常和自定义异常。

下面是一个列表的系统异常(即未检查的异常继承通过 org.omg.CORBA.SystemExceptionjava.lang.RuntimeException),在包org.omg.CORBA定义:


        BAD_CONTEXT
        BAD_INV_ORDER
        BAD_OPERATION
        BAD_PARAM
        BAD_TYPECODE
        COMM_FAILURE
        DATA_CONVERSION
        FREE_MEM
        IMP_LIMIT
        INITIALIZE
        INTERNAL
        INTF_REPOS
        INVALID_TRANSACTION
        INV_FLAG
        INV_IDENT
        INV_OBJREF
        INV_POLICY
        MARSHAL
        NO_IMPLEMENT
        NO_MEMORY
        NO_PERMISSION
        NO_RESOURCES
        NO_RESPONSE
        OBJECT_NOT_EXIST
        OBJ_ADAPTER
        PERSIST_STORE
        TRANSACTION_REQUIRED
        TRANSACTION_ROLLEDBACK
        TRANSIENT
        UNKNOWN

以下列出的是用户定义的异常在包org.omg.CORBA定义。


        Bounds
        UnknownUserException
        WrongTransaction 
        PolicyError

子包

CORBA包里面的一些包装的“包装”作为其名称的一部分。这些包一般比较小,因为他们所做的一切都是为在 CORBA封装的接口和类的使用异常或类。

例如,包 org.omg.CORBA.TypeCodePackage包含两个例外用类中的方法被TypeCode。这些例外是:

org.omg.CORBA.ORBPackage包含两个例外:

另一个包,一个分装CORBA portable包。它提供了一组API,使得ORB代码通过一个供应商的IDL编译器生成的运行在另一个供应商的宝珠。

架类

支持out和inout参数传递模式需要额外的支架类的使用。因为java编程语言不支持或INOUT参数,人类需要传递一个参数,可以修改的方法。支持便携式的存根和骨架,人类也实现org.omg.CORBA.portable.Streamable 接口。

人类所指定的附加“持有人”的类型的名称。该类型的名称是指它的名字在java编程语言。例如,一个界面的java编程语言中的类命名Account持有人将被命名为AccountHolder

人的类可用于所有的org.omg.CORBA包IDL基本数据类型。所以,例如,已经有LongHolderShortHolderFloatHolder定义类,等等。课程还为所有用户定义的IDL类型命名的除外typedefs定义的产生。(请注意,在这种情况下,用户定义类型,包括在OMG规范如界面库,定义和其他OMG服务。)

每个持有人类都有:

默认构造函数设置值字段的类型由java语言定义的默认值:

作为一个例子,如果界面Account,在OMG IDL定义,映射到java编程语言,下面的人会产生类:

最终实现公共类账户org.omg.corba.portable.streamable{持有帐户对象的字段公共帐户值=空;/默认构造函数公共账户(){}//创建一个新账户初值公共账户(账户初始值){价值=初值;}读写我的内容,并将内容分配给价值公共无效_read(org.omg.corba.portable.inputstream我){价值= accounthelper.read(我);}将值写入到公共无效_write(org.omg.corba.portable.outputstream O){accounthelper.write(O,值);}//返回账户TypeCode公共org.omg.corba.typecode _type(){返回accounthelper.type();}}

在人类的更多信息,参见1.4章,在 OMG IDL to Java Language Mapping基本类型映射。人类包中定义的org.omg.CORBA是:

z-c4b398a1- 315d-424a-88c7-4c4c27be6069

辅助类

帮助文件提供了操作类型所需的几种静态方法。这些措施包括:

一个映射的IDL接口或抽象接口的辅助类,也包括狭义的操作(S)。静态方法允许一个org.omg.CORBA.Object窄被缩小到一个更具体的类型的对象的引用。IDL的例外是如果CORBA.BAD_PARAM窄不能因为对象的引用不支持请求的类型扔。提出了一个不同的系统异常来表示其他类型的错误。在狭窄的null总会有null返回值成功。通常,一个应用程序采用的是narrow方法唯一的辅助方法。其他方法通常是在幕后使用,对程序员来说是透明的。

辅助类可分为两大类,helpers for value typeshelpers for non value types。由于在一个类别中的所有辅助类提供了相同的方法,这里介绍了一个类的辅助类的一个通用的解释。

当OMG IDL映射到java编程语言,一个“帮手”班是为每个用户定义类型的产生。这个生成的类将有名称的用户定义类型的后缀Helper附加。例如,如果界面Account是OMG IDL定义的idlj编译器会自动生成一个名为AccountHelper类。的AccountHelper类将包含操纵类型的实例的静态方法,在这种情况下,Account对象。

narrow方法

当对象是一个方法的返回值,它是一个通用对象的形式返回,要么 org.omg.CORBA.Object对象或 java.lang.Object对象。此对象必须被转换到它的更具体的类型之前,它可以操作。例如,一个 Account对象将作为一个通用的对象又必须缩小到一个 Account对象使 Account方法可能会叫它。

narrow法有两种形式,一种以org.omg.CORBA.Object对象之一,以java.lang.Object对象。接口是否是抽象的或不确定的narrow方法其助手类将提供。一个接口,而不是抽象的辅助类都会有一个narrow方法采用CORBA对象,而接口是抽象的narrow方法将对象在java编程语言。对于一个非抽象接口,至少有一个抽象基类的接口将提供的narrow法版本的助手类。

Hello World教程使用narrow方法看起来像这样:

//创建和初始化ORB球球=球体。init(args,null);获取根命名上下文org.omg.corba.object ObjRef =球体。resolve_initial_references(“命名服务”);/ /使用而不是NamingContext namingcontextext。这是最新的可操作的命名服务的一部分。namingcontextext ncref = namingcontextexthelper窄(对象引用);在命名中解析对象引用字符串名称=“你好”;helloimpl = hellohelper。窄(ncref。resolve_str(名字));

一个基本的辅助类的例子

基本辅助类,对于这种解释的目的,是一个有每一个辅助类提供的方法,再加上一个 narrow方法如果在OMG IDL映射到java编程语言接口定义的类型。不为值类型的类型将有一个为它们生成的基本辅助类。

例如,假设界面Account不是值类型的IDL类型也不是一个抽象的接口,没有抽象的接口,其AccountHelper类将看起来像这样:

摘要公共类accounthelper{私有静态字符串_id =“IDL:帐号:1”;将一个帐户对象插入到一个对象中public static void插入(org.omg.corba.any,帐户){org.omg.corba.portable.outputstream = a.create_output_stream();用户类型(式());写(出来,那);a.read_value(out.create_input_stream(),式());}从任何对象提取一个帐户对象公共静态账户提取(org.omg.corba.any一){回读(a.create_input_stream());}私有静态org.omg.corba.typecode __typecode = null;//获取TypeCode这种类型同步静态org.omg.corba.typecode型(){如果(__typecode = = null){__typecode = org.omg.corba.orb.init()。create_interface_tc(accounthelper.id(),“帐户”);}返回__typecode;}获取此类型的存储库标识公共静态字符串标识(){返回_id;}从输入流读取一个帐户对象公共静态账户读(org.omg.corba.portable.inputstream istream){返回窄(istream.read_object(_accountstub。类));}/ /写一个帐户对象的输出流public static void写(org.omg.corba.portable.outputstream ostream,账户价值){ostream.write_object((org。OMG CORBA对象。)值);}/ /转换(缩小)一个对象的帐户对象公共静态账户窄(org.omg.corba.object obj){如果(obj = = null)返回null;else if(obj instanceof帐户)返回(账户)对象;否则如果(!obj。_is_a(ID()))把新的org.omg.corba.bad_param();其他的{org.omg.corba.portable.delegate代表=((org。OMG的CORBA。便携式。objectimpl)obj)。_get_delegate();_accountstub存根=新_accountstub();存根。_set_delegate(委托);返回存根;}}}

值类型辅助类

为值类型的辅助类包括非价值型方法产生相同的方法不同的效果图。主要的区别是值类型,可以通过值作为方法参数或返回值传递的类型,这意味着他们必须是可序列化的。

假设Address是值类型,类的AddressHelper将看起来像这样:

摘要公共类addresshelper{私有静态字符串_id =“IDL:地址:1”;和非值型相同public static void插入(org.omg.corba.any,地址){org.omg.corba.portable.outputstream = a.create_output_stream();用户类型(式());写(出来,那);a.read_value(out.create_input_stream(),式());}和非值型相同公共静态地址提取(org.omg.corba.any一){回读(a.create_input_stream());}私有静态org.omg.corba.typecode __typecode = null;私有静态布尔__active = false;//得到TypeCode的类型同步静态org.omg.corba.typecode型(){如果(__typecode = = null){同步(org。OMG的CORBA。TypeCode。类){如果(__typecode = = null){如果(__active){回到牛津。OMG的CORBA ORB()。。。。create_recursive_tc(_id);}__active =真;org。OMG CORBA。ValueMember [ ] _members0 =新组织。OMG的CORBA ValueMember [ 0 ];org.omg.corba.typecode _tcof_members0 = null;__typecode = org.omg.corba.orb.init()。create_value_tc(_id,“地址”,org.omg.corba.vm_none.value,null,_members0);__active = false;}}}返回__typecode;}和非值型相同公共静态字符串标识(){返回_id;}//读取序列化实例的地址从给定的输入流公共静态地址读(org.omg.corba.portable.inputstream istream){返回(地址)((org。OMG。corba_2_3。便携式。InputStream)istream)。read_value(ID());}/ /写地址的序列化实例给出的输出流public static void写(org.omg.corba.portable.outputstream ostream,地址值){((org。OMG。corba_2_3。便携式。OutputStream)ostream)。write_value(值、ID());}}

助手类中定义的包org.omg.CORBA是:


     AnySeqHelper      BooleanSeqHelper      CharSeqHelper      CompletionStatusHelper      CurrentHelper      DefinitionKindHelper      DoubleSeqHelper      FieldNameHelper      FloatSeqHelper      IdentifierHelper      IDLTypeHelper      LongLongSeqHelper      LongSeqHelper      NameValuePairHelper      ObjectHelper      OctetSeqHelper      ParameterModeHelper      PolicyErrorCodeHelper      PolicyErrorHelper      PolicyHelper      PolicyListHelper      PolicyTypeHelper      RepositoryIdHelper      ServiceDetailHelper      ServiceInformationHelper      SetOverrideTypeHelper      ShortSeqHelper      StringSeqHelper      StringValueHelper      StructMemberHelper      ULongLongSeqHelper      ULongSeqHelper      UnionMemberHelper      UnknownUserExceptionHelper      UShortSeqHelper      ValueBaseHelper      ValueMemberHelper      VersionSpecHelper      VisibilityHelper      WCharSeqHelper      WrongTransactionHelper      WStringSeqHelper      WStringValueHelper

其他类

其它类和接口的 CORBA封装,可在幕后,可以分成四组。三的组中使用的一些能力的请求,和第四组,关于接口库,是一个类别本身。

通过一个球体创建的类

第一组包含由一个球体创建包含用于请求操作的信息类。

处理请求的类

类处理请求的第二组:

作为常量的接口

第三组包含接口作为常数。IDL映射到java命令IDL映射到一个枚举枚举值表示为公共静态字段在类的java类(如definitionkind)。另一方面,IDL定义的常数IDL接口外部映射到每一个恒定的java接口。

这就是为什么在org.omg.CORBA包几个接口包括一个单一的领域,value,这是一个short。此字段是一个常量用于这些东西的错误代码或值修改剂。例如,该接口BAD_POLICYvalue场是一种例外PolicyError被抛出的可能原因。指定的错误代码,你可以使用BAD_POLICY.value

例外PolicyError使用下列接口的value场为可能的错误代码。

方法 TypeCode.type_modifier返回下面的接口 value场。在这些接口的名称 VM代表“价值性”。 以下常数 ValueMember返回的对象的访问的方法来表示的 ValueMember对象的可见性。 这些标志,用于 NamedValue对象或作为参数的方法,在下面的接口定义:

接口存储接口和类

四分之一组包含接口库的接口和类,它是由OMG IDL接口 ir.idl idlj编译器生成的。该接口库的目的是识别接口存储在它,他们可以通过ORB进行访问。各模块、类型、接口、属性、操作、参数、异常、常数等都完全由接口库的接口来描述。

一个球不需要有一个接口库,和java IDL不包含一个。尽管这个版本不包括一个接口库的实现,下面的红外类和接口已被列入创建typecodes的目的(见create_value_tc,create_struct_tc,界面组织。create_union_tc和OMG的CORBA ORB create_exception_tc方法。。):
&nbs


相关文件

概述、指南和教程,请参阅:

在java IDL不功能实现的CORBA

一些API包含在org.omg子包提供了与目前OMG的CORBA规范的一致性而不是在jdkTM Sun发布实施。这使得其他JDK的持牌人在标准的扩展和产品提供的API实现。

的特点,把no_implement

一些API包含在org.omg子包扔NO_IMPLEMENT因各种原因例外。在这些原因中:

在这个版本中没有实现的功能或原料药的一般摘要:


在包装org.omg.CORBA的未实现的功能具体名单

z-d639c79b-0dd5-4c36-bce0-5d7b963ed 沪麦4号
从以下版本开始:
JDK1.2
Skip navigation links
Java™ Platform
Standard Ed. 8

Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.

本帮助文档是使用 《百度翻译》翻译,请与英文版配合使用 by--QQ:654638585