src/share/classes/com/sun/corba/se/spi/oa/ObjectAdapterBase.java

Thu, 31 Aug 2017 18:10:36 +0800

author
aoqi
date
Thu, 31 Aug 2017 18:10:36 +0800
changeset 748
6845b95cba6b
parent 158
91006f157c46
parent 0
7ef37b2cdcad
permissions
-rw-r--r--

merge

     1 /*
     2  * Copyright (c) 2001, 2003, Oracle and/or its affiliates. All rights reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     5  * This code is free software; you can redistribute it and/or modify it
     6  * under the terms of the GNU General Public License version 2 only, as
     7  * published by the Free Software Foundation.  Oracle designates this
     8  * particular file as subject to the "Classpath" exception as provided
     9  * by Oracle in the LICENSE file that accompanied this code.
    10  *
    11  * This code is distributed in the hope that it will be useful, but WITHOUT
    12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    14  * version 2 for more details (a copy is included in the LICENSE file that
    15  * accompanied this code).
    16  *
    17  * You should have received a copy of the GNU General Public License version
    18  * 2 along with this work; if not, write to the Free Software Foundation,
    19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    20  *
    21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    22  * or visit www.oracle.com if you need additional information or have any
    23  * questions.
    24  */
    25 package com.sun.corba.se.spi.oa ;
    27 import org.omg.PortableInterceptor.ObjectReferenceTemplate ;
    28 import org.omg.PortableInterceptor.ObjectReferenceFactory ;
    30 import org.omg.CORBA.Policy ;
    32 import org.omg.PortableInterceptor.ACTIVE ;
    34 import com.sun.corba.se.spi.copyobject.ObjectCopierFactory ;
    35 import com.sun.corba.se.spi.ior.IORFactories ;
    36 import com.sun.corba.se.spi.ior.IORTemplate ;
    37 import com.sun.corba.se.spi.ior.ObjectAdapterId;
    38 import com.sun.corba.se.spi.ior.ObjectKeyTemplate ;
    39 import com.sun.corba.se.spi.logging.CORBALogDomains ;
    40 import com.sun.corba.se.spi.oa.OADestroyed ;
    41 import com.sun.corba.se.spi.oa.ObjectAdapter ;
    42 import com.sun.corba.se.spi.orb.ORB ;
    43 import com.sun.corba.se.spi.protocol.PIHandler ;
    45 import com.sun.corba.se.impl.logging.POASystemException ;
    46 import com.sun.corba.se.impl.logging.OMGSystemException ;
    47 import com.sun.corba.se.impl.oa.poa.Policies;
    49 abstract public class ObjectAdapterBase extends org.omg.CORBA.LocalObject
    50     implements ObjectAdapter
    51 {
    52     private ORB orb;
    54     // Exception wrappers
    55     private final POASystemException _iorWrapper ;
    56     private final POASystemException _invocationWrapper ;
    57     private final POASystemException _lifecycleWrapper ;
    58     private final OMGSystemException _omgInvocationWrapper ;
    59     private final OMGSystemException _omgLifecycleWrapper ;
    61     // Data related to the construction of object references and
    62     // supporting the Object Reference Template.
    63     private IORTemplate iortemp;
    64     private byte[] adapterId ;
    65     private ObjectReferenceTemplate adapterTemplate ;
    66     private ObjectReferenceFactory currentFactory ;
    68     public ObjectAdapterBase( ORB orb )
    69     {
    70         this.orb = orb ;
    71         _iorWrapper = POASystemException.get( orb,
    72             CORBALogDomains.OA_IOR ) ;
    73         _lifecycleWrapper = POASystemException.get( orb,
    74             CORBALogDomains.OA_LIFECYCLE ) ;
    75         _omgLifecycleWrapper = OMGSystemException.get( orb,
    76             CORBALogDomains.OA_LIFECYCLE ) ;
    77         _invocationWrapper = POASystemException.get( orb,
    78             CORBALogDomains.OA_INVOCATION ) ;
    79         _omgInvocationWrapper = OMGSystemException.get( orb,
    80             CORBALogDomains.OA_INVOCATION ) ;
    81     }
    83     public final POASystemException iorWrapper()
    84     {
    85         return _iorWrapper ;
    86     }
    88     public final POASystemException lifecycleWrapper()
    89     {
    90         return _lifecycleWrapper ;
    91     }
    93     public final OMGSystemException omgLifecycleWrapper()
    94     {
    95         return _omgLifecycleWrapper ;
    96     }
    98     public final POASystemException invocationWrapper()
    99     {
   100         return _invocationWrapper ;
   101     }
   103     public final OMGSystemException omgInvocationWrapper()
   104     {
   105         return _omgInvocationWrapper ;
   106     }
   108     /*
   109      * This creates the complete template.
   110      * When it is done, reference creation can proceed.
   111      */
   112     final public void initializeTemplate( ObjectKeyTemplate oktemp,
   113         boolean notifyORB, Policies policies, String codebase,
   114         String objectAdapterManagerId, ObjectAdapterId objectAdapterId)
   115     {
   116         adapterId = oktemp.getAdapterId() ;
   118         iortemp = IORFactories.makeIORTemplate(oktemp) ;
   120         // This calls acceptors which create profiles and may
   121         // add tagged components to those profiles.
   122         orb.getCorbaTransportManager().addToIORTemplate(
   123             iortemp, policies,
   124             codebase, objectAdapterManagerId, objectAdapterId);
   126         adapterTemplate = IORFactories.makeObjectReferenceTemplate( orb,
   127             iortemp ) ;
   128         currentFactory = adapterTemplate ;
   130         if (notifyORB) {
   131             PIHandler pih = orb.getPIHandler() ;
   132             if (pih != null)
   133                 // This runs the IORInterceptors.
   134                 pih.objectAdapterCreated( this ) ;
   135         }
   137         iortemp.makeImmutable() ;
   138     }
   140     final public org.omg.CORBA.Object makeObject( String repId, byte[] oid )
   141     {
   142         return currentFactory.make_object( repId, oid ) ;
   143     }
   145     final public byte[] getAdapterId()
   146     {
   147         return adapterId ;
   148     }
   150     final public ORB getORB()
   151     {
   152         return orb ;
   153     }
   155     abstract public Policy getEffectivePolicy( int type ) ;
   157     final public IORTemplate getIORTemplate()
   158     {
   159         return iortemp ;
   160     }
   162     abstract public int getManagerId() ;
   164     abstract public short getState() ;
   166     final public ObjectReferenceTemplate getAdapterTemplate()
   167     {
   168         return adapterTemplate ;
   169     }
   171     final public ObjectReferenceFactory getCurrentFactory()
   172     {
   173         return currentFactory ;
   174     }
   176     final public void setCurrentFactory( ObjectReferenceFactory factory )
   177     {
   178         currentFactory = factory ;
   179     }
   181     abstract public org.omg.CORBA.Object getLocalServant( byte[] objectId ) ;
   183     abstract public void getInvocationServant( OAInvocationInfo info ) ;
   185     abstract public void returnServant() ;
   187     abstract public void enter() throws OADestroyed ;
   189     abstract public void exit() ;
   191     abstract protected ObjectCopierFactory getObjectCopierFactory() ;
   193     // Note that all current subclasses share the same implementation of this method,
   194     // but overriding it would make sense for OAs that use a different InvocationInfo.
   195     public OAInvocationInfo makeInvocationInfo( byte[] objectId )
   196     {
   197         OAInvocationInfo info = new OAInvocationInfo( this, objectId ) ;
   198         info.setCopierFactory( getObjectCopierFactory() ) ;
   199         return info ;
   200     }
   202     abstract public String[] getInterfaces( Object servant, byte[] objectId ) ;
   203 }

mercurial