src/share/classes/com/sun/corba/se/impl/orb/ORBConfiguratorImpl.java

Mon, 28 May 2018 10:29:43 +0800

author
aoqi
date
Mon, 28 May 2018 10:29:43 +0800
changeset 1655
bfd167e38830
parent 748
6845b95cba6b
permissions
-rw-r--r--

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.

mercurial