1 Implementation hierarchies in the IOR code
   2 
   3 Utility classes:
   4     impl.ior.ByteBuffer                 class used to speed up computation of the adapter id
   5     impl.ior.EncapsulationUtility       misc. utilities for dealing with CDR encapsulation
   6     impl.ior.FreezableList              special list class that can change from mutable to immutable (one way only)
   7     impl.ior.MinorCodes                 minor codes for all IOR errors
   8     impl.ior.ORTImpl                    wrapper around IORTemplate for ORT
   9     spi.ior.IORFactories                factory for all basic IOR types
  10     spi.ior.IIOP.???Factories           factory for IIOP IOR factory types (IIOPProfile, IIOPProfileTemplate, 
  11                                             and all of the supported IIOP tagged component factories)
  12                                         This needs to provide access to all of the IdentifiableFactory instances
  13                                         we need for registration.  It also needs to provide factory methods for
  14                                         creating all of these types.  
  15         impl.ior.iiop.TaggedComponentFactories needs to be absorbed here.
  16 
  17 
  18 Support for non-registered (unknown) TaggedComponent and TaggedProfile instances
  19     impl.ior.GenericIdEncapsulation
  20         impl.ior.GenericTaggedComponent
  21         impl.ior.GenericTaggedProfile
  22 
  23 Basic common representation for writing, getting ids, inherited lists:
  24     spi.ior.IdentifiableContainerBase
  25     spi.ior.Writeable
  26         spi.ior.Identifiable
  27             spi.ior.IdentifiableBase
  28 
  29 Some basic IOR types and their implementation:
  30     spi.ior.IOR
  31         impl.ior.IORImpl
  32 
  33     spi.ior.IORTemplate
  34         impl.ior.IORTemplateImpl
  35 
  36     spi.ior.IdentifiableFactory (the basic factory type, which is never created in the spi.ior package.
  37         All instances of this factory are necessarily protocol dependent, for example IIOP in the
  38         spi.ior.iiop package).
  39     spi.ior.IdentifiableFactoryFinder
  40         impl.ior.IdentifiableFactoryFinderBase
  41             impl.ior.TaggedComponentFactoryFinderImpl
  42             impl.ior.TaggedProfileFactoryFinderImpl
  43 
  44     spi.ior.ObjectAdapterId
  45         impl.ior.ObjectAdapterIdBase
  46             impl.ior.ObjectAdapterIdArray
  47                 impl.ior.ObjectAdapterIdNumber
  48 
  49     spi.ior.ObjectId
  50         impl.ior.ObjectIdImpl
  51 
  52     spi.ior.ObjectKey
  53         impl.ior.ObjectKeyImpl
  54 
  55 The ObjectKeyTemplate family, which needs some work for pluggability yet:
  56     impl.ior.ObjectKeyFactory
  57     impl.ior.ObjectKeyTemplateFactory : should this be in the SPI?
  58     spi.ior.ObjectKeyTemplate
  59         impl.ior.WireObjectKeyTemplate
  60         impl.ior.ObjectKeyTemplateBase
  61             impl.ior.OldObjectKeyTemplateBase
  62                 impl.ior.OldJIDLObjectKeyTemplate
  63                 impl.ior.OldPOAObjectKeyTemplate
  64             impl.ior.NewObjectKeyTemplateBase
  65                 impl.ior.JIDLObjectKeyTemplate
  66                 impl.ior.POAObjectKeyTemplate
  67 
  68 IIOP types and their implementations:
  69     spi.ior.TaggedComponent
  70         spi.ior.TaggedComponentBase
  71             impl.ior.iiop.AlternateIIOPAddressComponent
  72             impl.ior.iiop.CodeSetsComponent
  73             impl.ior.iiop.JavaCodebaseComponent
  74             impl.ior.iiop.MaxStreamFormatVersionComponent
  75             impl.ior.iiop.ORBTypeComponent
  76             impl.ior.iiop.PoliciesComponent
  77 
  78     spi.ior.TaggedProfile
  79         spi.ior.iiop.IIOPProfile
  80             impl.ior.iiop.IIOPProfileImpl
  81 
  82     spi.ior.TaggedProfileTemplate
  83         spi.ior.iiop.IIOPProfileTemplate
  84             impl.ior.iiop.IIOPProfileTemplateImpl
  85 
  86     spi.ior.iiop.IIOPAddress
  87         impl.ior.iiop.IIOPAddressBase
  88             impl.ior.iiop.IIOPAddressFutureImpl
  89             impl.ior.iiop.IIOPAddressImpl
  90 
  91 Issues:
  92 
  93 1. GIOPVersion.chooseRequestVersion( ORB, IOR ) is not well-defined: it should be
  94    (ORB, IIOPProfile). 
  95    Call sites:
  96    Connection.locate: not used
  97         Called from GIOPImpl.locate: not used
  98    CorbaContactInfoImpl.createMessageMediator
  99         This needs a version that looks only at a single profile.
 100 
 101 2. MessageBase.createRequest takes an IOR instead of an IIOPProfile.
 102 
 103 3. CDRInputStream_1_0.read_Object( Class ) calls IOR.getCodebase() in 
 104    a call to Utility.loadStubClass, which is
 105    only defined on a profile.  What do we do here?
 106    Similar problem in same class internalIORToObject, which call IOR.getServant
 107    and IOR.getCodebase.  IOR.getCodeBase is called in loadStub.