Mon, 28 May 2018 10:29:43 +0800
Merge
aoqi@0 | 1 | /* |
aoqi@0 | 2 | * Copyright (c) 2002, 2004, Oracle and/or its affiliates. All rights reserved. |
aoqi@0 | 3 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
aoqi@0 | 4 | * |
aoqi@0 | 5 | * This code is free software; you can redistribute it and/or modify it |
aoqi@0 | 6 | * under the terms of the GNU General Public License version 2 only, as |
aoqi@0 | 7 | * published by the Free Software Foundation. Oracle designates this |
aoqi@0 | 8 | * particular file as subject to the "Classpath" exception as provided |
aoqi@0 | 9 | * by Oracle in the LICENSE file that accompanied this code. |
aoqi@0 | 10 | * |
aoqi@0 | 11 | * This code is distributed in the hope that it will be useful, but WITHOUT |
aoqi@0 | 12 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
aoqi@0 | 13 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
aoqi@0 | 14 | * version 2 for more details (a copy is included in the LICENSE file that |
aoqi@0 | 15 | * accompanied this code). |
aoqi@0 | 16 | * |
aoqi@0 | 17 | * You should have received a copy of the GNU General Public License version |
aoqi@0 | 18 | * 2 along with this work; if not, write to the Free Software Foundation, |
aoqi@0 | 19 | * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
aoqi@0 | 20 | * |
aoqi@0 | 21 | * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
aoqi@0 | 22 | * or visit www.oracle.com if you need additional information or have any |
aoqi@0 | 23 | * questions. |
aoqi@0 | 24 | */ |
aoqi@0 | 25 | |
aoqi@0 | 26 | package com.sun.corba.se.impl.orb ; |
aoqi@0 | 27 | |
aoqi@0 | 28 | import java.lang.reflect.InvocationTargetException; |
aoqi@0 | 29 | import java.lang.reflect.Method; |
aoqi@0 | 30 | import java.net.InetAddress ; |
aoqi@0 | 31 | import java.security.PrivilegedAction ; |
aoqi@0 | 32 | import java.security.PrivilegedExceptionAction ; |
aoqi@0 | 33 | import java.security.AccessController ; |
aoqi@0 | 34 | import java.util.Collection ; |
aoqi@0 | 35 | import java.util.Iterator ; |
aoqi@0 | 36 | |
aoqi@0 | 37 | import org.omg.CORBA.CompletionStatus ; |
aoqi@0 | 38 | import org.omg.CORBA.portable.ValueFactory ; |
aoqi@0 | 39 | |
aoqi@0 | 40 | import com.sun.corba.se.pept.protocol.ClientRequestDispatcher ; |
aoqi@0 | 41 | import com.sun.corba.se.pept.transport.Acceptor; |
aoqi@0 | 42 | |
aoqi@0 | 43 | import com.sun.corba.se.spi.activation.Locator ; |
aoqi@0 | 44 | import com.sun.corba.se.spi.activation.Activator ; |
aoqi@0 | 45 | import com.sun.corba.se.spi.activation.LocatorHelper ; |
aoqi@0 | 46 | import com.sun.corba.se.spi.activation.ActivatorHelper ; |
aoqi@0 | 47 | import com.sun.corba.se.spi.activation.EndPointInfo ; |
aoqi@0 | 48 | |
aoqi@0 | 49 | import com.sun.corba.se.spi.copyobject.ObjectCopierFactory ; |
aoqi@0 | 50 | import com.sun.corba.se.spi.copyobject.CopyobjectDefaults ; |
aoqi@0 | 51 | import com.sun.corba.se.spi.copyobject.CopierManager ; |
aoqi@0 | 52 | |
aoqi@0 | 53 | import com.sun.corba.se.spi.ior.IdentifiableFactoryFinder ; |
aoqi@0 | 54 | import com.sun.corba.se.spi.ior.IOR; |
aoqi@0 | 55 | import com.sun.corba.se.spi.ior.IORFactories ; |
aoqi@0 | 56 | |
aoqi@0 | 57 | import com.sun.corba.se.spi.ior.iiop.IIOPFactories ; |
aoqi@0 | 58 | |
aoqi@0 | 59 | import com.sun.corba.se.spi.legacy.connection.ORBSocketFactory; |
aoqi@0 | 60 | |
aoqi@0 | 61 | import com.sun.corba.se.spi.logging.CORBALogDomains ; |
aoqi@0 | 62 | |
aoqi@0 | 63 | import com.sun.corba.se.spi.oa.OADefault ; |
aoqi@0 | 64 | import com.sun.corba.se.spi.oa.ObjectAdapter ; |
aoqi@0 | 65 | import com.sun.corba.se.spi.oa.ObjectAdapterFactory ; |
aoqi@0 | 66 | |
aoqi@0 | 67 | import com.sun.corba.se.spi.orb.Operation ; |
aoqi@0 | 68 | import com.sun.corba.se.spi.orb.OperationFactory ; |
aoqi@0 | 69 | import com.sun.corba.se.spi.orb.ORBData ; |
aoqi@0 | 70 | import com.sun.corba.se.spi.orb.DataCollector ; |
aoqi@0 | 71 | import com.sun.corba.se.spi.orb.ORBConfigurator ; |
aoqi@0 | 72 | import com.sun.corba.se.spi.orb.ParserImplBase ; |
aoqi@0 | 73 | import com.sun.corba.se.spi.orb.PropertyParser ; |
aoqi@0 | 74 | import com.sun.corba.se.spi.orb.ORB ; |
aoqi@0 | 75 | |
aoqi@0 | 76 | import com.sun.corba.se.spi.orbutil.closure.Closure ; |
aoqi@0 | 77 | import com.sun.corba.se.spi.orbutil.closure.ClosureFactory ; |
aoqi@0 | 78 | |
aoqi@0 | 79 | import com.sun.corba.se.spi.protocol.RequestDispatcherRegistry ; |
aoqi@0 | 80 | import com.sun.corba.se.spi.protocol.CorbaServerRequestDispatcher ; |
aoqi@0 | 81 | import com.sun.corba.se.spi.protocol.RequestDispatcherDefault ; |
aoqi@0 | 82 | import com.sun.corba.se.spi.protocol.LocalClientRequestDispatcherFactory ; |
aoqi@0 | 83 | |
aoqi@0 | 84 | import com.sun.corba.se.spi.resolver.LocalResolver ; |
aoqi@0 | 85 | import com.sun.corba.se.spi.resolver.Resolver ; |
aoqi@0 | 86 | import com.sun.corba.se.spi.resolver.ResolverDefault ; |
aoqi@0 | 87 | |
aoqi@0 | 88 | import com.sun.corba.se.spi.transport.CorbaContactInfoList; |
aoqi@0 | 89 | import com.sun.corba.se.spi.transport.CorbaContactInfoListFactory; |
aoqi@0 | 90 | import com.sun.corba.se.spi.transport.SocketInfo; |
aoqi@0 | 91 | import com.sun.corba.se.spi.transport.TransportDefault ; |
aoqi@0 | 92 | |
aoqi@0 | 93 | import com.sun.corba.se.spi.presentation.rmi.PresentationManager ; |
aoqi@0 | 94 | import com.sun.corba.se.spi.presentation.rmi.PresentationDefaults ; |
aoqi@0 | 95 | |
aoqi@0 | 96 | import com.sun.corba.se.spi.servicecontext.ServiceContext ; |
aoqi@0 | 97 | import com.sun.corba.se.spi.servicecontext.ServiceContextRegistry ; |
aoqi@0 | 98 | import com.sun.corba.se.spi.servicecontext.UEInfoServiceContext ; |
aoqi@0 | 99 | import com.sun.corba.se.spi.servicecontext.CodeSetServiceContext ; |
aoqi@0 | 100 | import com.sun.corba.se.spi.servicecontext.SendingContextServiceContext ; |
aoqi@0 | 101 | import com.sun.corba.se.spi.servicecontext.ORBVersionServiceContext ; |
aoqi@0 | 102 | import com.sun.corba.se.spi.servicecontext.MaxStreamFormatVersionServiceContext ; |
aoqi@0 | 103 | import com.sun.corba.se.impl.logging.ORBUtilSystemException ; |
aoqi@0 | 104 | import com.sun.corba.se.impl.transport.SocketOrChannelAcceptorImpl; |
aoqi@0 | 105 | |
aoqi@0 | 106 | // XXX This should go away once we get rid of the port exchange for ORBD |
aoqi@0 | 107 | import com.sun.corba.se.spi.legacy.connection.LegacyServerSocketEndPointInfo; |
aoqi@0 | 108 | import com.sun.corba.se.impl.legacy.connection.SocketFactoryAcceptorImpl; |
aoqi@0 | 109 | import com.sun.corba.se.impl.legacy.connection.SocketFactoryContactInfoListImpl; |
aoqi@0 | 110 | import com.sun.corba.se.impl.legacy.connection.USLPort; |
aoqi@0 | 111 | |
aoqi@0 | 112 | // XXX These should move to SPI |
aoqi@0 | 113 | import com.sun.corba.se.impl.orbutil.ORBConstants ; |
aoqi@0 | 114 | |
aoqi@0 | 115 | // XXX This needs an SPI |
aoqi@0 | 116 | import com.sun.corba.se.impl.dynamicany.DynAnyFactoryImpl ; |
aoqi@0 | 117 | |
aoqi@0 | 118 | public class ORBConfiguratorImpl implements ORBConfigurator { |
aoqi@0 | 119 | private ORBUtilSystemException wrapper ; |
aoqi@0 | 120 | |
aoqi@0 | 121 | public static class ConfigParser extends ParserImplBase { |
aoqi@0 | 122 | public Class[] userConfigurators = null ; |
aoqi@0 | 123 | |
aoqi@0 | 124 | public PropertyParser makeParser() |
aoqi@0 | 125 | { |
aoqi@0 | 126 | PropertyParser parser = new PropertyParser() ; |
aoqi@0 | 127 | Operation action = OperationFactory.compose( |
aoqi@0 | 128 | OperationFactory.suffixAction(), |
aoqi@0 | 129 | OperationFactory.classAction() |
aoqi@0 | 130 | ) ; |
aoqi@0 | 131 | parser.addPrefix( ORBConstants.SUN_PREFIX + "ORBUserConfigurators", |
aoqi@0 | 132 | action, "userConfigurators", Class.class ) ; |
aoqi@0 | 133 | return parser ; |
aoqi@0 | 134 | } |
aoqi@0 | 135 | } |
aoqi@0 | 136 | |
aoqi@0 | 137 | public void configure( DataCollector collector, ORB orb ) |
aoqi@0 | 138 | { |
aoqi@0 | 139 | ORB theOrb = orb ; |
aoqi@0 | 140 | wrapper = ORBUtilSystemException.get( orb, CORBALogDomains.ORB_LIFECYCLE ) ; |
aoqi@0 | 141 | |
aoqi@0 | 142 | initObjectCopiers( theOrb ) ; |
aoqi@0 | 143 | initIORFinders( theOrb ) ; |
aoqi@0 | 144 | |
aoqi@0 | 145 | theOrb.setClientDelegateFactory( |
aoqi@0 | 146 | // REVISIT: this should be ProtocolDefault. |
aoqi@0 | 147 | TransportDefault.makeClientDelegateFactory( theOrb )) ; |
aoqi@0 | 148 | |
aoqi@0 | 149 | initializeTransport(theOrb) ; |
aoqi@0 | 150 | |
aoqi@0 | 151 | initializeNaming( theOrb ) ; |
aoqi@0 | 152 | initServiceContextRegistry( theOrb ) ; |
aoqi@0 | 153 | initRequestDispatcherRegistry( theOrb ) ; |
aoqi@0 | 154 | registerInitialReferences( theOrb ) ; |
aoqi@0 | 155 | |
aoqi@0 | 156 | persistentServerInitialization( theOrb ) ; |
aoqi@0 | 157 | |
aoqi@0 | 158 | runUserConfigurators( collector, theOrb ) ; |
aoqi@0 | 159 | } |
aoqi@0 | 160 | |
aoqi@0 | 161 | private void runUserConfigurators( DataCollector collector, ORB orb ) |
aoqi@0 | 162 | { |
aoqi@0 | 163 | // Run any pluggable configurators. This is a lot like |
aoqi@0 | 164 | // ORBInitializers, only it uses the internal ORB and has |
aoqi@0 | 165 | // access to all data for parsing. |
aoqi@0 | 166 | ConfigParser parser = new ConfigParser() ; |
aoqi@0 | 167 | parser.init( collector ) ; |
aoqi@0 | 168 | if (parser.userConfigurators != null) { |
aoqi@0 | 169 | for (int ctr=0; ctr<parser.userConfigurators.length; ctr++) { |
aoqi@0 | 170 | Class cls = parser.userConfigurators[ctr] ; |
aoqi@0 | 171 | try { |
aoqi@0 | 172 | ORBConfigurator config = (ORBConfigurator)(cls.newInstance()) ; |
aoqi@0 | 173 | config.configure( collector, orb ) ; |
aoqi@0 | 174 | } catch (Exception exc) { |
aoqi@0 | 175 | // XXX Log this exception |
aoqi@0 | 176 | // ignore this for now: a bad user configurator does nothing |
aoqi@0 | 177 | } |
aoqi@0 | 178 | } |
aoqi@0 | 179 | } |
aoqi@0 | 180 | } |
aoqi@0 | 181 | |
aoqi@0 | 182 | private void persistentServerInitialization( ORB orb ) |
aoqi@0 | 183 | { |
aoqi@0 | 184 | ORBData data = orb.getORBData() ; |
aoqi@0 | 185 | |
aoqi@0 | 186 | // determine the ORBD port so that persistent objrefs can be |
aoqi@0 | 187 | // created. |
aoqi@0 | 188 | if (data.getServerIsORBActivated()) { |
aoqi@0 | 189 | try { |
aoqi@0 | 190 | Locator locator = LocatorHelper.narrow( |
aoqi@0 | 191 | orb.resolve_initial_references( |
aoqi@0 | 192 | ORBConstants.SERVER_LOCATOR_NAME )) ; |
aoqi@0 | 193 | Activator activator = ActivatorHelper.narrow( |
aoqi@0 | 194 | orb.resolve_initial_references( |
aoqi@0 | 195 | ORBConstants.SERVER_ACTIVATOR_NAME )) ; |
aoqi@0 | 196 | Collection serverEndpoints = |
aoqi@0 | 197 | orb.getCorbaTransportManager().getAcceptors(null, null); |
aoqi@0 | 198 | EndPointInfo[] endpointList = |
aoqi@0 | 199 | new EndPointInfo[serverEndpoints.size()]; |
aoqi@0 | 200 | Iterator iterator = serverEndpoints.iterator(); |
aoqi@0 | 201 | int i = 0 ; |
aoqi@0 | 202 | while (iterator.hasNext()) { |
aoqi@0 | 203 | Object n = iterator.next(); |
aoqi@0 | 204 | if (! (n instanceof LegacyServerSocketEndPointInfo)) { |
aoqi@0 | 205 | continue; |
aoqi@0 | 206 | } |
aoqi@0 | 207 | LegacyServerSocketEndPointInfo ep = |
aoqi@0 | 208 | (LegacyServerSocketEndPointInfo) n; |
aoqi@0 | 209 | // REVISIT - use exception instead of -1. |
aoqi@0 | 210 | int port = locator.getEndpoint(ep.getType()); |
aoqi@0 | 211 | if (port == -1) { |
aoqi@0 | 212 | port = locator.getEndpoint(SocketInfo.IIOP_CLEAR_TEXT); |
aoqi@0 | 213 | if (port == -1) { |
aoqi@0 | 214 | throw new Exception( |
aoqi@0 | 215 | "ORBD must support IIOP_CLEAR_TEXT"); |
aoqi@0 | 216 | } |
aoqi@0 | 217 | } |
aoqi@0 | 218 | |
aoqi@0 | 219 | ep.setLocatorPort(port); |
aoqi@0 | 220 | |
aoqi@0 | 221 | endpointList[i++] = |
aoqi@0 | 222 | new EndPointInfo(ep.getType(), ep.getPort()); |
aoqi@0 | 223 | } |
aoqi@0 | 224 | |
aoqi@0 | 225 | activator.registerEndpoints( |
aoqi@0 | 226 | data.getPersistentServerId(), data.getORBId(), |
aoqi@0 | 227 | endpointList); |
aoqi@0 | 228 | } catch (Exception ex) { |
aoqi@0 | 229 | throw wrapper.persistentServerInitError( |
aoqi@0 | 230 | CompletionStatus.COMPLETED_MAYBE, ex ) ; |
aoqi@0 | 231 | } |
aoqi@0 | 232 | } |
aoqi@0 | 233 | } |
aoqi@0 | 234 | |
aoqi@0 | 235 | /** |
aoqi@0 | 236 | * This is made somewhat complex because we are currently supporting |
aoqi@0 | 237 | * the ContactInfoList/Acceptor *AND* the legacy SocketFactory |
aoqi@0 | 238 | * transport architecture. |
aoqi@0 | 239 | */ |
aoqi@0 | 240 | private void initializeTransport(final ORB orb) |
aoqi@0 | 241 | { |
aoqi@0 | 242 | ORBData od = orb.getORBData(); |
aoqi@0 | 243 | |
aoqi@0 | 244 | CorbaContactInfoListFactory contactInfoListFactory = |
aoqi@0 | 245 | od.getCorbaContactInfoListFactory(); |
aoqi@0 | 246 | Acceptor[] acceptors = od.getAcceptors(); |
aoqi@0 | 247 | |
aoqi@0 | 248 | // BEGIN Legacy |
aoqi@0 | 249 | ORBSocketFactory legacySocketFactory = od.getLegacySocketFactory(); |
aoqi@0 | 250 | USLPort[] uslPorts = od.getUserSpecifiedListenPorts() ; |
aoqi@0 | 251 | setLegacySocketFactoryORB(orb, legacySocketFactory); |
aoqi@0 | 252 | // END Legacy |
aoqi@0 | 253 | |
aoqi@0 | 254 | // |
aoqi@0 | 255 | // Check for incorrect configuration. |
aoqi@0 | 256 | // |
aoqi@0 | 257 | |
aoqi@0 | 258 | if (legacySocketFactory != null && contactInfoListFactory != null) { |
aoqi@0 | 259 | throw wrapper.socketFactoryAndContactInfoListAtSameTime(); |
aoqi@0 | 260 | } |
aoqi@0 | 261 | |
aoqi@0 | 262 | if (acceptors.length != 0 && legacySocketFactory != null) { |
aoqi@0 | 263 | throw wrapper.acceptorsAndLegacySocketFactoryAtSameTime(); |
aoqi@0 | 264 | } |
aoqi@0 | 265 | |
aoqi@0 | 266 | |
aoqi@0 | 267 | // |
aoqi@0 | 268 | // Client and Server side setup. |
aoqi@0 | 269 | // |
aoqi@0 | 270 | |
aoqi@0 | 271 | od.getSocketFactory().setORB(orb); |
aoqi@0 | 272 | |
aoqi@0 | 273 | // |
aoqi@0 | 274 | // Set up client side. |
aoqi@0 | 275 | // |
aoqi@0 | 276 | |
aoqi@0 | 277 | if (legacySocketFactory != null) { |
aoqi@0 | 278 | // BEGIN Legacy |
aoqi@0 | 279 | // Since the user specified a legacy socket factory we need to |
aoqi@0 | 280 | // use a ContactInfoList that will use the legacy socket factory. |
aoqi@0 | 281 | contactInfoListFactory = |
aoqi@0 | 282 | new CorbaContactInfoListFactory() { |
aoqi@0 | 283 | public void setORB(ORB orb) { } |
aoqi@0 | 284 | public CorbaContactInfoList create( IOR ior ) { |
aoqi@0 | 285 | return new SocketFactoryContactInfoListImpl( |
aoqi@0 | 286 | orb, ior); |
aoqi@0 | 287 | } |
aoqi@0 | 288 | }; |
aoqi@0 | 289 | // END Legacy |
aoqi@0 | 290 | } else if (contactInfoListFactory != null) { |
aoqi@0 | 291 | // The user specified an explicit ContactInfoListFactory. |
aoqi@0 | 292 | contactInfoListFactory.setORB(orb); |
aoqi@0 | 293 | } else { |
aoqi@0 | 294 | // Use the default. |
aoqi@0 | 295 | contactInfoListFactory = |
aoqi@0 | 296 | TransportDefault.makeCorbaContactInfoListFactory(orb); |
aoqi@0 | 297 | } |
aoqi@0 | 298 | orb.setCorbaContactInfoListFactory(contactInfoListFactory); |
aoqi@0 | 299 | |
aoqi@0 | 300 | // |
aoqi@0 | 301 | // Set up server side. |
aoqi@0 | 302 | // |
aoqi@0 | 303 | |
aoqi@0 | 304 | // |
aoqi@0 | 305 | // Maybe allocate the Legacy default listener. |
aoqi@0 | 306 | // |
aoqi@0 | 307 | // If old legacy properties set, or there are no explicit |
aoqi@0 | 308 | // acceptors then register a default listener. Type of |
aoqi@0 | 309 | // default listener depends on presence of legacy socket factory. |
aoqi@0 | 310 | // |
aoqi@0 | 311 | // Note: this must happen *BEFORE* registering explicit acceptors. |
aoqi@0 | 312 | // |
aoqi@0 | 313 | |
aoqi@0 | 314 | // BEGIN Legacy |
aoqi@0 | 315 | int port = -1; |
aoqi@0 | 316 | if (od.getORBServerPort() != 0) { |
aoqi@0 | 317 | port = od.getORBServerPort(); |
aoqi@0 | 318 | } else if (od.getPersistentPortInitialized()) { |
aoqi@0 | 319 | port = od.getPersistentServerPort(); |
aoqi@0 | 320 | } else if (acceptors.length == 0) { |
aoqi@0 | 321 | port = 0; |
aoqi@0 | 322 | } |
aoqi@0 | 323 | if (port != -1) { |
aoqi@0 | 324 | createAndRegisterAcceptor(orb, legacySocketFactory, port, |
aoqi@0 | 325 | LegacyServerSocketEndPointInfo.DEFAULT_ENDPOINT, |
aoqi@0 | 326 | SocketInfo.IIOP_CLEAR_TEXT); |
aoqi@0 | 327 | } |
aoqi@0 | 328 | // END Legacy |
aoqi@0 | 329 | |
aoqi@0 | 330 | for (int i = 0; i < acceptors.length; i++) { |
aoqi@0 | 331 | orb.getCorbaTransportManager().registerAcceptor(acceptors[i]); |
aoqi@0 | 332 | } |
aoqi@0 | 333 | |
aoqi@0 | 334 | // BEGIN Legacy |
aoqi@0 | 335 | // Allocate user listeners. |
aoqi@0 | 336 | USLPort[] ports = od.getUserSpecifiedListenPorts() ; |
aoqi@0 | 337 | if (ports != null) { |
aoqi@0 | 338 | for (int i = 0; i < ports.length; i++) { |
aoqi@0 | 339 | createAndRegisterAcceptor( |
aoqi@0 | 340 | orb, legacySocketFactory, ports[i].getPort(), |
aoqi@0 | 341 | LegacyServerSocketEndPointInfo.NO_NAME, |
aoqi@0 | 342 | ports[i].getType()); |
aoqi@0 | 343 | } |
aoqi@0 | 344 | } |
aoqi@0 | 345 | // END Legacy |
aoqi@0 | 346 | } |
aoqi@0 | 347 | |
aoqi@0 | 348 | /* |
aoqi@0 | 349 | * Legacy: name. |
aoqi@0 | 350 | */ |
aoqi@0 | 351 | // REVISIT: see ORBD. make factory in TransportDefault. |
aoqi@0 | 352 | private void createAndRegisterAcceptor(ORB orb, |
aoqi@0 | 353 | ORBSocketFactory legacySocketFactory, |
aoqi@0 | 354 | int port, String name, String type) |
aoqi@0 | 355 | { |
aoqi@0 | 356 | Acceptor acceptor; |
aoqi@0 | 357 | if (legacySocketFactory == null) { |
aoqi@0 | 358 | acceptor = |
aoqi@0 | 359 | new SocketOrChannelAcceptorImpl(orb, port, name, type); |
aoqi@0 | 360 | } else { |
aoqi@0 | 361 | acceptor = |
aoqi@0 | 362 | new SocketFactoryAcceptorImpl(orb, port, name, type); |
aoqi@0 | 363 | } |
aoqi@0 | 364 | orb.getTransportManager().registerAcceptor(acceptor); |
aoqi@0 | 365 | } |
aoqi@0 | 366 | |
aoqi@0 | 367 | private void setLegacySocketFactoryORB( |
aoqi@0 | 368 | final ORB orb, final ORBSocketFactory legacySocketFactory) |
aoqi@0 | 369 | { |
aoqi@0 | 370 | if (legacySocketFactory == null) { |
aoqi@0 | 371 | return; |
aoqi@0 | 372 | } |
aoqi@0 | 373 | |
aoqi@0 | 374 | // Note: the createServerSocket and createSocket methods on the |
aoqi@0 | 375 | // DefaultSocketFactory need to get data from the ORB but |
aoqi@0 | 376 | // we cannot change the interface. So set the ORB (if it's ours) |
aoqi@0 | 377 | // by reflection. |
aoqi@0 | 378 | |
aoqi@0 | 379 | try { |
aoqi@0 | 380 | AccessController.doPrivileged( |
aoqi@0 | 381 | new PrivilegedExceptionAction() { |
aoqi@0 | 382 | public Object run() |
aoqi@0 | 383 | throws InstantiationException, IllegalAccessException |
aoqi@0 | 384 | { |
aoqi@0 | 385 | try { |
aoqi@0 | 386 | Class[] params = { ORB.class }; |
aoqi@0 | 387 | Method method = |
aoqi@0 | 388 | legacySocketFactory.getClass().getMethod( |
aoqi@0 | 389 | "setORB", params); |
aoqi@0 | 390 | Object[] args = { orb }; |
aoqi@0 | 391 | method.invoke(legacySocketFactory, args); |
aoqi@0 | 392 | } catch (NoSuchMethodException e) { |
aoqi@0 | 393 | // NOTE: If there is no method then it |
aoqi@0 | 394 | // is not ours - so ignore it. |
aoqi@0 | 395 | ; |
aoqi@0 | 396 | } catch (IllegalAccessException e) { |
aoqi@0 | 397 | RuntimeException rte = new RuntimeException(); |
aoqi@0 | 398 | rte.initCause(e); |
aoqi@0 | 399 | throw rte; |
aoqi@0 | 400 | } catch (InvocationTargetException e) { |
aoqi@0 | 401 | RuntimeException rte = new RuntimeException(); |
aoqi@0 | 402 | rte.initCause(e); |
aoqi@0 | 403 | throw rte; |
aoqi@0 | 404 | } |
aoqi@0 | 405 | return null; |
aoqi@0 | 406 | } |
aoqi@0 | 407 | } |
aoqi@0 | 408 | ); |
aoqi@0 | 409 | } catch (Throwable t) { |
aoqi@0 | 410 | throw wrapper.unableToSetSocketFactoryOrb(t); |
aoqi@0 | 411 | } |
aoqi@0 | 412 | } |
aoqi@0 | 413 | |
aoqi@0 | 414 | private void initializeNaming( ORB orb ) |
aoqi@0 | 415 | { |
aoqi@0 | 416 | LocalResolver localResolver = ResolverDefault.makeLocalResolver() ; |
aoqi@0 | 417 | orb.setLocalResolver( localResolver ) ; |
aoqi@0 | 418 | |
aoqi@0 | 419 | Resolver bootResolver = ResolverDefault.makeBootstrapResolver( orb, |
aoqi@0 | 420 | orb.getORBData().getORBInitialHost(), |
aoqi@0 | 421 | orb.getORBData().getORBInitialPort() ) ; |
aoqi@0 | 422 | |
aoqi@0 | 423 | Operation urlOperation = ResolverDefault.makeINSURLOperation( orb, |
aoqi@0 | 424 | bootResolver ) ; |
aoqi@0 | 425 | orb.setURLOperation( urlOperation ) ; |
aoqi@0 | 426 | |
aoqi@0 | 427 | Resolver irResolver = ResolverDefault.makeORBInitRefResolver( urlOperation, |
aoqi@0 | 428 | orb.getORBData().getORBInitialReferences() ) ; |
aoqi@0 | 429 | |
aoqi@0 | 430 | Resolver dirResolver = ResolverDefault.makeORBDefaultInitRefResolver( |
aoqi@0 | 431 | urlOperation, orb.getORBData().getORBDefaultInitialReference() ) ; |
aoqi@0 | 432 | |
aoqi@0 | 433 | Resolver resolver = |
aoqi@0 | 434 | ResolverDefault.makeCompositeResolver( localResolver, |
aoqi@0 | 435 | ResolverDefault.makeCompositeResolver( irResolver, |
aoqi@0 | 436 | ResolverDefault.makeCompositeResolver( dirResolver, |
aoqi@0 | 437 | bootResolver ) ) ) ; |
aoqi@0 | 438 | orb.setResolver( resolver ) ; |
aoqi@0 | 439 | } |
aoqi@0 | 440 | |
aoqi@0 | 441 | private void initServiceContextRegistry( ORB orb ) |
aoqi@0 | 442 | { |
aoqi@0 | 443 | ServiceContextRegistry scr = orb.getServiceContextRegistry() ; |
aoqi@0 | 444 | |
aoqi@0 | 445 | scr.register( UEInfoServiceContext.class ) ; |
aoqi@0 | 446 | scr.register( CodeSetServiceContext.class ) ; |
aoqi@0 | 447 | scr.register( SendingContextServiceContext.class ) ; |
aoqi@0 | 448 | scr.register( ORBVersionServiceContext.class ) ; |
aoqi@0 | 449 | scr.register( MaxStreamFormatVersionServiceContext.class ) ; |
aoqi@0 | 450 | } |
aoqi@0 | 451 | |
aoqi@0 | 452 | private void registerInitialReferences( final ORB orb ) |
aoqi@0 | 453 | { |
aoqi@0 | 454 | // Register the Dynamic Any factory |
aoqi@0 | 455 | Closure closure = new Closure() { |
aoqi@0 | 456 | public java.lang.Object evaluate() { |
aoqi@0 | 457 | return new DynAnyFactoryImpl( orb ) ; |
aoqi@0 | 458 | } |
aoqi@0 | 459 | } ; |
aoqi@0 | 460 | |
aoqi@0 | 461 | Closure future = ClosureFactory.makeFuture( closure ) ; |
aoqi@0 | 462 | orb.getLocalResolver().register( ORBConstants.DYN_ANY_FACTORY_NAME, |
aoqi@0 | 463 | future ) ; |
aoqi@0 | 464 | } |
aoqi@0 | 465 | |
aoqi@0 | 466 | private static final int ORB_STREAM = 0 ; |
aoqi@0 | 467 | |
aoqi@0 | 468 | private void initObjectCopiers( ORB orb ) |
aoqi@0 | 469 | { |
aoqi@0 | 470 | // No optimization or policy selection here. |
aoqi@0 | 471 | ObjectCopierFactory orbStream = |
aoqi@0 | 472 | CopyobjectDefaults.makeORBStreamObjectCopierFactory( orb ) ; |
aoqi@0 | 473 | |
aoqi@0 | 474 | CopierManager cm = orb.getCopierManager() ; |
aoqi@0 | 475 | cm.setDefaultId( ORB_STREAM ) ; |
aoqi@0 | 476 | |
aoqi@0 | 477 | cm.registerObjectCopierFactory( orbStream, ORB_STREAM ) ; |
aoqi@0 | 478 | } |
aoqi@0 | 479 | |
aoqi@0 | 480 | private void initIORFinders( ORB orb ) |
aoqi@0 | 481 | { |
aoqi@0 | 482 | IdentifiableFactoryFinder profFinder = |
aoqi@0 | 483 | orb.getTaggedProfileFactoryFinder() ; |
aoqi@0 | 484 | profFinder.registerFactory( IIOPFactories.makeIIOPProfileFactory() ) ; |
aoqi@0 | 485 | |
aoqi@0 | 486 | IdentifiableFactoryFinder profTempFinder = |
aoqi@0 | 487 | orb.getTaggedProfileTemplateFactoryFinder() ; |
aoqi@0 | 488 | profTempFinder.registerFactory( |
aoqi@0 | 489 | IIOPFactories.makeIIOPProfileTemplateFactory() ) ; |
aoqi@0 | 490 | |
aoqi@0 | 491 | IdentifiableFactoryFinder compFinder = |
aoqi@0 | 492 | orb.getTaggedComponentFactoryFinder() ; |
aoqi@0 | 493 | compFinder.registerFactory( |
aoqi@0 | 494 | IIOPFactories.makeCodeSetsComponentFactory() ) ; |
aoqi@0 | 495 | compFinder.registerFactory( |
aoqi@0 | 496 | IIOPFactories.makeJavaCodebaseComponentFactory() ) ; |
aoqi@0 | 497 | compFinder.registerFactory( |
aoqi@0 | 498 | IIOPFactories.makeORBTypeComponentFactory() ) ; |
aoqi@0 | 499 | compFinder.registerFactory( |
aoqi@0 | 500 | IIOPFactories.makeMaxStreamFormatVersionComponentFactory() ) ; |
aoqi@0 | 501 | compFinder.registerFactory( |
aoqi@0 | 502 | IIOPFactories.makeAlternateIIOPAddressComponentFactory() ) ; |
aoqi@0 | 503 | compFinder.registerFactory( |
aoqi@0 | 504 | IIOPFactories.makeRequestPartitioningComponentFactory() ) ; |
aoqi@0 | 505 | compFinder.registerFactory( |
aoqi@0 | 506 | IIOPFactories.makeJavaSerializationComponentFactory()); |
aoqi@0 | 507 | |
aoqi@0 | 508 | // Register the ValueFactory instances for ORT |
aoqi@0 | 509 | IORFactories.registerValueFactories( orb ) ; |
aoqi@0 | 510 | |
aoqi@0 | 511 | // Register an ObjectKeyFactory |
aoqi@0 | 512 | orb.setObjectKeyFactory( IORFactories.makeObjectKeyFactory(orb) ) ; |
aoqi@0 | 513 | } |
aoqi@0 | 514 | |
aoqi@0 | 515 | private void initRequestDispatcherRegistry( ORB orb ) |
aoqi@0 | 516 | { |
aoqi@0 | 517 | RequestDispatcherRegistry scr = orb.getRequestDispatcherRegistry() ; |
aoqi@0 | 518 | |
aoqi@0 | 519 | // register client subcontracts |
aoqi@0 | 520 | ClientRequestDispatcher csub = |
aoqi@0 | 521 | RequestDispatcherDefault.makeClientRequestDispatcher() ; |
aoqi@0 | 522 | scr.registerClientRequestDispatcher( csub, |
aoqi@0 | 523 | ORBConstants.TOA_SCID ) ; |
aoqi@0 | 524 | scr.registerClientRequestDispatcher( csub, |
aoqi@0 | 525 | ORBConstants.TRANSIENT_SCID ) ; |
aoqi@0 | 526 | scr.registerClientRequestDispatcher( csub, |
aoqi@0 | 527 | ORBConstants.PERSISTENT_SCID ) ; |
aoqi@0 | 528 | scr.registerClientRequestDispatcher( csub, |
aoqi@0 | 529 | ORBConstants.SC_TRANSIENT_SCID ) ; |
aoqi@0 | 530 | scr.registerClientRequestDispatcher( csub, |
aoqi@0 | 531 | ORBConstants.SC_PERSISTENT_SCID ) ; |
aoqi@0 | 532 | scr.registerClientRequestDispatcher( csub, |
aoqi@0 | 533 | ORBConstants.IISC_TRANSIENT_SCID ) ; |
aoqi@0 | 534 | scr.registerClientRequestDispatcher( csub, |
aoqi@0 | 535 | ORBConstants.IISC_PERSISTENT_SCID ) ; |
aoqi@0 | 536 | scr.registerClientRequestDispatcher( csub, |
aoqi@0 | 537 | ORBConstants.MINSC_TRANSIENT_SCID ) ; |
aoqi@0 | 538 | scr.registerClientRequestDispatcher( csub, |
aoqi@0 | 539 | ORBConstants.MINSC_PERSISTENT_SCID ) ; |
aoqi@0 | 540 | |
aoqi@0 | 541 | // register server delegates |
aoqi@0 | 542 | CorbaServerRequestDispatcher sd = |
aoqi@0 | 543 | RequestDispatcherDefault.makeServerRequestDispatcher( orb ); |
aoqi@0 | 544 | scr.registerServerRequestDispatcher( sd, |
aoqi@0 | 545 | ORBConstants.TOA_SCID ) ; |
aoqi@0 | 546 | scr.registerServerRequestDispatcher( sd, |
aoqi@0 | 547 | ORBConstants.TRANSIENT_SCID ) ; |
aoqi@0 | 548 | scr.registerServerRequestDispatcher( sd, |
aoqi@0 | 549 | ORBConstants.PERSISTENT_SCID ) ; |
aoqi@0 | 550 | scr.registerServerRequestDispatcher( sd, |
aoqi@0 | 551 | ORBConstants.SC_TRANSIENT_SCID ) ; |
aoqi@0 | 552 | scr.registerServerRequestDispatcher( sd, |
aoqi@0 | 553 | ORBConstants.SC_PERSISTENT_SCID ) ; |
aoqi@0 | 554 | scr.registerServerRequestDispatcher( sd, |
aoqi@0 | 555 | ORBConstants.IISC_TRANSIENT_SCID ) ; |
aoqi@0 | 556 | scr.registerServerRequestDispatcher( sd, |
aoqi@0 | 557 | ORBConstants.IISC_PERSISTENT_SCID ) ; |
aoqi@0 | 558 | scr.registerServerRequestDispatcher( sd, |
aoqi@0 | 559 | ORBConstants.MINSC_TRANSIENT_SCID ) ; |
aoqi@0 | 560 | scr.registerServerRequestDispatcher( sd, |
aoqi@0 | 561 | ORBConstants.MINSC_PERSISTENT_SCID ) ; |
aoqi@0 | 562 | |
aoqi@0 | 563 | orb.setINSDelegate( |
aoqi@0 | 564 | RequestDispatcherDefault.makeINSServerRequestDispatcher( orb ) ) ; |
aoqi@0 | 565 | |
aoqi@0 | 566 | // register local client subcontracts |
aoqi@0 | 567 | LocalClientRequestDispatcherFactory lcsf = |
aoqi@0 | 568 | RequestDispatcherDefault.makeJIDLLocalClientRequestDispatcherFactory( |
aoqi@0 | 569 | orb ) ; |
aoqi@0 | 570 | scr.registerLocalClientRequestDispatcherFactory( lcsf, |
aoqi@0 | 571 | ORBConstants.TOA_SCID ) ; |
aoqi@0 | 572 | |
aoqi@0 | 573 | lcsf = |
aoqi@0 | 574 | RequestDispatcherDefault.makePOALocalClientRequestDispatcherFactory( |
aoqi@0 | 575 | orb ) ; |
aoqi@0 | 576 | scr.registerLocalClientRequestDispatcherFactory( lcsf, |
aoqi@0 | 577 | ORBConstants.TRANSIENT_SCID ) ; |
aoqi@0 | 578 | scr.registerLocalClientRequestDispatcherFactory( lcsf, |
aoqi@0 | 579 | ORBConstants.PERSISTENT_SCID ) ; |
aoqi@0 | 580 | |
aoqi@0 | 581 | lcsf = RequestDispatcherDefault. |
aoqi@0 | 582 | makeFullServantCacheLocalClientRequestDispatcherFactory( orb ) ; |
aoqi@0 | 583 | scr.registerLocalClientRequestDispatcherFactory( lcsf, |
aoqi@0 | 584 | ORBConstants.SC_TRANSIENT_SCID ) ; |
aoqi@0 | 585 | scr.registerLocalClientRequestDispatcherFactory( lcsf, |
aoqi@0 | 586 | ORBConstants.SC_PERSISTENT_SCID ) ; |
aoqi@0 | 587 | |
aoqi@0 | 588 | lcsf = RequestDispatcherDefault. |
aoqi@0 | 589 | makeInfoOnlyServantCacheLocalClientRequestDispatcherFactory( orb ) ; |
aoqi@0 | 590 | scr.registerLocalClientRequestDispatcherFactory( lcsf, |
aoqi@0 | 591 | ORBConstants.IISC_TRANSIENT_SCID ) ; |
aoqi@0 | 592 | scr.registerLocalClientRequestDispatcherFactory( lcsf, |
aoqi@0 | 593 | ORBConstants.IISC_PERSISTENT_SCID ) ; |
aoqi@0 | 594 | |
aoqi@0 | 595 | lcsf = RequestDispatcherDefault. |
aoqi@0 | 596 | makeMinimalServantCacheLocalClientRequestDispatcherFactory( orb ) ; |
aoqi@0 | 597 | scr.registerLocalClientRequestDispatcherFactory( lcsf, |
aoqi@0 | 598 | ORBConstants.MINSC_TRANSIENT_SCID ) ; |
aoqi@0 | 599 | scr.registerLocalClientRequestDispatcherFactory( lcsf, |
aoqi@0 | 600 | ORBConstants.MINSC_PERSISTENT_SCID ) ; |
aoqi@0 | 601 | |
aoqi@0 | 602 | /* Register the server delegate that implements the ancient bootstrap |
aoqi@0 | 603 | * naming protocol. This takes an object key of either "INIT" or |
aoqi@0 | 604 | * "TINI" to allow for big or little endian implementations. |
aoqi@0 | 605 | */ |
aoqi@0 | 606 | CorbaServerRequestDispatcher bootsd = |
aoqi@0 | 607 | RequestDispatcherDefault.makeBootstrapServerRequestDispatcher( |
aoqi@0 | 608 | orb ) ; |
aoqi@0 | 609 | scr.registerServerRequestDispatcher( bootsd, "INIT" ) ; |
aoqi@0 | 610 | scr.registerServerRequestDispatcher( bootsd, "TINI" ) ; |
aoqi@0 | 611 | |
aoqi@0 | 612 | // Register object adapter factories |
aoqi@0 | 613 | ObjectAdapterFactory oaf = OADefault.makeTOAFactory( orb ) ; |
aoqi@0 | 614 | scr.registerObjectAdapterFactory( oaf, ORBConstants.TOA_SCID ) ; |
aoqi@0 | 615 | |
aoqi@0 | 616 | oaf = OADefault.makePOAFactory( orb ) ; |
aoqi@0 | 617 | scr.registerObjectAdapterFactory( oaf, ORBConstants.TRANSIENT_SCID ) ; |
aoqi@0 | 618 | scr.registerObjectAdapterFactory( oaf, ORBConstants.PERSISTENT_SCID ) ; |
aoqi@0 | 619 | scr.registerObjectAdapterFactory( oaf, ORBConstants.SC_TRANSIENT_SCID ) ; |
aoqi@0 | 620 | scr.registerObjectAdapterFactory( oaf, ORBConstants.SC_PERSISTENT_SCID ) ; |
aoqi@0 | 621 | scr.registerObjectAdapterFactory( oaf, ORBConstants.IISC_TRANSIENT_SCID ) ; |
aoqi@0 | 622 | scr.registerObjectAdapterFactory( oaf, ORBConstants.IISC_PERSISTENT_SCID ) ; |
aoqi@0 | 623 | scr.registerObjectAdapterFactory( oaf, ORBConstants.MINSC_TRANSIENT_SCID ) ; |
aoqi@0 | 624 | scr.registerObjectAdapterFactory( oaf, ORBConstants.MINSC_PERSISTENT_SCID ) ; |
aoqi@0 | 625 | } |
aoqi@0 | 626 | } |
aoqi@0 | 627 | |
aoqi@0 | 628 | // End of file. |