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 ; 26 27 import org.omg.PortableInterceptor.ObjectReferenceTemplate ; 28 import org.omg.PortableInterceptor.ObjectReferenceFactory ; 29 30 import org.omg.CORBA.Policy ; 31 32 import org.omg.PortableInterceptor.ACTIVE ; 33 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 ; 44 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; 48 49 abstract public class ObjectAdapterBase extends org.omg.CORBA.LocalObject 50 implements ObjectAdapter 51 { 52 private ORB orb; 53 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 ; 60 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 ; 67 ObjectAdapterBase( ORB orb )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 } 82 iorWrapper()83 public final POASystemException iorWrapper() 84 { 85 return _iorWrapper ; 86 } 87 lifecycleWrapper()88 public final POASystemException lifecycleWrapper() 89 { 90 return _lifecycleWrapper ; 91 } 92 omgLifecycleWrapper()93 public final OMGSystemException omgLifecycleWrapper() 94 { 95 return _omgLifecycleWrapper ; 96 } 97 invocationWrapper()98 public final POASystemException invocationWrapper() 99 { 100 return _invocationWrapper ; 101 } 102 omgInvocationWrapper()103 public final OMGSystemException omgInvocationWrapper() 104 { 105 return _omgInvocationWrapper ; 106 } 107 108 /* 109 * This creates the complete template. 110 * When it is done, reference creation can proceed. 111 */ initializeTemplate( ObjectKeyTemplate oktemp, boolean notifyORB, Policies policies, String codebase, String objectAdapterManagerId, ObjectAdapterId objectAdapterId)112 final public void initializeTemplate( ObjectKeyTemplate oktemp, 113 boolean notifyORB, Policies policies, String codebase, 114 String objectAdapterManagerId, ObjectAdapterId objectAdapterId) 115 { 116 adapterId = oktemp.getAdapterId() ; 117 118 iortemp = IORFactories.makeIORTemplate(oktemp) ; 119 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); 125 126 adapterTemplate = IORFactories.makeObjectReferenceTemplate( orb, 127 iortemp ) ; 128 currentFactory = adapterTemplate ; 129 130 if (notifyORB) { 131 PIHandler pih = orb.getPIHandler() ; 132 if (pih != null) 133 // This runs the IORInterceptors. 134 pih.objectAdapterCreated( this ) ; 135 } 136 137 iortemp.makeImmutable() ; 138 } 139 makeObject( String repId, byte[] oid )140 final public org.omg.CORBA.Object makeObject( String repId, byte[] oid ) 141 { 142 return currentFactory.make_object( repId, oid ) ; 143 } 144 getAdapterId()145 final public byte[] getAdapterId() 146 { 147 return adapterId ; 148 } 149 getORB()150 final public ORB getORB() 151 { 152 return orb ; 153 } 154 getEffectivePolicy( int type )155 abstract public Policy getEffectivePolicy( int type ) ; 156 getIORTemplate()157 final public IORTemplate getIORTemplate() 158 { 159 return iortemp ; 160 } 161 getManagerId()162 abstract public int getManagerId() ; 163 getState()164 abstract public short getState() ; 165 getAdapterTemplate()166 final public ObjectReferenceTemplate getAdapterTemplate() 167 { 168 return adapterTemplate ; 169 } 170 getCurrentFactory()171 final public ObjectReferenceFactory getCurrentFactory() 172 { 173 return currentFactory ; 174 } 175 setCurrentFactory( ObjectReferenceFactory factory )176 final public void setCurrentFactory( ObjectReferenceFactory factory ) 177 { 178 currentFactory = factory ; 179 } 180 getLocalServant( byte[] objectId )181 abstract public org.omg.CORBA.Object getLocalServant( byte[] objectId ) ; 182 getInvocationServant( OAInvocationInfo info )183 abstract public void getInvocationServant( OAInvocationInfo info ) ; 184 returnServant()185 abstract public void returnServant() ; 186 enter()187 abstract public void enter() throws OADestroyed ; 188 exit()189 abstract public void exit() ; 190 getObjectCopierFactory()191 abstract protected ObjectCopierFactory getObjectCopierFactory() ; 192 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. makeInvocationInfo( byte[] objectId )195 public OAInvocationInfo makeInvocationInfo( byte[] objectId ) 196 { 197 OAInvocationInfo info = new OAInvocationInfo( this, objectId ) ; 198 info.setCopierFactory( getObjectCopierFactory() ) ; 199 return info ; 200 } 201 getInterfaces( Object servant, byte[] objectId )202 abstract public String[] getInterfaces( Object servant, byte[] objectId ) ; 203 } 204