Save This Page
Home » openjdk-7 » com.sun.corba.se.impl » protocol » [javadoc | source]
    1   /*
    2    * Copyright (c) 2002, 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   
   26   package com.sun.corba.se.impl.protocol;
   27   
   28   import java.util.Set;
   29   import java.util.HashSet;
   30   import java.util.Map;
   31   import java.util.HashMap;
   32   import java.util.Collections;
   33   
   34   import com.sun.corba.se.pept.protocol.ClientRequestDispatcher;
   35   
   36   import com.sun.corba.se.spi.protocol.LocalClientRequestDispatcher;
   37   import com.sun.corba.se.spi.protocol.LocalClientRequestDispatcherFactory;
   38   import com.sun.corba.se.spi.protocol.CorbaServerRequestDispatcher;
   39   import com.sun.corba.se.spi.protocol.RequestDispatcherRegistry;
   40   
   41   import com.sun.corba.se.spi.oa.ObjectAdapterFactory;
   42   
   43   import com.sun.corba.se.spi.orb.ORB;
   44   
   45   import com.sun.corba.se.impl.orbutil.ORBConstants;
   46   import com.sun.corba.se.impl.orbutil.DenseIntMapImpl;
   47   
   48   /**
   49    * This is a registry of all subcontract ID dependent objects.  This includes:
   50    * LocalClientRequestDispatcherFactory, ClientRequestDispatcher, ServerSubcontract, and
   51    * ObjectAdapterFactory.
   52    */
   53   public class RequestDispatcherRegistryImpl implements RequestDispatcherRegistry {
   54       private ORB orb;
   55   
   56       protected int defaultId;                    // The default subcontract ID to use if
   57                                                   // there is no more specific ID available.
   58                                                   // This happens when invoking a foreign IOR.
   59       private DenseIntMapImpl SDRegistry ;        // ServerRequestDispatcher registry
   60       private DenseIntMapImpl CSRegistry ;        // ClientRequestDispatcher registry
   61       private DenseIntMapImpl OAFRegistry ;       // ObjectAdapterFactory registry
   62       private DenseIntMapImpl LCSFRegistry ;      // LocalClientRequestDispatcherFactory registry
   63       private Set objectAdapterFactories ;        // Set of all ObjectAdapterFactory instances
   64       private Set objectAdapterFactoriesView ;    // Read-only view of oaf instances
   65       private Map stringToServerSubcontract ;     // Map from obect key string to
   66                                                   // ServerSubcontract
   67                                                   // for special bootstrap IORs
   68   
   69       public RequestDispatcherRegistryImpl(ORB orb, int defaultId )
   70       {
   71           this.orb = orb;
   72           this.defaultId = defaultId;
   73           SDRegistry = new DenseIntMapImpl() ;
   74           CSRegistry = new DenseIntMapImpl() ;
   75           OAFRegistry = new DenseIntMapImpl() ;
   76           LCSFRegistry = new DenseIntMapImpl() ;
   77           objectAdapterFactories = new HashSet() ;
   78           objectAdapterFactoriesView = Collections.unmodifiableSet( objectAdapterFactories ) ;
   79           stringToServerSubcontract = new HashMap() ;
   80       }
   81   
   82       public synchronized void registerClientRequestDispatcher(
   83           ClientRequestDispatcher csc, int scid)
   84       {
   85           CSRegistry.set( scid, csc ) ;
   86       }
   87   
   88       public synchronized void registerLocalClientRequestDispatcherFactory(
   89           LocalClientRequestDispatcherFactory csc, int scid)
   90       {
   91           LCSFRegistry.set( scid, csc ) ;
   92       }
   93   
   94       public synchronized void registerServerRequestDispatcher(
   95           CorbaServerRequestDispatcher ssc, int scid)
   96       {
   97           SDRegistry.set( scid, ssc ) ;
   98       }
   99   
  100       public synchronized void registerServerRequestDispatcher(
  101           CorbaServerRequestDispatcher scc, String name )
  102       {
  103           stringToServerSubcontract.put( name, scc ) ;
  104       }
  105   
  106       public synchronized void registerObjectAdapterFactory(
  107           ObjectAdapterFactory oaf, int scid)
  108       {
  109           objectAdapterFactories.add( oaf ) ;
  110           OAFRegistry.set( scid, oaf ) ;
  111       }
  112   
  113       // **************************************************
  114       // Methods to find the subcontract side subcontract
  115       // **************************************************
  116   
  117       // Note that both forms of getServerRequestDispatcher need to return
  118       // the default server delegate if no other match is found.
  119       // This is essential to proper handling of errors for
  120       // malformed requests.  In particular, a bad MAGIC will
  121       // result in a lookup in the named key table (stringToServerSubcontract),
  122       // which must return a valid ServerRequestDispatcher.  A bad subcontract ID
  123       // will similarly need to return the default ServerRequestDispatcher.
  124   
  125       public CorbaServerRequestDispatcher getServerRequestDispatcher(int scid)
  126       {
  127           CorbaServerRequestDispatcher sdel =
  128               (CorbaServerRequestDispatcher)(SDRegistry.get(scid)) ;
  129           if ( sdel == null )
  130               sdel = (CorbaServerRequestDispatcher)(SDRegistry.get(defaultId)) ;
  131   
  132           return sdel;
  133       }
  134   
  135       public CorbaServerRequestDispatcher getServerRequestDispatcher( String name )
  136       {
  137           CorbaServerRequestDispatcher sdel =
  138               (CorbaServerRequestDispatcher)stringToServerSubcontract.get( name ) ;
  139   
  140           if ( sdel == null )
  141               sdel = (CorbaServerRequestDispatcher)(SDRegistry.get(defaultId)) ;
  142   
  143           return sdel;
  144       }
  145   
  146       public LocalClientRequestDispatcherFactory getLocalClientRequestDispatcherFactory(
  147           int scid )
  148       {
  149           LocalClientRequestDispatcherFactory factory =
  150               (LocalClientRequestDispatcherFactory)(LCSFRegistry.get(scid)) ;
  151           if (factory == null) {
  152               factory = (LocalClientRequestDispatcherFactory)(LCSFRegistry.get(defaultId)) ;
  153           }
  154   
  155           return factory ;
  156       }
  157   
  158       public ClientRequestDispatcher getClientRequestDispatcher( int scid )
  159       {
  160           ClientRequestDispatcher subcontract =
  161               (ClientRequestDispatcher)(CSRegistry.get(scid)) ;
  162           if (subcontract == null) {
  163               subcontract = (ClientRequestDispatcher)(CSRegistry.get(defaultId)) ;
  164           }
  165   
  166           return subcontract ;
  167       }
  168   
  169       public ObjectAdapterFactory getObjectAdapterFactory( int scid )
  170       {
  171           ObjectAdapterFactory oaf =
  172               (ObjectAdapterFactory)(OAFRegistry.get(scid)) ;
  173           if ( oaf == null )
  174               oaf = (ObjectAdapterFactory)(OAFRegistry.get(defaultId)) ;
  175   
  176           return oaf;
  177       }
  178   
  179       public Set getObjectAdapterFactories()
  180       {
  181           return objectAdapterFactoriesView ;
  182       }
  183   }

Save This Page
Home » openjdk-7 » com.sun.corba.se.impl » protocol » [javadoc | source]