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