Document Number ptc/2000-08-05



Final FTF Report
of the
Portable Interceptors
Finalization
Task Force
to the
Platform Technical Committee
of the
Object Management Group
August 21, 2000
Document Numbers:
orbos/99-12-02 (revised submission)
orbos/99-12-03 (IDL as a text file)
orbos/99-12-14 (compilable IDL)
orbos/2000-01-01 (errata)
ptc/00-03-03 - (Draft Adopted Interceptor Spec) ptc/2000-04-05 (Final Adopted Spec)




Contents




Summary of PI FTF Activities



PI FTF Formation



PI FTF Membership and Voting Record

The columns titled V1 through V8 represent Votes 1 through 8. The symbols in the columns carry the following meaning:

Member Organization Status V1 V2 V3 V4 V5 V6 V7 V8
Blake Biesecker Gemstone added V V NV V V V NV V
Jishnu Mukerji Hewlett-Packard charter V V V V V V V V
Russell Butek IBM charter V V V V V V V V
Ioana Pirvulescu Inprise charter V V V V V V V V
Bob Kukura Iona charter V V V V V V V V
Dock Allen Mitre added NV V V V NV NV/X X X
Bill Beckwith OIS charter NV V V V V NV V V
Matthew Newhook OOC charter V V V V V V V V
Nick Sharman PeerLogic added V V V V V NV NV/X X
Jeff Mischkinsky persistence charter V V V V V V V V
Paul Kyzivat Rogue Wave added V V V V V V V V
Harold Carr Sun Microsystems charter V V V V V V V V
Polar Humenn Syracuse University added V V NV V V V V V
Shahzad Aslam-Mir Vertel charter NV V NV V NV NV/X X X



Disposition of Issues

Disposition Number of Occurrences Meaning of Disposition
Unresolved/Deferred 12 FTF could not agree on a resolution
Transferred 1 Transferred to another TF
Accepted (Changed and Closed) 16 Change made as requested
Rejected (Close, No Change) 13 RTF / FTF agreed NOT to do what was requested, or anything like it
Duplicate 3 Duplicate to another issue

Unresolved/Deferred

Issue 3322: Portable Interceptors: object_to_string, string_to_object
Issue 3429: ORBInitInfo needs the ORB
Issue 3599: Detail lacking in when request interceptors are called
Issue 3601: Portable Interceptors: 9.2.3 text describing `Arguments' - 4Y(choice A),3Y(choice B),1Y(choice C),1N,1A,4NV - unresolved
Issue 3609: Overriding POA policies
Issue 3615: Policy Management in Portable Interceptors
Issue 3672: Portable Interceptors / register_initial_reference()
Issue 3677: Interceptors must provide user-level request ID
Issue 3678: Interceptors must provide a retry mechanism
Issue 3679: PI must provide a means for security interceptors to clean up
Issue 3693: PI: Bi-endianness of Codec Factory
Issue 3766: Security needs access to servant and POA

Transferred

Issue 3665: Java ORB Id - 10Y,4N,0A,0NV
Transferred to the IDL to Java RTF.

Accepted

Issue 3321: Portable Interceptors: ORB mediated calls in ORB initializers - 9Y,1N,1A,3NV
Issue 3435: Interceptors and finalization - 8Y,2N,0A,2NV
Issue 3524: What if the target application code raises ForwardRequest? - 8Y,1N,2A,3NV
Issue 3568: Relax the restriction of 9.1.1 - 13Y,0N,1A,0NV
Issue 3586: Server-side thread-scoped PICurrent to request-scoped PICurrent problem - 14Y,0N,0A,0NV
Issue 3598: Java mapping of register_orb_initializer - 10Y,0N,1A,3NV
Issue 3619: Thread context switches - 9Y,1N,0A,4NV
Issue 3640: target_is_a wrong? - 11Y,0N,1A,2NV
Issue 3642: Affects of INS on Interceptors - resolve_initial_references - 10Y,1N,0A,3NV
Issue 3653: Should get/set_slot on PICurrent be disallowed in ORBInitializer? - 11Y,0N,0A,3NV
Issue 3660: IORInfo::get_effective_policy access to POA policies - 14Y,0N,0A,0NV
Issue 3683: New issue: Server Side Flow Clarification - 11Y,0N,1A,2V
Issue 3684: It is not clear when ORB initializers are meant to be called - 9Y,0N,3A,2NV
Issue 3742: resolution order (resolution to issue 3642) - 9Y (for B),0N,3A,2NV - Choice B passed
Issue X: Portable Interceptors viz-a-viz LOCATION_FORWARD_PERMANENT - 10Y,0N,0A,2NV
Issue XX: Exact text for IORInfo::get_effective_policy - 11Y,0N,0A,0NV

Rejected

Issue 3403: PI needs the ORB to be available in IDL - 2Y(choice A),8N,0A,4NV
Issue 3440: adapter_activator - 11Y,2N,1A,0NV
Issue 3523: PortableInterceptor::ForwardRequest vs PortableServer::ForwardRequest - 11Y,0N,0A,3NV
Issue 3545: org.omg.PortableInterceptor.ORBInitializerClass.XXX on command line? - 9Y,0N,1A,2NV
Issue 3611: Global-Scoped Invocations viz-a-viz ORB-scoped slot ids - 11Y,0N,0A,3NV
Issue 3625: resolve_initial_references should be OK in ORBInitInfo::pre_init - 0Y,10N,0A,2NV
Issue 3626: CORBA as a layer in layered systems - 11Y,0N,1A,2NV
Issue 3661: Two-phased IORInterceptor - 2Y,10N,2A,0NV
Issue 3662: IORTemplate - 2Y,11N,1A,0NV
Issue 3663: IORInterceptor invoked on each Object Adapter Creation - 2Y,9N,3A,0NV
Issue 3664: Persistent Server Id - 2Y,10N,2A,0NV
Issue 3666: Persistent Server Port - 2Y,11N,1A,0NV
Issue 3667: Object Adapter Destroy Interceptor - 2Y,9N,3A,0NV

Duplicate

Issue 3432: ORB access needed in IDL for Interceptors
Issue 3450: Getting rid of ORB PIDL
Issue 3628: resolve should be ok in pre_init


Profile of Changes Made in Response to Issues




Detailed Resolution of Issues

Issue 3321: Portable Interceptors: ORB mediated calls in ORB initializers

Click here for this issue's archive.
Source: Object Oriented Concepts (Mr. Matthew Newhook, matthew@ooc.com)
Nature: Uncategorized Issue
Severity:
Summary: Are ORB mediated calls allowed in the ORB initializers? If so, are interceptors
applied to these calls?
Resolution:  Add a paragraph after the first paragraph in section 21.7.1.2 post_init (page 21-40, ptc/00-03-03).
Revised Text:

Calling the post_init operations is not the final task of ORB initialization.  The final task, following the post_init calls, is attaching the lists of registered interceptors to the ORB.  Therefore, the ORB does not contain the interceptors during calls to post_init.  If an ORB-mediated call is made from within post_init, no request interceptors will be invoked on that call.  Likewise, if an operation is performed which causes an IOR to be created, no IOR interceptors will be invoked.

Actions taken:  Incorporate change and close issue.
January 17, 2000: received issue

Issue 3402: PI needs the ORB to be available in IDL

Click here for this issue's archive.
Source: International Business Machines (Mr. Russell Butek, rbutek@tivoli.com)
Nature: Uncategorized Issue
Severity:
Summary: Portable interceptor implementations need access to the ORB. In order to accomplish this, the ORB must be defined in IDL There are four possibilities that have been opined:

1. Define the ORB as "native ORB;"

This puts the ORB into the IDL namespace. However, the ORB is still described in PIDL. This doesn't really help us to remove PIDL, some folks feel this is a misuse of native, but it would be sufficient for the requirements of PI.

2. Define an IDL wrapper for the ORB, call it proxyORB for now.

proxyORB would contain exactly the same items that the PIDL ORB does, only defined in pure IDL. Advantages: this is a migration step toward getting rid of ORB PIDL if we encourage folks to use proxyORB rather than ORB. Disadvantages: dual maintenance; lots of work - too much for this FTF?; I don't think we know all the ramifications; where do you get a proxyORB? from the ORB?

3. Make the leap and redefine ORB in IDL now.

This option is similar to option 2, but the IDL is not a wrapper, it's the real ORB. Advantages: no dual maintenance; we get rid of ORB PIDL right now. Disadvantages: BIG step - too big for this FTF?; lots of work; I don't think we know all the ramifications.

4. Make the ORB a primitive type like TypeCode.

This seems to be generally undesired. It requires all compilers to change. Unless someone really likes this approach, I don't think we should even consider it.

Note: No proposals for 1, 2, 3 or 4 were received. A alternate proposal, the one to be voted on here, was submitted by Matthew Newhook.

Also note: If this issue passes, adequate justification should be provided in the FTF report. Ideally, the alternatives that were considered and rejected should be summarized with reasons for rejection.


Resolution:  Vote No, Proposal A, or Proposal B.


Revised Text: In section 21.7.2: Delete the following methods, exceptions and types.

    register_initial_reference
    resolve_initial_references
    codec_factory
    InvalidName
    ObjectId
Add:

    readonly attribute CORBA::ORB orb;
Add a new section to describe this attribute:

    This attribute is the ORB being initialized.
In addition I propose two additions to the section:

Proposal A:

The ORB shall be considered partially constructed in that any method invocations on objects created by this ORB will not have request interceptors called. Calling work_pending()/perform_work()/run()/shutdown() or destroy() on the ORB is not permitted and shall have undefined results.

Proposal B:

The ORB shall be considered partially constructed in that no method invocations on objects created by this ORB are permitted. Calling work_pending()/perform_work()/run()/shutdown() or destroy() on the ORB is not permitted and shall have undefined results.

I prefer Proposal A since not being able to make method invocations implies that things that narrowing of object references is not permitted. What this essentially means is that interceptors probably cannot be fully initialized in the ORB initializer.

PIDL Mapping for C++:

[I'm not sure exactly how this should look -- this is essentially
trimmed output from out IDL translator]

namespace PortableInterceptor
{

class ORBInitInfo : virtual public CORBA::Object
{
public:

    static inline ORBInitInfo_ptr
    _duplicate(ORBInitInfo_ptr p)
    {
        if(p)
            p -> _OB_incRef();
        return p;
    }

    static inline ORBInitInfo_ptr
    _nil()
    {
        return 0;
    }

    static ORBInitInfo_ptr _narrow(CORBA::Object_ptr);
    static ORBInitInfo_ptr _narrow(CORBA::AbstractBase_ptr);

    struct DuplicateName : public CORBA::UserException
    {
        DuplicateName() { }
        DuplicateName(const DuplicateName&);
        DuplicateName& operator=(const DuplicateName&);

        static DuplicateName* _downcast(CORBA::Exception*);
        static const DuplicateName* _downcast(const CORBA::Exception*);
        virtual void _raise() const { throw *this; }
        virtual const char* _name() const;
        virtual const char* _rep_id() const;
        virtual char* _to_string() const;

        DuplicateName(const char*);
    };

    virtual CORBA::StringSeq* arguments() = 0;

    virtual char* orb_id() = 0;

    virtual CORBA::ORB_ptr orb() = 0;

    virtual void add_client_request_interceptor(ClientRequestInterceptor_ptr interceptor) = 0;

    virtual void add_server_request_interceptor(ServerRequestInterceptor_ptr interceptor) = 0;

    virtual void add_ior_interceptor(IORInterceptor_ptr interceptor) = 0;

    virtual SlotId allocate_state_slot() = 0;

    virtual void register_policy_factory(CORBA::PolicyType type,
                                         PolicyFactory_ptr policy_factory) = 0;
};

class ORBInitializer : virtual public CORBA::Object
{
public:

    static inline ORBInitializer_ptr
    _duplicate(ORBInitializer_ptr p)
    {
        if(p)
            p -> _OB_incRef();
        return p;
    }

    static inline ORBInitializer_ptr
    _nil()
    {
        return 0;
    }

    static ORBInitializer_ptr _narrow(CORBA::Object_ptr);
    static ORBInitializer_ptr _narrow(CORBA::AbstractBase_ptr);

    virtual void pre_init(ORBInitInfo_ptr info) = 0;

    virtual void post_init(ORBInitInfo_ptr info) = 0;
};

} // End of namespace PortableInterceptor

namespace CORBA
{

inline void
release(PortableInterceptor::ORBInitInfo_ptr p)
{
    if(p)
        p -> _OB_decRef();
}

inline Boolean
is_nil(PortableInterceptor::ORBInitInfo_ptr p)
{
    return p == 0;
}

} // End of namespace CORBA

//
// IDL:omg.org/PortableInterceptor/ORBInitializer:1.0
//
namespace CORBA
{

inline void
release(PortableInterceptor::ORBInitializer_ptr p)
{
    if(p)
        p -> _OB_decRef();
}

inline Boolean
is_nil(PortableInterceptor::ORBInitializer_ptr p)
{
    return p == 0;
}

} // End of namespace CORBA
PIDL mapping for Java (still to be supplied...)

Actions taken:  Close no change.
March 16, 2000: received issue

Issue 3435: Interceptors and finalization

Click here for this issue's archive.
Source: Object Oriented Concepts (Mr. Michi Henning, michi@ooc.com.au)
Nature: Uncategorized Issue
Severity:
Summary: The current PI spec doesn't give interceptors any chance to finalize themselves. As far as interceptors are concerned, the process simply disappears. That's rather bad news. For example, interceptors may allocate memory, open files, or do similar things with other resources. If interceptors are not given a chance to finalize themselves, that means they cannot clean up those resources. Depending on the environment, that can be positively disastrous. For example, in many environments, disappearing without freeing memory first causes a permanent and hard memory leak because there is no operating system to clean up after a task or process.

It appears that PI needs to add a finalization call and define when exactly that call runs for client- and server-side interceptors.


Resolution:  Incorporate change and close issue.
Revised Text: Add to 21.2:

    module PortableInterceptor {

    local interface Interceptor {
            readonly attribute string name;
            void destroy();
    };

    };
Add a description of the destroy() operation.

    This method is called during ORB::destroy(). When an application
    calls ORB::destroy, the ORB
    
    1) waits for all requests in progress to complete
    
    2) calls the Interceptor::destroy() operation for each interceptor

    3) completes destruction of the ORB
    
    Method invocations from within Interceptor::destroy() on
    object references for objects implemented on the ORB being destroyed
    result in undefined behavior. However, method invocations on objects
    implemented on an ORB other than the one being destroyed are permitted.
    (This means that the ORB being destroyed is still capable of acting
    as a client, but not as a server.)
In section to 4.2.3.5:

After paragraph:

  If destroy is called on an ORB that has not been shut down, it will
  start the shut down process and block until the ORB has shut down before
  it destroys the ORB. If an application calls destroy in a thread that
  is currently servicing an invocation, the BAD_INV_ORDER system
  exception will be raised with the OMG minor code 3, since blocking would
  result in a deadlock.
Add:

  If interceptors are registered with the ORB being destroyed, the
  Interceptor::destroy() operation is invoked on each interceptor
  (see section 21.2).

Actions taken:  Incorporate change and close issue.
March 22, 2000: received issue

Issue 3440:  adapter_activator

Click here for this issue's archive.
Source: Object Oriented Concepts (Mr. Matthew Newhook, matthew@ooc.com)
Nature: Uncategorized Issue
Severity:
Summary: Should interceptors be called before POA adapter activators are called?
Resolution: Based on the discussion, it appears that this was intentionally left undetermined.
Revised Text:
Actions taken:  Close, no change.
March 22, 2000: received issue

Issue 3523: PortableInterceptor::ForwardRequest vs PortableServer::ForwardRequest

Click here for this issue's archive.
Source: International Business Machines (Mr. Russell Butek, butek@us.ibm.com)
Nature: Uncategorized Issue
Severity:
Summary: We have two exceptions in CORBA that look almost identical:
PortableInterceptor::ForwardRequest and PortableServer::ForwardRequest. We did not want
the PortableInterceptor module to depend on PortableServer so we made our own version of
the exception. This new version added "boolean permanent" to the exception which does not
exist in the PortableServer version. But a thread of discussion now exists in
interop@omg.org to determine whether LOCATION_FORWARD_PERM should be
deprecated. If it IS deprecated, then the two versions of ForwardRequest will be identical. If
that occurs, would it make sense to combine the two exceptions into one exception located
outside of either module? Or should we just leave it as is?
Resolution:  Keep the exceptions as they are.
Revised Text:
Actions taken:  Close issue, no change.
March 30, 2000: received issue
 

Issue 3524: What if the target application code raises ForwardRequest?

Click here for this issue's archive.
Source: International Business Machines (Mr. Russell Butek, butek@us.ibm.com)
Nature: Uncategorized Issue
Severity:
Summary: Should the ORB care whether ForwardRequest is raised by an interceptor or by
the target application code? If no, then the client code will look a bit odd: void proc () raises
(PortableInterceptor::ForwardRequest); because the client will have to catch this exception
even though this exception will never get to the client. If yes, then we must specifically
restrict the meaning of ForwardRequest to something like: "this exception will only cause a
location forward if raised by an interceptor."

Resolution:  Retry behavior only occurs from an ORB call to an interceptor.  Make the following clarifications to ptc/00-03-03, section 21.3.15

Revised Text:

Add the following text to the end of the first paragraph of this section:

This behavior of causing a retry only occurs if the ORB receives a ForwardRequest from an interceptor.  If ForwardRequest is raised anywhere else it is pass through the ORB as is normal for a user exception.
And change the first sentence of the second paragraph from:
If an Interceptor raises a ForwardRequest exception, no other Interceptors are called for that interception point.
to:
If the ORB receives a ForwardRequest exception in response to a call of an interceptor, no other Interceptors are called for that interception point.
Actions taken:  Incorporate change and close issue.
March 30, 2000: received issue

Issue 3545: org.omg.PortableInterceptor.ORBInitializerClass.XXX on command line

Click here for this issue's archive.
Source: International Business Machines (Mr. Russell Butek, rbutek@tivoli.com)
Nature: Uncategorized Issue
Severity:
Summary: The submittor of this issue now wishes to close it:

"Put 3545 on the next vote as "Close, no change". I misunderstood the relationship in Java between the properties object and the args object on ORB.init when I raised this issue. There apparently isn't any relationship and I thought there was."


Resolution:  Vote YES to close this issue with no change.
Revised Text:

Actions taken:  Close issue, no change.
April 11, 2000: received issue

Issue 3568:  Relax the restriction of 9.1.1

Click here for this issue's archive.
Source: PeerLogic (Mr. Nick Sharman, nick.sharman@peerlogic.com)
Nature: Uncategorized Issue
Severity:
Summary: Section 9 of orbos/99-12-02 describes the ORBInitInfo operations
register_initial_reference and resolve_initial_reference, and places restrictions on when they can be
used: 9.1.1 pre_init: "All calls to ORBInitInfo::register_initial_reference must be made at this point
so that the list of initial references is complete for the post_init_point." 9.2.7
resolve_initial_references: "This operation is only valid during post_init." I assume that these
restrictions are to remove ordering dependencies between interceptors - if A needs to use an initial
service registered by B, then we can run the pre_inits for A and B in either order, and then the
post_inits for A and B in either order. That's understandable, but I believe may be too restrictive in
practice. For example, an interceptor may need to register an initial service but it will expect to find
the object reference via a location service such as Naming or Trading -available as initial services
"NameService" or "TradingService". I propose we relax the restriction of 9.1.1, and replace it by
guidance such as: "If it is expected that initial services registered by an interceptor will be used by
other interceptors, then those initial services should be registered at this point via calls to
ORBInitInfo::register_initial_reference." Note that the same functionality will be available via the
ORB after initialization anyway (11.1), so it seems a little arbitrary to forbid it only during the
post_init phase.
Resolution: In document ptc/00-04-05, make the recommended change.
Revised Text:
Replace the first paragraph in 21.7.1.1 pre_init:

This operation is called during ORB initialization. All calls to
ORBInitInfo::register_initial_reference must be made at this point so that the list
of initial references is complete for the post_init point.

with:

This operation is called during ORB initialization.  If it is expected that initial services registered by an interceptor will be used by other interceptors, then those initial services shall be registered at this point via calls to ORBInitInfo::register_initial_reference.

Actions taken:  Incorporate change and close issue.
April 19, 2000: received issue

Issue 3586: Server-side thread-scoped PICurrent to request-scoped PICurrent problem

Click here for this issue's archive.
Source: International Business Machines (Mr. Russell Butek, butek@us.ibm.com)
Nature: Uncategorized Issue
Severity:
Summary: In document ptc/00-03-03, page 21-35, point 5 states: 5. The ORB logically copies the
RSC to the server-side TSC after the receive_request_service_context points are processed and
before the servant manager is called. >>>>>This TSC is within the context for both the invocation
of the servant manager and the invocation of the target operation.<<<<< The receive_request
points may modify the RSC, but this no longer affects the TSC. I've bracketed the questionable
sentence between >>>>> <<<<<. The problem arises in point 8: 8. The TSC is copied back to the
RSC, overwriting the slots in the RSC. WHICH thread-scoped current is copied back to the
request-scoped current? We have at least 2 threads to worry about - the servant manager thread
and the target operation thread - and these could themselves spawn other threads. Which current is
supposed to be copied back to the request? I suggest the following change to point 8: 8. The TSC
from the thread on which the ORB invoked the target operation is copied back to the RSC,
overwriting the slots in the RSC.
Resolution: In document ptc/00-04-05, make the recommended change.
Revised Text:
Replace the text in bullet 8 in section 21.4.4.5 Flow of PICurrent between Scopes:

8. The TSC is copied back to the RSC, overwriting the slots in the RSC.

with:

8. The TCS from the thread on which the ORB invoked the target operation is copied back to the RSC, overwriting the slots in the RSC.

Actions takenIncorporate change and close issue.
April 27, 2000: received issue
 

Issue 3598:  Java mapping of register_orb_initializer (interceptors_ftf)

Click here for this issue's archive.
Source: IONA (Mr. Eoghan Glynn, eglynn@iona.com)
Nature: Uncategorized Issue
Severity:
Summary: There appears to be some confusion in section 21.7.3.1 of ptc/2000-04-05 in the
definition of the Java mapping for register_orb_initializer ... "The new property names are of the
form: org.omg.PortableInterceptor.ORBInitializerClass. where is the string name of a class which
implements org.omg.PortableInterceptor.ORBInitializer." specifies that a portion of the property
name is used to identify the ORBInitializer class to instantiate; the semantics of the property value
are left undefined. However the example: "To run a program called MyApp using this logging
service, the user could type: java -Dorg.omg.PortableInterceptor.ORBInitializerClass.com.x.Log-
ging = com.x.Logging.LoggingService MyApp" implies that its the property value that identfies this
class, and that the property name (needlessly) specifies its package. Can anyone indicate which of
the above are the correct semantics for org.omg.PortableInterceptor.ORBInitializerClass
properties? Also this section seems to confuse ORB properties (which I would understand to be
those set via the properties parameter to org.omg.CORBA.ORB.init()) with system properties (i.e.
those set via java -Dname=value).
Resolution: In document ptc/00-04-05, make the following change.
Revised Text:

The last line in the Java mapping of register_orb_initializer is wrong.  It reads:

    To run a program called MyApp using this logging service, the user could type:

    java -Dorg.omg.PortableInterceptor.ORBInitializerClass.com.x.Logging = com.x.Logging.LoggingService MyApp

It should read:

    To run a program called MyApp using this logging service, the user could type:

    java -Dorg.omg.PortableInterceptor.ORBInitializerClass.com.x.Logging.LoggingService MyApp

Actions taken:  Incorporate change and close issue.
May 4, 2000: received issue

Issue 3601: Portable Interceptors: 9.2.3 text describing `Arguments'

Click here for this issue's archive.
Source: Object Oriented Concepts (Mr Ted McFadden, tmcf@ooc.com.au)
Nature: Uncategorized Issue
Severity:
Summary: The text in section 9.2.3 / page 9-71 describing the arguments attribute to ORBInitInfo could use some more precise wording. It reads:

"This attribute contains the arguments passed to ORB_init. They may or may not contain the ORB's arguments."

I take this to mean that any ORB_init arguments that applied to the ORB instance being created may not be present. All other strings passed to ORB_init will be present so initialisation strings can be passed to the interceptors through ORB_init.

With the current text it is possible to think that you may not get *any* of the arguments to ORB_init.


Resolution:  Vote on A, B or C.
Revised Text: To clarify ptc/2000-04-05 page 21-42 Section 21.7.2.3 Arguments:

Current Text: This attribute contains the arguments passed to ORB_init. They may or may not contain the ORB's arguments.

Resolution Choices:

A. No Change. The discussion indicates a new issue needs to be raised to address this at a higher level.

B. This attribute contains the arguments passed to ORB_init. It may or may not contain the arguments which the ORB recognizes. It shall contain all arguments passed to ORB_init which the ORB does not recognize.

C. This attribute shall contain all the arguments that are passed to ORB_init.

Actions taken:  Vote not conclusive. Unresolved.
May 3, 2000: received issue

Issue 3611: Global-Scoped Invocations viz-a-viz ORB-scoped slot ids (interceptors-ftf)

Click here for this issue's archive.
Source: Sun Microsystems (Dr. Harold Carr, Ph.D., harold.carr@sun.com)
Nature: Uncategorized Issue
Severity:
Summary: Invocations are global-scoped but slot ids are ORB-scoped. This does not work in the
presence of multiple ORBS.
Resolution:  Through a rather lengthy email discussion it was determined that, while Harold may have presented a legitimate problem, changing how the slots work is not the solution.  Harold raised another issue - 3626 - which revisits this from a different angle.
Revised Text:
Actions taken:  Close issue, no change
May 15, 2000: received issue

Issue 3619: Thread context switches

Click here for this issue's archive.
Source: Object Oriented Concepts (Mr. Michi Henning, michi@ooc.com.au)
Nature: Uncategorized Issue
Severity:
Summary: The current draft permits receive_request_service_context, receive_request, the operation, and send_reply or send_exception to all run in different threads.

This is rather inconvenient, especially for OTS, where I want to to talk to an XA interface from the interception points. The problem is that XA is sensitive to the calling thread and doesn't allow me to, for example, start something in one thread and finish it in another.

Now, consider the following:

        - The POA spec already requires preinvoke, the operation, and
          postinvoke to run in the same thread.

        - The sequence of invocations if a servant locator is present
          for interceptors is:

          1) receive_request_service_context
          2) preinvoke
          3) receive_request
          4) operation
          5) postinvoke
          6) send_reply or send_exception

          Of these, 2, 4, and 5 must happen in the same thread.
Now, what is the likelihood that an interceptor implementation will switch context after preinvoke and before receive_request, only to have to switch back to the original thread after preinvoke and before the operation? Essentially zero, I think. It's a lot harder and a lot less efficient to do that context switch than to not do it. In other words, I don't think we would lose anything if we required that 3 and 4 must run in the same thread.

Similarly, an implementation isn't going to do a context switch after 4 (or 5) and before 6, because at point 6 I still must be able to modify the reply context. (If the ORB uses a separate thread to squirt reply packets onto the wire, it might as well context switch to that reply thread *after* point 6, because until after point 6, it can't marshal anything anyway.)

So, I would like to consider a change such that 2-6 must happen in the same thread. It would make OTS and other services that have some implicit dependency on thread-specific data much easier to implement, and I don't think it would constrain ORB implementations.


Resolution: 
Revised Text: The following paragraph be added to the end of section 21.3.10.2 "Additional Server-side Details" on page 21-17:

If a POA and a servant locator are present, the order of their operations and interception points is:


          1) ServerRequestInterceptor.receive_request_service_context
          2) ServantLocator.preinvoke
          3) ServerRequestInterceptor.receive_request
          4) the operation
          5) ServantLocator.postinvoke
          6) ServerRequestInterceptor send_reply, send_exception, or send_other
preinvoke, the operation, and postInvoke are required to execute in the same thread (see section 11.3.6 ServantLocator Interface on page 11-25). Since receive_request occurs within this chain, receive_request shall also execute in the same thread.

postinvoke executes in the same thread as preinvoke in order for postinvoke to perform any necessary closure processing. Likewise, the sending interception points (send_reply, send_exception, and send_other) should also execute in the same thread.

Adding this restriction changes a number of other statements in the spec as well. The following paragraphs in doc # ptc/2000-04-05 must also change:

Page 21-14, first paragraph of section 21.3.9.2 "receive_request":

This interception point allows an Interceptor to query request information after all the information, including operation parameters, are available. This interception point may or may not execute in the same thread as the target invocation.

will change to:

This interception point allows an Interceptor to query request information after all the information, including operation parameters, are available. This interception point shall execute in the same thread as the target invocation.

The following sentence will be added to the end of the first paragraph in each of the sections: 21.3.9.3 "send_reply", 21.3.9.4 "send_exception", and 21.3.9.5 "send_other":

This interception point shall execute in the same thread as the target invocation.

Page 21-35, points 5 and 6 of section 21.4.4.5:

5. The ORB logically copies the RSC to the server-side TSC after the receive_request_service_context points are processed and before the servant manager is called. This TSC is within the context for both the invocation of the servant manager and the invocation of the target operation. The receive_request points may modify the RSC, but this no longer affects the TSC.

6. Control transfers to the server threads which may read and write this server-side TSC.

will change to:

5. The ORB logically copies the RSC to the server-side TSC after the receive_request_service_context points are processed and before the servant manager is called. This TSC is within the context for the receive_request points, the invocation of the servant manager, and the invocation of the target operation. The receive_request points may modify the RSC, but this no longer affects the TSC.

6. The receive_request points are called. These points have access to the RSC - though modifying the RSC at this point has no affect on the TSC. Since these points execute in the same thread as the target operation invocation, these points may modify the server-side TSC. After the receive_request points are called, control transfers to the server threads which may also read and write this server-side TSC.

Page 21-36, Figure 21-1 also needs changing. Either a two-way arrow must exist between the boxes for receive_request and Thread Scope PICurrent or the receive_request box is put within the Server Threads box. Ditto for the "Send Interception Points" box. Any preferences?

Page 21-37, the last paragraph of section 21.4.4.6:

Interceptors shall assume that each interception point logically runs in its own thread, with no context relationship between it and any other thread. While an ORB implementation may not actually behave in this manner, it is up to the ORB implementation to treat PICurrent as if it did.

will change to:

Interceptors shall assume that each client-side interception point logically runs in its own thread, with no context relationship between it and any other thread. While an ORB implementation may not actually behave in this manner, it is up to the ORB implementation to treat PICurrent as if it did.

Interceptors shall assume that all server-side interception points except receive_request_service_context run in the same thread as the target operation invocation, thereby sharing thread context information. receive_request_service_context, like all client-side interception points, logically runs in its own thread, with no context relationship between it and any other thread.

Actions taken:  Incorporate change close issue.
May 18, 2000: received issue

Issue 3625: resolve_initial_references should be OK in ORBInitInfo::pre_init

Click here for this issue's archive.
Source: Sun Microsystems (Dr. Harold Carr, Ph.D., harold.carr@sun.com)
Nature: Uncategorized Issue
Severity:
Summary: Portable Interceptors ptc/2000-04-05 21.7.2.7 says that resolve_initial_references is only valid during post_init. This restriction should be removed. Otherwise only local objects may be registered via register_initial_reference in pre_init.

To create a non-local object and register it in pre_init one needs a POA which can only be obtained via resolve_initial_references.


Resolution:  Incorporate change.


Revised Text: Remove the first sentence of 21.7.2.7:

"This operation is only valid during post_init."

Add the following paragraphs following the existing paragraph of 21.7.2.7:

If resolve_initial_references is used to obtain a reference to the RootPOA, and new children POAs of that RootPOA are created during pre_init or post_init, then no IORInterceptors are executed for these newly created POAs. Further, regardless of the policy set associated with the these POAs, no components added via IORInfo::add_ior_component or IORInfo::add_ior_component_to_profile will appear in references created by these POAs.

Invocations are allowed on references created by these POAs at anytime. If the invocations occur during pre_invoke or post_invoke, then no RequestInterceptors are executed.

Actions taken:  Close issue. No Change.
May 19, 2000: received issue

Issue 3626: CORBA as a layer in layered systems

Click here for this issue's archive.
Source: Sun Microsystems (Dr. Harold Carr, Ph.D., harold.carr@sun.com)
Nature: Uncategorized Issue
Severity:
Summary: This relates to issue 3611 which was closed in vote 1.
Resolution:  Close issue.
Revised Text:

Actions taken:  Close issue. No Change.
March 16, 2000: received issue

Issue 3640: target_is_a wrong?

Click here for this issue's archive.
Source: Object Oriented Concepts (Mr. Michi Henning, michi@ooc.com.au)
Nature: Uncategorized Issue
Severity:
Summary: The current spec says that target_is_a may be invoked from send_reply, send_exception, and send_other. This appears to be impossible because these interception points run after postinvoke(), but once postinvoke() was called, the servant may no longer exist (because it is legal to call "delete servant" in postinvoke()). So, it appears that target_is_a cannot be available in these places.


Resolution:  In table 21-2 ServerRequestInfo Validity, on page 21-28 of ptc/2000-04-05, change the rows for target_most_derived_interface and target_is_a. Also add a new footnote.


Revised Text: Table for those rows change to (with footnote 4):

receive_request_
service_contexts receive_request send_reply send_exception send_other
                                   4          4              4
no               yes             no         no             no
and the new footnote is:

The operation is not available in this interception point because the necessary information requires access to the target object's servant, which may no longer be available to the ORB. For example, if the object's adapter is a POA that uses a ServantLocator, then the ORB invokes the interception point after it calls ServantLocator::postinvoke().

Actions taken:  Incorporate change and close issue.
May 23, 2000: received issue

Issue 3642: Affects of INS on Interceptors - resolve_initial_references (interceptors-ftf)

Click here for this issue's archive.
Source: International Business Machines (Mr. Russell Butek, butek@us.ibm.com)
Nature: Uncategorized Issue
Severity:
Summary: This is an interceptor issue, but it is related to the INS work. The interceptor spec
(ptc/2000-04-05) adds register_initial_reference to the ORB interface (section 21.8, page 21-46).
The Interoperable Naming Service spec (ptc/99-12-03) adds arguments to ORB_init: -ORBInitRef
and -ORBDefaultInitRef (section 4.8, page 4-44). Both affect resolve_initial_references. They do
not look mutually exclusive. If they are not, then all that has to be decided is the resolution order.
The INS spec says: -------------------- 4.8.4.1 Default Resolution Order The default order for
processing a call to CORBA::ORB::resolve_initial_references for a given is: 1. Resolve with
-ORBInitRef for this if possible 2. Resolve with an -ORBDefaultInitRef entry if possible 3. Resolve
with pre-configured ORB settings. ------------------- Where would objects added with
register_initial_references fit in this list? 0? 2.5? Consider that register_initial_reference can be called
after ORB_init AND during ORB_init in the ORB Initializers (section 21.7, page 21-40). I don't
know if that makes a difference, but keep it in mind.
Resolution:  Place the register_initial_reference entry in the resolution order list at point 2.5.
Revised Text:

Change document #ptc/2000-04-05, page 4-25, section titled "Default Resolution Order" from:

The default order for processing a call to CORBA::ORB::resolve_initial_references for a given <ObjectID> is:
1. Resolve with -ORBInitRef for this <ObjectID> if possible
2. Resolve with an -ORBDefaultInitRef entry if possible
3. Resolve with pre-configured ORB settings.

to:

The default order for processing a call to CORBA::ORB::resolve_initial_references for a given <ObjectID> is:
1. Resolve with -ORBInitRef for this <ObjectID> if possible
2. Resolve with an -ORBDefaultInitRef entry if possible
3. Resolve with a register_initial_reference entry if possible
4. Resolve with pre-configured ORB settings.
 

Actions taken:  Incorporate change and close issue. However, this is modified by issue 3742.
May 24, 2000: received issue

Issue 3653: Should get/set_slot on PICurrent be disallowed in ORBInitializer? (interceptors-ftf)

Click here for this issue's archive.
Source: Sun Microsystems (Dr. Harold Carr, Ph.D., harold.carr@sun.com)
Nature: Uncategorized Issue
Severity:
Summary: Currently one can write code like post_init(ORBInitInfo info) { PICurrent pic = (narrow
...)info.resolve_initial_references("PICurrent"); SlotId id = info.allocate_slot_id(); pic.set_slot(id,
...); } It would be most efficient if an implementation could wait until after all ORBInitializer
complete to allocate a fixed sized slot table. However, the current spec makes it impossible to wait.
I do not think there is anything useful you can do via set_slot at this point so disallowing it should
not be a problem.
Resolution: For performance reasons, we have always wanted a fixed size slot table.  Without fixing the problem in this issue, we lose any fixed-size optimizations.
Revised Text:

In document #ptc/2000-04-05, change the following:

Append the following sentence to section 21.4.3.1 "get_slot"

If get_slot is called from within an ORB initializer (see section 21.7 Registering Interceptors) BAD_INV_ORDER with a minor code of 10 shall be raised.
 

Append the following sentence to section 21.4.3.2 "set_slot"

If set_slot is called from within an ORB initializer (see section 21.7 Registering Interceptors) BAD_INV_ORDER with a minor code of 10 shall be raised.
 

Append the following sentences to section 21.7.2.11 "allocate_slot_id":

Note that while slot id's can be allocated within an ORB initializer, the slots themselves cannot be initialized.  Calling set_slot or get_slot on the PICurrent (see section 21.4 Portable Interceptor Current) within an ORB initializer shall raise a BAD_INV_ORDER with a minor code of 10.

Actions taken: Incorporate change and close issue.
May 26, 2000: received issue

Issue 3660: IORInfo::get_effective_policy access to POA policies

Click here for this issue's archive.
Source: Sun Microsystems (Dr. Harold Carr, Ph.D., harold.carr@sun.com)
Nature: Uncategorized Issue
Severity:
Summary: The standard POA policies should be available via IORInfo::get_effective_policy
Resolution:  Exact text to be determined as a new issue if this issue passes.

Actions taken:  Incorporate change and close issue. See issue XX for exact text.
May 30, 2000: received issue

Issue 3661: Two-phased IORInterceptor

Click here for this issue's archive.
Source: Sun Microsystems (Dr. Harold Carr, Ph.D., harold.carr@sun.com)
Nature: Uncategorized Issue
Severity:
Summary: Add an IORInterceptor operation which runs after IORInterceptor::establish_components to "get" all the established components.

   void IORInfo::components_available( in IORInfo info ) ;
It would not be legal to call IORInfo::add_ior_component nor IORInfo::add_ior_component_to_profile in IORInfo::components_available.


Resolution:  Exact text to be determined as a new issue if this issue passes.

Actions taken:  Close issue. No change.
May 30, 2000: received issue

Issue 3662: IORTemplate

Click here for this issue's archive.
Source: Sun Microsystems (Dr. Harold Carr, Ph.D., harold.carr@sun.com)
Nature: Uncategorized Issue
Severity:
Summary: Make the IORTemplate that is implicit in IORInfo::establish_component(s) explicit:

/** 
* A value type that captures the concept of creating
* object references according to a template.
*
* Object ID is the value passed to create_reference_with_id or the equivalent
* assigned in create_reference.
*
* Note that the ORB must provide an implementation for
* ObjectTemplateFactory and register it.
*/

valuetype IORTemplate 
{
        typedef sequence< octet > ObjectID ;

        IOP::IOR create_reference_with_id( in ObjectID id ) ;

        factory init( in Object obj ) ;
};
Add the following attribute to IORInfo:

local interface IORInfo {
    attribute IORTemplate ior_template;
} ;

Resolution:  Exact text to be determined as a new issue if this issue passes.

Actions taken:  Close issue. No change.
May 30, 2000: received issue

Issue 3663: IORInterceptor invoked on each Object Adapter Creation

Click here for this issue's archive.
Source: Sun Microsystems (Dr. Harold Carr, Ph.D., harold.carr@sun.com)
Nature: Uncategorized Issue
Severity:
Summary: IORInterceptor operations shall be invoked on each object adapter creation.
Resolution:  Exact text to be determined as a new issue if this issue passes.

Actions taken:  Close issue. No change.
May 30, 2000: received issue

Issue 3664: Persistent Server Id

Click here for this issue's archive.
Source: Sun Microsystems (Dr. Harold Carr, Ph.D., harold.carr@sun.com)
Nature: Uncategorized Issue
Severity:
Summary: A PersistentServerId is required for servers which host POA(s) with a persistent lifespan policy. This enables the POA to generate the same adapter ID for the POA within a ORB with a fixed ORB ID in a server with a particular PersistentServerId.

Proposal:

The persistent server ID is assigned by passing a

    -ORBPersistentServerID= ... // some value
parameter to the ORB_init() call. In java this is done using the

    org.omg.CORBA.PersistentServerID
property.


Resolution:  Exact text to be determined as a new issue if this issue passes.

Actions taken:  Close issue. No change.
May 30, 2000: received issue

Issue 3665: Java ORB Id

Click here for this issue's archive.
Source: Sun Microsystems (Dr. Harold Carr, Ph.D., harold.carr@sun.com)
Nature: Uncategorized Issue
Severity:
Summary: Services built on Portable Interceptors work in relation to the ORB with which they are registered. There needs to be some means of identifying this ORB (besides its reference) so other services or facades (e.g., JNDI) can use the same ORB. The standard way of identifying an ORB is ORBid argument to ORB_init. The Java mapping of ORB_init should support ORBid.


Resolution:  Exact text to be determined as a new issue if this issue passes.

Actions taken:  Incorporate change and close issue. However, this is out-of-scope for the interceptors FTF. It is being transferred to the IDL to java RTF.
May 30, 2000: received issue

Issue 3666: Persistent Server Port

Click here for this issue's archive.
Source: Sun Microsystems (Dr. Harold Carr, Ph.D., harold.carr@sun.com)
Nature: Uncategorized Issue
Severity:
Summary: A standard mechanism for providing a persistent server port information to an activation daemon needs to be defined. An activation daemon needs to listen on the same port each time it is started such that object references created by "persistent" POAs will be valid.

Proposal:

The persistent port id is assigned by passing a

    -ORBPersistentServerPort=... // some value
parameter to the ORB_init() call. In java this is done using the

    org.omg.CORBA.PersistentServerPort
proprty to indicate the listening port for the activation daemon.


Resolution:  Exact text to be determined as a new issue if this issue passes.

Actions taken:  Close issue. No change.
May 30, 2000: received issue

Issue 3667: Object Adapter Destroy Interceptor

Click here for this issue's archive.
Source: Sun Microsystems (Dr. Harold Carr, Ph.D., harold.carr@sun.com)
Nature: Uncategorized Issue
Severity:
Summary: An interceptor needs to be provided which gets invoked when an object adapter is destroyed.


Resolution:  Exact text to be determined as a new issue if this issue passes.

Actions taken:  Close issue. No change.
May 30, 2000: received issue

Issue 3683: Server Side Flow Clarification

Click here for this issue's archive.
Source: Sun Microsystems (Dr. Harold Carr, Ph.D., harold.carr@sun.com)
Nature: Uncategorized Issue
Severity:
Summary: An example needs to be added to illustrate server side flow when an intermediate point raises an exception.
Resolution:  Add the following example after the existing 2nd scenario in section 21.2.10.3 Server-side Flow Examples (page 17-19, ptc/00-03-03).
Revised Text: Scenario: B.receive_request raises an exception:

A.receive_request_service_contexts is called;
B.receive_request_service_contexts is called;
C.receive_request_service_contexts is called;
A.receive_request is called;
B.receive_request is called and raises a SystemException;
C.send_exception is called;
B.send_exception is called;
A.send_exception is called;

In this scenario you can see that the flow for each Interceptor follows the rules. Since the receive_request_service_contexts starting point ran to completion then, no matter what happens in intermediate points, a "terminating" intercpetion point must be called for all interceptors.

Actions taken:  Incorporate change and close issue.
June 28, 2000: received issue

Issue 3684: It is not clear when ORB initializers are meant to be called

Click here for this issue's archive.
Source: International Business Machines (Mr. Russell Butek, rbutek@tivoli.com)
Nature: Uncategorized Issue
Severity:
Summary: ORB_Init should only call ORB initializers when instantiating a new ORB, not every time ORB_Init is called. This is not clear in the spec.

The offending verbage is in the first of the following 2 paragraphs from ptc/2000-04-05, page 21-44, between >>> and <<<:

Each service that implements Interceptors will provide an instance of ORBInitializer. To use a service, an application would first call register_orb_initializer, passing in the service?s ORBInitializer. After this is complete, the application would instantiate a new ORB by calling ORB_init with a new ORB ID. >>>ORB_init calls each registered ORBInitializer. The returned ORB will contain any Interceptors that the given service requires. <<<

register_orb_initializer is a global operation. An ORBInitializer registered at a given point in time will be called by all instantiating ORB_init calls that occur after that point in time. (An instantiating ORB_init call is one which produces a new ORB. In other words, one that is not passed the ID of an existing ORB.) No ORB instantiated before that point in time will be affected by that ORBInitializer. Moreover, if register_orb_initializer is called from within an initializer, the initializer registered by that call will not be called for the ORB currently being initialized. That initializer will only be invoked on an ORB instantiated at a later time.

The offending sentence implies that the ORB initializers are called on EVERY ORB_Init call. It should only be called on every ORB_Init call that instantiates a new ORB. This "instantiating ORB_Init call" is defined in the next paragraph, but it should be defined and used in the first for clarity. I propose rewriting the above two paragraphs as shown in the revised text section.


Resolution: 
Revised Text: Each service that implements Interceptors will provide an instance of ORBInitializer. To use a service, an application would first call register_orb_initializer, passing in the service's ORBInitializer. After this is complete, the application would make an instantiating ORB_Init call. (An instantiating ORB_init call is one which produces a new ORB. In other words, one that is not passed the ID of an existing ORB.) This instantiating ORB_Init call calls each registered ORBInitializer. The returned ORB will contain any Interceptors that the given service requires.

register_orb_initializer is a global operation. An ORBInitializer registered at a given point in time will be called by all instantiating ORB_init calls that occur after that point in time. No ORB instantiated before that point in time will be affected by that ORBInitializer. Moreover, if register_orb_initializer is called from within an initializer, the initializer registered by that call will not be called for the ORB currently being initialized. That initializer will only be invoked on an ORB instantiated at a later time.

Actions taken:  Incorporate change close issue.
June 14, 2000: received issue

Issue 3742: resolution order (resolution to issue 3642)

Click here for this issue's archive.
Source: Object Oriented Concepts (Mr. Matthew Newhook, matthew@ooc.com)
Nature: Uncategorized Issue
Severity:
Summary: Due to the broken resolution to issue #3642 that this FTF previously adopted I now propose that the default resolution order presented on page 4-44 of the INS spec be modified from:

4.8.4.1 Default Resolution Order

The default order for processing a call to CORBA::ORB::resolve_initial_references for a given ObjectID is:

1. Resolve with -ORBInitRef for this ObjectID if possible
2. Resolve with an -ORBDefaultInitRef entry if possible
3. Resolve with a register_initial_reference entry if possible
4. Resolve with pre-configured ORB settings.

to one of two choices:

CHOICE A:

The default order for processing a call to CORBA::ORB::resolve_initial_references for a given ObjectID is:

1. Resolve with -ORBInitRef for this ObjectID if possible
2. Resolve with a register_initial_reference entry if possible
3. Resolve with pre-configured ORB settings.
4. Resolve with an -ORBDefaultInitRef entry if possible

OR:

CHOICE B:

1. Resolve with a register_initial_reference entry if possible
2. Resolve with -ORBInitRef for this ObjectID if possible
3. Resolve with pre-configured ORB settings.
4. Resolve with an -ORBDefaultInitRef entry if possible

Resolution:  Vote for A, B or NO CHANGE.
Revised Text:

Actions taken:  Incorporate change close issue. Note that this supercedes issue 3642. Note that choice B passed.
March 16, 2000: received issue

Issue X: Portable Interceptors viz-a-viz LOCATION_FORWARD_PERMANENT

Click here for this issue's archive.
Source: Sun Microsystems (Dr. Harold Carr, Ph.D., harold.carr@sun.com)
Nature: Uncategorized Issue
Severity:
Summary: LOCATION_FORWARD_PERMANENT was deprecated by the interop 2Kplus, issue 1486. It was included in vote 2: ftp://ftp.omg.org/pub/interop/interop2kplusvote2.htm The results are somewhere in: ftp://ftp.omg.org/pub/interop However, the portable interceptor specification ptc/2000-04-05 specifies a ForwardRequest exception with a boolean permanent field. This field and all references to it should be removed from the interceptor specification.
Resolution:  Vote YES to remove references to LOCATION_FORWARD_PERMANENT.
Revised Text: 21.3.12.10: remove

  PortableInterceptor::LOCATION_FORWARD_PERMANENT
from the list of possible values for reply_status.

Change the 3 bullet of the "On the client" section to:

Within the receive_other interception point, this attibute will be any
of:  SUCCESSFUL, LOCATION_FORWARD or TRANSPORT_RETRY.  SUCCESSFUL
means an asynchronous request returned successfully.  LOCATION_FORWARD
means that a reply came back with LOCATION_FORWARD as its status.
TRANSPORT_RETRY means that the transport mechanism indicated a retry -
a GIOP reply with a status of NEEDS_ADDRESSING_MODE, for instance.
Change the 3 bullet of the "On the server" section similarly.

Change 21.3.12.11 to:

If the reply_status attribute is LOCATION_FORWARD, then this attribute
will contain the object to which the request will be forwarded.  It is
indeterminate whether a forwarded request will actually occur.
Change 21.3.13 footnote 2 to:
If the reply_status attribute is not LOCATION_FORWARD, accessing this
attribute will raise BAD_INV_ORDER with a standard minor code of 10.
Change 21.3.13.2 to:
This attribute is the actual object on which the operation will be
invoked.  If the reply_status is LOCATION_FORWARD, then on subsequent
request, effective_target will contain the forwardIOR while target
will remain unchanged.
Change 21.3.14 footnote 2 same as 21.3.13 footnote 2.

Change 21.3.15 to:


exception ForwardRequest {
    Object forward;
};

The ForwardRequest exception is the means by which an Interceptor can
indicate to the ORB that a retry of the request should occur with the
new object given in the exception.  If an Interceptor raises a
ForwardRequest exception, no other Interceptors are called for that
interception point. The remaining Interceptors in the Flow Stack shall
have their appropriate ending interception point called: receive_other
on the client, or send_other on the server. The reply_status in the
receive_other or send_other would be LOCATION_FORWARD,
depending on the value of the permanent element of ForwardRequest.
Change the definition of ForwardRequest in 21.10 to:
exception ForwardRequest {
    Object forward;
};
and change the ReplyStatus values to:
    // Valid reply_status values:
    const ReplyStatus SUCCESSFUL = 0;
    const ReplyStatus SYSTEM_EXCEPTION = 1;
    const ReplyStatus USER_EXCEPTION = 2;
    const ReplyStatus LOCATION_FORWARD = 3;
    const ReplyStatus TRANSPORT_RETRY = 4;

Actions taken:  Incorporate change and close issue.
August 2, 2000: received issue

Issue XX: Exact text for IORInfo::get_effective_policy

Click here for this issue's archive.
Source: Sun Microsystems (Dr. Harold Carr, Ph.D., harold.carr@sun.com)
Nature: Uncategorized Issue
Severity:
Summary:
The summary of issue 3660 (IORInfo::get_effective_policy access
to POA policies ) says:

"The standard POA policies should be available via
IORInfo::get_effective_policy"

The resolution says:

Exact text to be determined as a new issue if this issue passes.

I think we could agree to add text (like that suggested by Bob) to say
policies passed to create_POA are available as an editorial part of
3660. 

This would result in text like the following:

-------------------------

An ORB service implementation may determine what server side policy of
a particular type is in effect for an IOR being constructed by calling
the get_effective_policy.  The returned CORBA::Policy object shall
only be a policy whose type was registered via
ORBInitInfo::register_policy_factory (see section 21.7.2.12,
register_policy_factory on page 21-43) AND policies defined in module
PortableServer.

If a policy for the given type was not registered via
register_policy_factory or is not defined in module PortableServer,
this operation will raise INV_POLICY with a standard minor code of 2.

-------------------------

It seems that no one wants the registration bits any longer.
And, in the process of looking at this, it was discovered that the
text does not say what happens when the given policy is not in effect.

Removing the bits about policy factory registration and adding the
policy not in effect bits seems to go beyond the scope of 3660.

The revised text below would remove the factory registration
requirement and specify what is returned when the given policy is not
in effect.

Resolution:  Incorporate change and close issue.
Revised Text:
An ORB service implementation may determine what server side policy of
a particular type is in effect for an IOR being constructed by calling
the get_effective_policy operation. When the IOR being constructed is
for an object implemented using a POA, all Policy objects passed to the
PortableServer::POA::create_POA call that created that POA are
accessable via get_effective_policy.

If a policy for the given type is not known to the ORB, then this
operation will raise INV_POLICY with a standard minor code of 2.

Parameters

type
       The CORBA::PolicyType specifying the type of policy to return.

Return Value

       The effective CORBA::Policy object of the requested type.

       If a policy for the given type is known but that policy is not in
       effect, then this operation will return a nil object reference.

Actions taken:  Incorporate change and close issue.
August 16, 2000: received issue