Module  java.corba

Package org.omg.PortableServer

提供类和接口,使您的应用程序的服务器端可跨多厂商ORBs移植。

在Java中,基于可移植对象适配器(POA)的动态骨架接口(DSI)服务器继承自DynamicImplementation类的标准Servant类。 原生Servant类型由POA的PortableServer模块定义。 在Java中, Servant类型映射到Java org.omg.PortableServer.Servant类。 它用作所有POA服务器实现的基类,并提供了可以由应用程序员调用的多种方法,以及由POA自身调用并可被用户覆盖以控制仆人行为方面的方法。

包装规格

有关官方OMG规范的支持部分的精确列表,Java [tm] Platform,Standard Edition 6符合,请参阅Official Specifications for CORBA support in Java[tm] SE 6

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设置策略。 请参阅下面的sample code进行演示。 PolicyValue文件包括以下内容:
  • IdAssignmentPolicyValue
  • IdUniquenessPolicyValue
  • ImplicitActivationPolicyValue
  • LifespanPolicyValue
  • RequestProcessingPolicyValue
  • ServantRetentionPolicyValue
  • ThreadPolicyValue

助手班

为OMG IDL接口中的所有用户定义类型生成的助手类提供了处理这些类型所需的静态方法。 应用程序员使用的辅助类中只有一种方法: narrow方法。 只有从IDL接口映射的Java接口将具有一个包含narrow方法的帮助类,所以在PortableServer包中,只有以下类有一个narrow方法:

  • ForwardRequestHelper
  • ServantActivatorHelper
  • ServantLocatorHelper

POA类

POA类用于实现ServantActivatorServantLocator

例外

ForwardRequest异常向ORB表明它负责将当前请求和后续的ForwardRequest请求传递给异常的forward_reference成员中的对象。

应用程序员实现的接口

PortableServer大部分内容对用户来说都是透明的。 结果是程序员只会使用上面提到的几个接口。 剩余的接口将由ORB实现提供。 应用程序员感兴趣的界面如下:

  • AdapterActivator

    适配器激活器与POA相关联。 适配器激活器提供一个POA,按需创建子POA的能力,作为接收请求名称的子POA(或它的一个子)的副作用,或当find_POA被调用的激活参数值TRUE 在执行开始时创建其所需的所有POA的应用服务器不需要使用或提供适配器激活器; 只有在请求处理期间需要创建POA的情况下才有必要。

  • ServantLocator

    当POA具有NON_RETAIN策略时,它将使用ServantLocator s的业务经理。

  • ServantActivator

    当POA具有RETAIN策略时,它将使用ServantActivator s的业务经理。

套装org.omg.PortableServer.ServantLocatorPackage

该包提供CookieHolder类,用于传递Cookie类型作为out参数。 CookieHolder类与基本类型的其他持有者类完全相同。

相关文档

有关Java IDL的概述,请参阅: Java IDL home page

示例代码

服务器代码示例

  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