词条 | org.omg.PortableServer |
释义 | 软件包 org.omg.PortableServer 的描述提供一些类和接口,用来生成跨多个供应商 ORB 的可移植应用程序的服务器端。 在 Java 中,基于可移植对象适配器(Portable Object Adaptor,POA)的动态框架接口(Dynamic Skeleton Interface,DSI)servant 继承自标准 DynamicImplementation 类,而该类继承自 Servant 类。本机 Servant 类型由 POA 的 PortableServer 模块定义。在 Java 中,Servant 类型被映射到 Java org.omg.PortableServer.Servant 类。它充当所有 POA servant 实现的基类,提供许多可由应用程序员调用的方法,以及可由 POA 本身调用(也可由用户重写)以控制 servant 行为各方面的方法。 包规范有关 Java 2 平台、标准版 v.1.4 遵守的官方 OMG 规范的受支持部分的明确列表,请参阅 Official Specifications for CORBA support in J2SE 1.4。 与 POA 相关的接口PortableServer 模块定义以下与 POA 相关的接口: POA POAManager ServantManager ServantActivator ServantLocator AdapterActivator ThreadPolicy LifespanPolicy IdUniquenessPolicy IdAssignmentPolicy ImplicitActivationPolicy ServantRetentionPolicy RequestProcessingPolicy Current 此外,POA 还定义 Servant 本机类型。 操作类上文列出的每个接口都有一个关联的 Operations 接口。Operations 接口由 idlj 编译器生成,其中包含一些方法签名,用于在与其关联的接口中定义的方法。Operations 接口可以通过客户端和服务器访问,而其关联的接口只能通过客户端调用。 值类 以后缀 PolicyValue 结尾的类提供了 create_POA 调用所使用的值,该调用可设置 POA 的策略。参见以下用来示范的样本代码。PolicyValue 文件包括以下内容: IdAssignmentPolicyValue IdUniquenessPolicyValue ImplicitActivationPolicyValue LifespanPolicyValue RequestProcessingPolicyValue ServantRetentionPolicyValue ThreadPolicyValue Helper 类Helper 类是为 OMG IDL 接口中所有用户定义类型生成的,提供操作这些类型所需的静态方法。Helper 类中只有一种供应用程序员使用的方法。narrow 方法。只有 IDL 接口所映射的 Java 接口才有包含 narrow 方法的 helper 类,因此在 PortableServer 包中,只有以下类才具有 narrow 方法: ForwardRequestHelper ServantActivatorHelper ServantLocatorHelper POA 类POA 类用于实现 ServantActivator 或 ServantLocator。 异常ForwardRequest 异常指示 ORB 负责将当前请求和后续 ForwardRequest 请求传递给异常的 forward_reference 成员所表示的对象。 应用程序员所实现的接口 PortableServer 执行的大部分操作对用户是透明的。因此程序员将只能使用一小部分上述接口。剩余的接口将由 ORB 实现提供。应用程序员所需的接口如下: AdapterActivator 适配器激活器与 POA 关联。适配器激活器提供具有随需创建子 POA 功能的 POA。产生这一需求可能是接受指定子 POA(或其中一个子 POA)的请求所带来的副作用,调用 find_POA 时将 activate 参数值设置为 TRUE 也需要创建子 POA。创建所有所需 POA 的应用服务器在刚开始执行时不需要使用或提供适配器激活器;只有在请求处理期间需要创建 POA 时才有必要这样做。 ServantLocator 当 POA 具有 NON_RETAIN 策略时,使用 ServantLocator 这种 servant 管理器。 ServantActivator 当 POA 具有 RETAIN 策略时,使用 ServantActivator 这种 servant 管理器。 org.omg.PortableServer.ServantLocatorPackage 包 此包提供一个 CookieHolder 类,将 Cookie 类型作为 out 参数传递。CookieHolder 类与其他基本类型的 holder 类完全一样。 相关文档有关 Java IDL 概述,请参见: Java IDL 主页。 代码示例实例服务器代码 import javax.naming.InitialContext; import javax.naming.Context; import javax.rmi.PortableRemoteObject ; import com.sun.corba.se.impl.poa.POAORB; import org.omg.PortableServer.*; import java.util.*; import org.omg.CORBA.*; import javax.rmi.CORBA.Stub; import javax.rmi.CORBA.Util; public class HelloServer { public HelloServer(String[] args) { try { Properties p = System.getProperties(); // p.put("org.omg.CORBA.ORBClass", "com.sun.corba.ee.internal.POA.POAORB"); ORB orb = ORB.init( args, p ); POA rootPOA = (POA)orb.resolve_initial_references("RootPOA"); Policy[] tpolicy = new Policy[3]; tpolicy[0] = rootPOA.create_lifespan_policy( LifespanPolicyValue.TRANSIENT ); tpolicy[1] = rootPOA.create_request_processing_policy( RequestProcessingPolicyValue.USE_ACTIVE_OBJECT_MAP_ONLY ); tpolicy[2] = rootPOA.create_servant_retention_policy( ServantRetentionPolicyValue.RETAIN); POA tpoa = rootPOA.create_POA("MyTransientPOA", null, tpolicy); String ObjectId = "MyObjectId"; byte[] oid = ObjectId.getBytes(); org.omg.CORBA.Object obj = tpoa.create_reference_with_id(oid, new _HelloImpl_Tie()._all_interfaces(tpoa, oid)[0]); HelloInterface helloRef = (HelloInterface)PortableRemoteObject.narrow( obj, HelloInterface.class ); Context initialNamingContext = new InitialContext(); initialNamingContext.rebind("HelloService", helloRef); System.out.println("Hello Server: Ready..."); orb.run(); } catch (Exception e) { System.out.println("Trouble:" + e); e.printStackTrace(); } } public static void main(String args[]) { new HelloServer( args ); } } 从以下版本开始: 1.4 |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。