| Notes on IOR implementation |
| |
| 1. Writeable is an interface that can write itself to an OutputStream. |
| |
| 2. IdEncapsulation is a particular kind of Writeable that has an Id and |
| an Encapsulation (a sequence of bytes) representing some other structure |
| in a CDR encapsulation. |
| |
| 3. ContainerBase is a base class for containers of IdEncapsulations. |
| |
| 4. An IOR is a ContainerBase. |
| |
| 5. A TaggedComponent is not a ContainerBase. |
| |
| 6. Some (not all) Profiles are ContainerBases. |
| |
| 7. IIOPAddress contains (host, port) |
| IIOPServerLocation contains: |
| - A primary IIOPAddress |
| - 0 or more secondary IIOPAddresses (these get placed in |
| TAG_ALTERNATE_IIOP_ADDRESS components) |
| |
| 8. IIOPProfileTemplate: |
| - major, minor version |
| - 0 or more TaggedComponents |
| - ObjectKeyTemplate |
| |
| 9. ObjectKeyTemplate: |
| - contains only wire data, not internal structures |
| |
| write( object id, output stream ): write the object key out |
| to the output stream with the given object id |
| |
| 10. Significant problem: must of the dispatch path code is written in terms of |
| IORs when it should be based on profiles. Only a single profile is used in |
| a request, and that is what should be passed around. This needs fixing soon |
| to accommodate the eventual implementation of CORBA FT, and also to work |
| properly with the new IOR. |
| |
| 11. Another question: since profile contains key which contains scid, what if |
| we have multiple profiles with different scids? |
| One answer: create a cluster subcontract that invokes the individual |
| profiles for FT. This may not mesh well with the FT spec. |
| |
| 12. Uses of IORs in the ORB: |
| |
| Activation/ServerManagerImpl.java |
| - Construct IOR for bad ID handler location forward |
| corba/ClientDelegate.java |
| - marshal, getIOR, unmarshal are all questionable and make |
| poor use of IOR. |
| - gets forwarded IOR from response |
| - IORs handled in some service contexts |
| - createRequest needs to parse IOR |
| - gets the (one) IIOP profile that we care about |
| - gets the object key |
| corba/InitialNamingClient.java |
| - constructs IOR from address info, object key |
| - current implementation should use AlternateIIOPAddress components |
| - constructs IOR with key "INIT" for old bootstrap |
| corba/ORB.java |
| - stringify and destringify IOR |
| corba/ServerDelegate.java |
| - access IOR from sending context service context |
| - destroyObjref directly access transient key from a known offset. |
| - creation sets up key inline with known offsets |
| core/IOR.java |
| - IOR sometimes stores a servant |
| - IOR contains the following |
| - Object servant |
| - Endpoint ep |
| - String codebase |
| - boolean cachedCodebase |
| - TaggedComponent localCodeBaseTC |
| - InternetIOPTag |
| - The two constructors that take full args also |
| construct tagged components |
| - will need alternate address components for INS |
| core/SendingContextServiceContext.java |
| - reads IOR from input stream |
| iiop/CDRInputStream.java |
| - needs type id, code base from IOR |
| iiop/IIOPOutputStream.java |
| - needs to access objkey as a sequence of bytes to realing requests. |
| POA/GenericPOAClientSC.java |
| - needs to pull POA ID out of object key |
| - needs to created a new IOR that has an updated scid |
| POA/GenericPOAServerSC.java |
| - creates IORs |
| TransactionalPOA/TransactionalServerSC.java |
| - inline access to known offset in object key to |
| determine whether transactional |
| |
| Guide to the files: |
| |
| Basic Interfaces: |
| Identifiable.java (Object has an Id) |
| Writeable.java (Object can write to OutputStream) |
| IdEncapsulation.java (Writeable, Identifiable interface) |
| IdEncapsulationFactory.java (Factory interface for IdEncapsulation) |
| IdEncapsulationFactoryFinder.java (Finder interface for IdEncapsulationFactoryFinder) |
| |
| IIOPAddress.java (class containing host and port for IIOP) |
| |
| Basic support for IdEncapsulations (shared for components and profiles): |
| GenericIdEncapsulation.java (Has id, octet sequence: used for generic |
| TaggedComponent and TaggedProfile objects) |
| FreezableList.java (Delegated implementation of List that can be made |
| immutable after construction) |
| IdentifiableContainerBase.java (extends FreezableList: container of Identifiable: |
| supports iteratorById.) |
| IdEncapsulationContainerBase.java (extends IdenitifableContainerBase: |
| container of IdEncapsulation: supports read/write IdEncapsulationSequence) |
| |
| Object Keys: |
| ObjectKeyFactory.java |
| ObjectKeyTemplate.java (interface for the following:) |
| JIDLObjectKeyTemplate.java (object key used in *Delegate) |
| POAObjectKeyTemplate.java (object key used in GenericPOA*SC) |
| WireObjectKeyTemplate.java (used for non-Sun ORB IORs) |
| ObjectId.java (a simple wrapper for byte[]) |
| ObjectKey.java (contains ObjectId and ObjectKeyTemplate) |
| |
| Components: |
| TaggedComponentFactories.java (contains method for registering factories) |
| TaggedComponentFactoryFinder.java (contains registered factories) |
| TaggedComponent.java (interface of all tagged components) |
| AlternateIIOPAddressComponent.java |
| CodeSetsComponent.java |
| JavaCodebaseComponent.java |
| ORBTypeComponent.java |
| PoliciesComponent.java |
| |
| Profiles: |
| IIOPProfile.java (IIOPProfileTemplate and ObjectId) |
| IIOPProfileTemplate.java (contains version, address, ObjectKeyTemplate, |
| list of TaggedComponent) |
| TaggedProfile.java (interface for all TaggedProfiles) |
| TaggedProfileFactoryFinder.java |
| TaggedProfileTemplate.java |
| |
| IOR: |
| IOR.java |
| IORTemplate.java (List of IIOPProfileTemplate |
| ObjectIds.java (List of ObjectId: needed for an IOR constructor) |
| |
| Notes from integration code review: |
| |
| General: |
| - Look at making IOR API public, or |
| move everything into com.sun.corba.se.impl.ior |
| (don't hold up putback for this) |
| Making public: |
| - Writeable needs getBytes() as well as write() |
| methods. |
| - codec can be used with an Any to convert between |
| IDL data type and sequence of bytes. |
| - write() needs to use getBytes, then write id, length, |
| octets to output stream. |
| - getBytes() method needs to get typecode from IDL |
| then create Any. |
| - IdEncapsulations need to have constructor that takes |
| byte[] (encapsulation of value). |
| Why not? |
| - Unencapsulated object keys can't be made portable |
| - Lots of dependencies on ORB code in ObjectKey support |
| Conclusion: |
| - move to internal (DONE) |
| - JAVA_MAGIC should move to ObjectKeyTemplates (DONE) |
| - check for intToBytes/bytesToInt related to object key |
| corba/ServerDelegate (DONE) |
| POA/GenericPOAServerSC (DONE) |
| POA/SubcontractResponseHandler (DONE) |
| TransactionalPOA/TransactionalClientSC.java (DONE) |
| TransactionalPOA/TransactionalServerSC.java (DONE) |
| |
| ./com/sun/corba/se/impl/cosnaming/BootstrapServer.java |
| - remove sc_init_key_* (DONE) |
| |
| ./com/sun/corba/se/impl/poa/POAImpl.java |
| - remove line 130: comment on other endpoints, e.g. SSL (DONE) |
| - add revisit comment on line 133: use multiple server port API (DONE) |
| |
| ./com/sun/corba/se/impl/corba/ORB.java |
| - object_to_string: add comment that connect only takes place in |
| non-POA cases. (DONE) |
| |
| ./com/sun/corba/se/impl/corba/ServerDelegate.java |
| - chase down the object key offsets (DONE) |
| (search for bytesToInt and intToBytes) |
| |
| ./com/sun/corba/se/impl/core/SubcontractRegistry.java |
| - getServerSubcontract: add b-e l-e comment and history on INIT, TINI (DONE) |
| - getServerSubcontract: reference to constants (May not do this?) |
| - getServerSubcontract: return null at end IS reachable, in the |
| case where we have essentially a name in the key that isn't |
| one of the ones we support. Throw an exception? (DONE) |
| - add minor code for INTERNAL (and string) (DONE) |
| - remove setId calls in callers to getClientSubcontract (DONE) |
| - throw INTERNAL exception for temp.size() != 1 case (DONE) |
| Think about INST corbaloc problems (multi-profile IORs) |
| both return nulls should throw exceptions (DONE) |
| |
| ./com/sun/corba/se/impl/core/IOR.java |
| - Add some comments to getIORfromString about 4/2 constants (DONE) |
| - fix name: should be getIORFromString (DONE) |
| - IOR( InputStream ) has a problem with cachedCodeBase: |
| is should not call getCodeBase: must refactor to |
| an internal implementation method. (DONE) |
| - isEquivalent and isLocal should assert failure |
| if multiple profiles (through exception in getProfile) (DONE) |
| (add comments about multi case) |
| |
| ./com/sun/corba/se/impl/iiop/CDRInputStream_1_0.java |
| - read_Object: add assert in case servant is not Tie or objref (DONE) |
| |
| ./com/sun/corba/se/internal/TransactionalPOA/TransactionalPOAImpl.java |
| - add comment about transactionalIortemplate: goes away after |
| we get to OTS 1.2 transactional policy. (DONE) |
| - change transactionalClone( ObjectKeyTemplate ) so that |
| we get an error (INTERNAL) if NOT POAObjectKeyTemplate (DONE) |
| - line 138: get string constant from |
| org.omg.CosTransactions.TransactionalObject (DONE) |
| - remove Delegate d decl. (DONE) |
| |
| We need to assign minor codes for all exceptions! |
| |
| We need to clean up the minor code base usage! (DONE) |
| |
| Add equals/toString to: |
| Do not try to develop a reflective universal equals: too slow! |
| Do we really want equals on lists? |
| If we do, define collectionEqual on FreezableList |
| |
| CodeSetsComponent: toString |
| FreezableList: basic toString, equals methods |
| IIOPProfile: toString |
| IIOPProfileTemplate: toString |
| IOR: toString |
| IORTemplate.java: toString, equals (inherit?) |
| IdEncapsulationContainerBase.java: make abstract, but provide base toString/equals |
| IdentifiableContainerBase.java: make abstract (no other changes) |
| (ContainerBase classes need some explanation) |
| ObjectIds.java needs toString, equals (use FreezableList?) |
| ObjectKey: toString |
| ObjectKeyFactory.java: singleton: don't add toString or equals |
| PoliciesComponent.java: should finish this sometime (after we figure out |
| exactly what to do with it) |
| TaggedComponentBase.java: should be abstract |
| TaggedComponentFactories.java: a singelton |
| TaggedComponentFactoryFinder.java: a singleton |
| TaggedProfileFactoryFinder.java: a singleton |
| JIDLObjectKeyTemplate: toString |
| POAObjectKeyTemplate: toString |
| WireObjectKeyTemplate: toString uninteresting: no data, equals not useful |
| |
| use util/Utility.objectToString to implement toString methods. |
| |
| Other changes: |
| |
| IIOPAddress.toString should include class name (DONE) |
| |
| New tests needed: |
| IIOPProfile.getIOPComponents |
| IIOPProfile.getIOPProfile |
| GenericTaggedProfile.getIOPComponents |
| GenericTaggedProfile.getIOPProfile |
| GenericTaggedComponent.getIOPComponent |
| ObjectKeyTemplate.getAdapterId |
| |
| Plus, do a read/write test for IOP stuff: |
| construct profile |
| convert to IOP.TaggedProfile |
| write to stream |
| get input stream |
| construct profile |
| check for equal |
| |
| do some tests on IOR.toString() just to see what gets printed. |
| |
| Add getAdapterId to *ObjectKeyTemplate.java (DONE) |
| Add some tests for this: |
| - WireObjectKeyTemplate throws an exception |
| - Identically constructed ObjectKeyTemplates produce identical Adapter Ids. |
| - Different OKTs produce different adapter IDs. |
| |
| New tests for versioning support: |
| |
| ORBVersionFactory: |
| - for create array methods (DONE) |
| - returns expected values for version encodings |
| - throws INTERNAL for negative version |
| - test one case for create stream method (DONE) |
| - getORBVersion returns correct version (DONE) |
| ORBVersionImpl: |
| - check equals on some ORBVersions (DONE) |
| - check that each ORBVersion returns correct orbtype (DONE) |
| JIDLObjectKeyTemplate: |
| - non-key constructor gives NEWER version (DONE) |
| POAObjectKeyTemplate: |
| - non-key constructor gives NEWER version (DONE) |
| OldJIDLObjectKeyTemplate: (DONE) |
| - non-key constructor with OLD, NEW MAGIC and check version |
| - other values throw exception |
| OldPOAObjectKeyTemplate: (DONE) |
| - non-key constructor with OLD, NEW MAGIC and check version (DONE) |
| - other values throw exception (DONE) |
| WireObjectKeyTemplate (DONE) |
| - version is FOREIGN |
| ObjectKeyFactory (DONE) |
| create the following keys and check results: |
| JIDL OLD OldJIDL with correct magic, version |
| JIDL NEW OldJIDL |
| JIDL NEWER JIDL |
| POA OLD OldPOA |
| POA NEW OldPOA |
| POA NEWER POA |