Issue 5782: Missing operations on org.omg.CORBA.Object (java-rtf) Source: Oracle (Mr. Ken Cavanaugh, nobody) Nature: Uncategorized Issue Severity: Summary: While reviewing the latest CORBA 3.1 draft, I noticed that a number of methods recently added to CORBA::Object are missing from org.omg.CORBA.Object. The list of missing methods is: get_client_policy get_policy_overrides validate_connection get_component A group of related issues in the core RTF (core issues 3403/3772/3793/3322) are all centered on questions about access to ORB operations. The solution to this problem has converged on making the ORB available on every object reference. I am including this change in this issue as well. It turns out that the Java mapping requires updating 4 separate standard classes for every new method that is added to CORBA::Object. 2 of the 4 classes in the mapping already have an ORB accessor. The main change required to support access to the ORB is in the LocalObject implementation. I plan to include this issue in the next java-rtf vote. Please note the question inline below, and let me know if you have any strong opinions one way or the other. Resolution: Incorporate changes and close issue Revised Text: Clearly we need to map these operations into the Object interface. Note that LocalObject, org.omg.CORBA.portable.ObjectImpl, and org.omg.CORBA.portable.Delegate are also affected by these methods. In the case of get_orb, note that ObjectImpl and Delegate already have an ORB accessor method (_orb() and orb() respectively). For consistency with the rest of the mapping, we will map CORBA::Object.get_orb() to the java method orb.omg.CORBA.Object._get_orb(). This then makes the ORB available to all org.omg.CORBA.Object instances without needing to access the underlying ObjectImpl or LocalObject that implements the interface. We will also need to extend LocalObject with an additional constructor that allows setting of a private transient ORB data member. Note that all of these changes described for the spec must also be applied to the corresponding classes in the source file archive: org.omg.CORBA.Object org.omg.CORBA.LocalObject org.omg.CORBA.portable.ObjectImpl org.omg.CORBA.portable.Delegate Changes required: In section 1.19.11, add the following methods at the end of org.omg.CORBA.Object: Policy _get_client_policy( int type ) ; PolicyList _get_policy_overrides( int[] types ) ; boolean _validate_connection( PolicyListHolder inconsistent_policies ) ; org.omg.CORBA.Object _get_component() ; org.omg.CORBA.ORB _get_orb() ; In section 1.20.2.1, add the following data member at the start of the class: private transient org.omg.CORBA.ORB orb = null ; add the following constructor immediately following LocalObject(): public LocalObject( ORB orb ) { this.orb = orb ; } add the following methods at the end of LocalObject: public Policy _get_client_policy( int type ) { throw new NO_IMPLEMENT() ; } public PolicyList _get_policy_overrides( int[] types ) { throw new NO_IMPLEMENT() ; } public boolean _validate_connection( PolicyListHolder inconsistent_policies ) { throw new NO_IMPLEMENT() ; } public org.omg.CORBA.Object _get_component() { throw new NO_IMPLEMENT() ; } public ORB _get_orb() { if (orb == null) throw new OBJECT_NOT_EXIST( TBD, CompletionStatus.COMPLETED_NO ) ; return orb ; } where TBD is the standard OMG minor code signifying that no ORB is associated with the local object. In section 1.21.6.3, add the following methods at the end of org.omg.CORBA.portable.ObjectImpl: Policy _get_client_policy( int type ) { return _get_delegate().get_client_policy( type ) ; } PolicyList _get_policy_overrides( int[] types ) { return _get_delegate().getPolicy_overrides( types ) ; } boolean _validate_connection( PolicyListHolder inconsistent_policies ) { return _get_delegate().validate_connection( inconsistent_policies ) ; } org.omg.CORBA.Object _get_component() { return _get_delegate().get_component() ; } In section 1.21.7, add the following methods to abstract class Delegate after the set_policy_override method: public Policy _get_client_policy( int type ) { throw new NO_IMPLEMENT() ; } public PolicyList _get_policy_overrides( int[] types ) { throw new NO_IMPLEMENT() ; } public boolean _validate_connection( PolicyListHolder inconsistent_policies ) { throw new NO_IMPLEMENT() ; } public org.omg.CORBA.Object _get_component() { throw new NO_IMPLEMENT() ; } In the section titled "local interfaces" of section 1.12.1, add the following after item 3. in the numbered list: 4. The _<typename>LocalBase class has 2 public constructors defined as follows: public _<typename>LocalBase() { super() ; } public _<typename>LocalBase( ORB orb ) { super( orb ) ; } In the section titled "local interfaces" of section 1.12.1, replace the phrase "and an instance would be created using the usual Java language construct:" with: and an instance would be created using the usual Java language construct <typename>Impl ti = new <typename>Impl( ... ) ; The constructor(s) defined in <typename>Impl may pass an ORB parameter to the super class constructor using an explicit constructor invocation such as super( orb ). If this is done, the orb passed in the constructor is returned by the _get_orb() method on the local object instance. If the <typename>Impl() constructor is used, a call to _get_orb() will result in an OBJECT_NOT_EXIST exception with a standard minor code of TBD Actions taken: December 2, 2002: received issue April 28, 2003: closed issue Discussion: End of Annotations:===== Date: Mon, 2 Dec 2002 16:00:34 -0800 (PST) From: Ken Cavanaugh Reply-To: Ken Cavanaugh Subject: Missing operations on org.omg.CORBA.Object To: issues@omg.org, java-rtf@omg.org X-Mailer: dtmail 1.3.0 @(#)CDE Version 1.3.5 SunOS 5.7 sun4u sparc While reviewing the latest CORBA 3.1 draft, I noticed that a number of methods recently added to CORBA::Object are missing from org.omg.CORBA.Object. The list of missing methods is: get_client_policy get_policy_overrides validate_connection get_component A group of related issues in the core RTF (core issues 3403/3772/3793/3322) are all centered on questions about access to ORB operations. The solution to this problem has converged on making the ORB available on every object reference. I am including this change in this issue as well. It turns out that the Java mapping requires updating 4 separate standard classes for every new method that is added to CORBA::Object. 2 of the 4 classes in the mapping already have an ORB accessor. The main change required to support access to the ORB is in the LocalObject implementation. I plan to include this issue in the next java-rtf vote. Please note the question inline below, and let me know if you have any strong opinions one way or the other. Proposed resolution: Clearly we need to map these operations into the Object interface. Note that LocalObject, org.omg.CORBA.portable.ObjectImpl, and org.omg.CORBA.portable.Delegate are also affected by these methods. In the case of get_ORB, note that ObjectImpl and Delegate already have an ORB accessor method (_orb() and orb() respectively). I propose that the Java mapping of CORBA::Object.get_ORB() be the method orb.omg.CORBA.Object._orb(). This then makes the _orb method available to all org.omg.CORBA.Object instances without needing to access the underlying ObjectImpl or LocalObject that implements the interface. We will also need to extend LocalObject with an additional constructor that allows setting of a private transient ORB data member. Changes required: In section 1.19.11, add the following methods at the end of org.omg.CORBA.Object: Policy _get_client_policy( int type ) ; PolicyList _get_policy_overrides( int[] types ) ; boolean _validate_connection( PolicyListHolder inconsistent_policies ) ; org.omg.CORBA.Object _get_component() ; org.omg.CORBA.ORB _orb() ; In section 1.20.2.1, add the following data member at the start of the class: private transient org.omg.CORBA.ORB orb = null ; add the following constructor immediately following LocalObject(): public LocalObject( ORB orb ) { this.orb = orb ; } add the following methods at the end of LocalObject: public Policy _get_client_policy( int type ) { throw new NO_IMPLEMENT() ; } public PolicyList _get_policy_overrides( int[] types ) { throw new NO_IMPLEMENT() ; } public boolean _validate_connection( PolicyListHolder inconsistent_policies ) { throw new NO_IMPLEMENT() ; } public org.omg.CORBA.Object _get_component() { throw new NO_IMPLEMENT() ; } public ORB _orb() { if (orb == null) throw new OBJECT_NOT_EXIST( TBD, CompletionStatus.COMPLETED_NO ) ; return orb ; } where TBD is the standard OMG minor code signifying that no ORB is associated with the local object. (*** Note that there is no way to tell whether a local object has an ORB available without calling _orb(). If user code expects that this may sometimes fail, that code would need to explicitly handle the OBJECT_NOT_EXIST exception. Does this mapping also need a boolean _is_orb_available() method? I will assume not unless someone speaks up on this issue. ***) In section 1.21.6.3, add the following methods at the end of org.omg.CORBA.portable.ObjectImpl: Policy _get_client_policy( int type ) { return _get_delegate().get_client_policy( type ) ; } PolicyList _get_policy_overrides( int[] types ) { return _get_delegate().getPolicy_overrides( types ) ; } boolean _validate_connection( PolicyListHolder inconsistent_policies ) { return _get_delegate().validate_connection( inconsistent_policies ) ; } org.omg.CORBA.Object _get_component() { return _get_delegate().get_component() ; } In section 1.21.7, add the following methods to abstract class Delegate after the set_policy_override method: public Policy _get_client_policy( int type ) { throw new NO_IMPLEMENT() ; } public PolicyList _get_policy_overrides( int[] types ) { throw new NO_IMPLEMENT() ; } public boolean _validate_connection( PolicyListHolder inconsistent_policies ) { throw new NO_IMPLEMENT() ; } public org.omg.CORBA.Object _get_component() { throw new NO_IMPLEMENT() ; } In the section titled "local interfaces" of section 1.12.1, add the following after item 3. in the numbered list: 4. The _LocalBase class has 2 public constructors defined as follows: public _LocalBase() { super() ; } public _LocalBase( ORB orb ) { super( orb ) ; } In the section titled "local interfaces" of section 1.12.1, replace the phrase "and an instance would be created using the usual Java language construct:" with: and an instance would be created using the usual Java language construct" Impl ti = new Impl(...); The constructor(s) defined in Impl may pass an ORB parameter to the super class constructor using an explicit constructor invocation such as super( orb ). If this is done, the orb passed in the constructor is returned by the _orb() method on the local object instance. If the Impl() constructor is used, a call to _orb() will result in an OBJECT_NOT_EXIST exception with a standard minor code of TBD. The above changes must also be made to the Java interface standard .zip archive in classes: org.omg.CORBA.Object org.omg.CORBA.LocalObject org.omg.CORBA.portable.ObjectImpl org.omg.CORBA.portable.Delegate Ken. X-Sender: andyp@san-francisco.beasys.com X-Mailer: QUALCOMM Windows Eudora Version 5.0 Date: Fri, 06 Dec 2002 11:02:33 -0800 To: Jishnu Mukerji , CORBA Core RTF From: Andy Piper Subject: Re: CORBA Core RTF Vote 11 Announcement At 01:58 PM 12/6/2002 -0500, Jishnu Mukerji wrote: I am fine with get_orb instead of get_ORB. Unless someone has a major objection to this change, I can do this editorially. So if you have a serious problem with changing get_ORB to get_orb, please speak up before the vote ends, or hold your peace forever, etc.. Just for the record, in the java mapping org.omg.CORBA.portable.InputStream org.omg.CORBA.portable.OutputStream have "orb()" javax.rmi.CORBA.Stub (extends Object) has "_orb()" get_orb() seems consistent with other functions in Object although "orb()" would be more consistent with Object being defined in real IDL and having an "orb" attribute. An "ORB" attribute would presumably not be possible due to name conflicts. andy Date: Fri, 6 Dec 2002 11:21:52 -0800 (PST) From: Ken Cavanaugh Reply-To: Ken Cavanaugh Subject: Re: CORBA Core RTF Vote 11 Announcement To: jishnu@hp.com, corba-rtf@omg.org, andyp@bea.com Cc: java-rtf@omg.org X-Mailer: dtmail 1.3.0 @(#)CDE Version 1.3.5 SunOS 5.7 sun4u sparc >X-Sender: andyp@san-francisco.beasys.com >To: Jishnu Mukerji , CORBA Core RTF > >From: Andy Piper >Subject: Re: CORBA Core RTF Vote 11 Announcement >Mime-Version: 1.0 > >At 01:58 PM 12/6/2002 -0500, Jishnu Mukerji wrote: >>I am fine with get_orb instead of get_ORB. Unless someone has a >major >>objection to this change, I can do this editorially. So if you have >a >>serious problem with changing get_ORB to get_orb, please speak up >before >>the vote ends, or hold your peace forever, etc.. > >Just for the record, in the java mapping > >org.omg.CORBA.portable.InputStream >org.omg.CORBA.portable.OutputStream > >have "orb()" > >javax.rmi.CORBA.Stub (extends Object) > >has "_orb()" > and of course org.omg.CORBA.portable.ObjectImpl has _orb() and org.omg.CORBA.portable.Delegate has orb(). That's why my current proposal for this in the Java mapping has org.omg.CORBA.Object._orb() as the Java mapping for the PIDL CORBA::Object.get_orb() method. >get_orb() seems consistent with other functions in Object although "orb()" >would be more consistent with Object being defined in real IDL and having >an "orb" attribute. An "ORB" attribute would presumably not be possible due >to name conflicts. > Note that all methods on org.omg.CORBA.Object must start with an underscore (and not start with _get or _set) to avoid possible conflicts with IDL generated interfaces. I actually had not though of it before, but the following is legal IDL: interface foo { attribute int orb ; } which would generate int _get_orb() and _set_orb(int) methods. It seems that we cannot use either get_orb or _get_orb in the java mapping, and _orb is the best choice. Ken. X-Sender: andyp@san-francisco.beasys.com X-Mailer: QUALCOMM Windows Eudora Version 5.0 Date: Fri, 06 Dec 2002 11:37:17 -0800 To: Ken Cavanaugh , jishnu@hp.com, corba-rtf@omg.org From: Andy Piper Subject: Re: CORBA Core RTF Vote 11 Announcement Cc: java-rtf@omg.org At 11:21 AM 12/6/2002 -0800, Ken Cavanaugh wrote: we cannot use either get_orb or _get_orb in the java mapping, and _orb is the best choice. I agree. I would still argue that get_orb() in the PIDL is marginally more consistent with things there already. andy Issue 5782: Missing methods on org.omg.CORBA.Object ------------------------------------------------------------------------------------------- While reviewing the latest CORBA 3.1 draft, I noticed that a number of methods recently added to CORBA::Object are missing from org.omg.CORBA.Object. The list of missing methods is: get_client_policy get_policy_overrides validate_connection get_component A group of related issues in the core RTF (core issues 3403/3772/3793/3322) are all centered on questions about access to ORB operations. The solution to this problem has converged on making the ORB available on every object reference. I am including this change in this issue as well. It turns out that the Java mapping requires updating 4 separate standard classes for every new method that is added to CORBA::Object. 2 of the 4 classes in the mapping already have an ORB accessor. The main change required to support access to the ORB is in the LocalObject implementation. I plan to include this issue in the next java-rtf vote. Please note the question inline below, and let me know if you have any strong opinions one way or the other. Proposed resolution (from Ken Cavanaugh): Clearly we need to map these operations into the Object interface. Note that LocalObject, org.omg.CORBA.portable.ObjectImpl, and org.omg.CORBA.portable.Delegate are also affected by these methods. In the case of get_orb, note that ObjectImpl and Delegate already have an ORB accessor method (_orb() and orb() respectively). For consistency with the rest of the mapping, we will map CORBA::Object.get_orb() to the java method orb.omg.CORBA.Object._get_orb(). This then makes the ORB available to all org.omg.CORBA.Object instances without needing to access the underlying ObjectImpl or LocalObject that implements the interface. We will also need to extend LocalObject with an additional constructor that allows setting of a private transient ORB data member. Changes required: In section 1.19.11, add the following methods at the end of org.omg.CORBA.Object: Policy _get_client_policy( int type ) ; PolicyList _get_policy_overrides( int[] types ) ; boolean _validate_connection( PolicyListHolder inconsistent_policies ) ; org.omg.CORBA.Object _get_component() ; org.omg.CORBA.ORB _get_orb() ; In section 1.20.2.1, add the following data member at the start of the class: private transient org.omg.CORBA.ORB orb = null ; add the following constructor immediately following LocalObject(): public LocalObject( ORB orb ) { this.orb = orb ; } add the following methods at the end of LocalObject: public Policy _get_client_policy( int type ) { throw new NO_IMPLEMENT() ; } public PolicyList _get_policy_overrides( int[] types ) { throw new NO_IMPLEMENT() ; } public boolean _validate_connection( PolicyListHolder inconsistent_policies ) { throw new NO_IMPLEMENT() ; } public org.omg.CORBA.Object _get_component() { throw new NO_IMPLEMENT() ; } public ORB _get_orb() { if (orb == null) throw new OBJECT_NOT_EXIST( TBD, CompletionStatus.COMPLETED_NO ) ; return orb ; } where TBD is the standard OMG minor code signifying that no ORB is associated with the local object. In section 1.21.6.3, add the following methods at the end of org.omg.CORBA.portable.ObjectImpl: Policy _get_client_policy( int type ) { return _get_delegate().get_client_policy( type ) ; } PolicyList _get_policy_overrides( int[] types ) { return _get_delegate().getPolicy_overrides( types ) ; } boolean _validate_connection( PolicyListHolder inconsistent_policies ) { return _get_delegate().validate_connection( inconsistent_policies ) ; } org.omg.CORBA.Object _get_component() { return _get_delegate().get_component() ; } org.omg.CORBA.ORB _get_orb() { return _orb() ; } In section 1.21.7, add the following methods to abstract class Delegate after the set_policy_override method: public Policy _get_client_policy( int type ) { throw new NO_IMPLEMENT() ; } public PolicyList _get_policy_overrides( int[] types ) { throw new NO_IMPLEMENT() ; } public boolean _validate_connection( PolicyListHolder inconsistent_policies ) { throw new NO_IMPLEMENT() ; } public org.omg.CORBA.Object _get_component() { throw new NO_IMPLEMENT() ; } In the section titled "local interfaces" of section 1.12.1, add the following after item 3. in the numbered list: 4. The _LocalBase class has 2 public constructors defined as follows: public _LocalBase() { super() ; } public _LocalBase( ORB orb ) { super( orb ) ; } In the section titled "local interfaces" of section 1.12.1, replace the phrase "and an instance would be created using the usual Java language construct:" with: "and an instance would be created using the usual Java language construct Impl ti = new Impl(...); The constructor(s) defined in Impl may pass an ORB parameter to the super class constructor using an explicit constructor invocation such as super( orb ). If this is done, the orb passed in the constructor is returned by the _get_orb() method on the local object instance. If the Impl() constructor is used, a call to _get_orb() will result in an OBJECT_NOT_EXIST exception with a standard minor code of TBD." The above changes must also be made to the Java interface standard .zip archive in classes: org.omg.CORBA.Object org.omg.CORBA.LocalObject org.omg.CORBA.portable.ObjectImpl org.omg.CORBA.portable.Delegate X-Sender: giddiv@postel X-Mailer: QUALCOMM Windows Eudora Version 5.1 Date: Thu, 02 Jan 2003 18:16:35 -0500 To: Ken Cavanaugh From: Victor Giddings Subject: Re: Results of Vote 5 and the end of this RTF Cc: java-rtf@omg.org At 10:45 AM 12/18/2002 -0800, Ken Cavanaugh wrote: Here are the results from vote 5: 2889 3633 3995 4010 5696 5728 5782 5783 BEA Y Y Y Y Y Y Y Y Sun Y Y Y Y Y Y Y Y Fujitsu Y Y Y Y Y Y Y Y HP Y Y Y Y Y Y Y Y 2AB Y Y Y Y Y Y Y Y Oracle A A A A A A A A IBM Y Y Y N Y Y Y Y Iona Y Y Y Y Y Y Y Y Borland A A A A A A A A OIS NV NV NV NV NV NV NV NV 4010: 6Y, 1N, 2A, 1NV passed all others: 7Y, 0N, 2A, 1NV passed This is the last vote of this RTF. We have resolved all but the 2 issues that I discussed last week. I will be preparing the spec, RTF report, and updated java archive for submission before 1/6/03. I am also on vacation starting tommorrow until 1/6/03. I will be attending the Burlingame meeting. I will also plan on rechartering the Java RTF at the PTC meeting, with a similar schedule to the one we are just completing. Unless I here otherwise, I will assume that all current Java RTF members will continue on to the next RTF. Of course, there is no hurry on this, but please let me know of any changes in representation on this RTF by 1/25/03 if possible. Thanks, Ken. Sorry I missed this vote. I had a death in the family. There are some minor problems with the stated resolution to 5782 that become apparent when trying to compile them. I don't think these should require a re-vote of this issue, but I think the final report should reflect the following changes. However, I bow to the greater common wisdom of the group: Changes required: In section 1.19.11, add the following methods at the end of org.omg.CORBA.Object: Policy _get_client_policy( int type ) ; PolicyList _get_policy_overrides( int[] types ) ; Policy[] _get_policy_overrides( int[] types ) ; boolean _validate_connection( PolicyListHolder inconsistent_policies ) ; org.omg.CORBA.Object _get_component() ; org.omg.CORBA.ORB _get_orb() ; In section 1.20.2.1, add the following data member at the start of the class: private transient org.omg.CORBA.ORB orb = null ; add the following constructor immediately following LocalObject(): public LocalObject( ORB orb ) { this.orb = orb ; } add the following methods at the end of LocalObject: public Policy _get_client_policy( int type ) { throw new NO_IMPLEMENT() ; } public PolicyList _get_policy_overrides( int[] types ) public Policy[] _get_policy_overrides( int[] types ) { throw new NO_IMPLEMENT() ; } public boolean _validate_connection( PolicyListHolder inconsistent_policies ) { throw new NO_IMPLEMENT() ; } public org.omg.CORBA.Object _get_component() { throw new NO_IMPLEMENT() ; } public ORB _get_orb() { if (orb == null) throw new OBJECT_NOT_EXIST( TBD, CompletionStatus.COMPLETED_NO ) ; return orb ; } where TBD is the standard OMG minor code signifying that no ORB is associated with the local object. In section 1.21.6.3, add the following methods at the end of org.omg.CORBA.portable.ObjectImpl: add imports: org.omg.CORBA.Policy org.omg.CORBA.PolicyListHolder Policy _get_client_policy( int type ) { return _get_delegate().get_client_policy( type ) ; return _get_delegate()._get_client_policy( type ) ; } PolicyList _get_policy_overrides( int[] types ) { return _get_delegate().getPolicy_overrides( types ) ; return _get_delegate()._get_policy_overrides( types ) ; } boolean _validate_connection( PolicyListHolder inconsistent_policies ) { return _get_delegate().validate_connection( inconsistent_policies ) ; return _get_delegate()._validate_connection( inconsistent_policies ) ; } org.omg.CORBA.Object _get_component() { return _get_delegate().get_component() ; return _get_delegate()._get_component() ; } org.omg.CORBA.ORB _get_orb() { return _orb() ; } Also, shouldn't all of these be public? In section 1.21.7, add the following methods to abstract class Delegate after the set_policy_override method: add imports: org.omg.CORBA.Policy org.omg.CORBA.PolicyListHolder public Policy _get_client_policy( int type ) { throw new NO_IMPLEMENT() ; } public PolicyList _get_policy_overrides( int[] types ) { throw new NO_IMPLEMENT() ; } public boolean _validate_connection( PolicyListHolder inconsistent_policies ) { throw new NO_IMPLEMENT() ; } public org.omg.CORBA.Object _get_component() { throw new NO_IMPLEMENT() ; } Victor Giddings mailto:victor.giddings@ois.com Senior Product Engineer +1 703 295 6500 Objective Interface Systems Fax: +1 703 295 6501 X-Sender: giddiv@postel X-Mailer: QUALCOMM Windows Eudora Version 5.1 Date: Fri, 03 Jan 2003 12:01:29 -0500 To: Ken Cavanaugh From: Victor Giddings Subject: Re: Results of Vote 5 and the end of this RTF Cc: java-rtf@omg.org on further reflection, it seems that the Delegate interface methods need the Object as a parameter. It is also inconsistent for the new operations to start with '_'. Additional changes reflected below At 06:16 PM 1/2/2003 -0500, Victor Giddings wrote: At 10:45 AM 12/18/2002 -0800, Ken Cavanaugh wrote: Here are the results from vote 5: [...] Sorry I missed this vote. I had a death in the family. There are some minor problems with the stated resolution to 5782 that become apparent when trying to compile them. I don't think these should require a re-vote of this issue, but I think the final report should reflect the following changes. However, I bow to the greater common wisdom of the group: Changes required: In section 1.19.11, add the following methods at the end of org.omg.CORBA.Object: Policy _get_client_policy( int type ) ; PolicyList _get_policy_overrides( int[] types ) ; Policy[] _get_policy_overrides( int[] types ) ; boolean _validate_connection( PolicyListHolder inconsistent_policies ) ; org.omg.CORBA.Object _get_component() ; org.omg.CORBA.ORB _get_orb() ; In section 1.20.2.1, add the following data member at the start of the class: private transient org.omg.CORBA.ORB orb = null ; add the following constructor immediately following LocalObject(): public LocalObject( ORB orb ) { this.orb = orb ; } add the following methods at the end of LocalObject: public Policy _get_client_policy( int type ) { throw new NO_IMPLEMENT() ; } public PolicyList _get_policy_overrides( int[] types ) public Policy[] _get_policy_overrides( int[] types ) { throw new NO_IMPLEMENT() ; } public boolean _validate_connection( PolicyListHolder inconsistent_policies ) { throw new NO_IMPLEMENT() ; } public org.omg.CORBA.Object _get_component() { throw new NO_IMPLEMENT() ; } public ORB _get_orb() { if (orb == null) throw new OBJECT_NOT_EXIST( TBD, CompletionStatus.COMPLETED_NO ) ; return orb ; } where TBD is the standard OMG minor code signifying that no ORB is associated with the local object. In section 1.21.6.3, add the following methods at the end of org.omg.CORBA.portable.ObjectImpl: add imports: org.omg.CORBA.Policy org.omg.CORBA.PolicyListHolder Policy _get_client_policy( int type ) { return _get_delegate().get_client_policy( type ) ; return _get_delegate()._get_client_policy( type ) ; return _get_delegate().get_client_policy(this, type ) ; } PolicyList _get_policy_overrides( int[] types ) { return _get_delegate().getPolicy_overrides( types ) ; return _get_delegate()._get_policy_overrides( types ) ; return _get_delegate().getPolicy_overrides(this, types ) ; } boolean _validate_connection( PolicyListHolder inconsistent_policies ) { return _get_delegate().validate_connection( inconsistent_policies ) ; return _get_delegate()._validate_connection( inconsistent_policies ) ; return _get_delegate().validate_connection(this, inconsistent_policies ) ; } org.omg.CORBA.Object _get_component() { return _get_delegate().get_component() ; return _get_delegate()._get_component() ; return _get_delegate().get_component(this) ; } org.omg.CORBA.ORB _get_orb() { return _orb() ; } Also, shouldn't all of these be public? In section 1.21.7, add the following methods to abstract class Delegate after the set_policy_override method: add imports: org.omg.CORBA.Policy org.omg.CORBA.PolicyListHolder public Policy _get_client_policy( int type ) public Policy get_client_policy(org.omg.Object self, int type ) { throw new NO_IMPLEMENT() ; } public PolicyList _get_policy_overrides( int[] types ) public PolicyList get_policy_overrides(org.omg.Object self, int[] types ) { throw new NO_IMPLEMENT() ; } public boolean _validate_connection( PolicyListHolder inconsistent_policies ) public boolean validate_connection(org.omg.Object self, PolicyListHolder inconsistent_policies ) { throw new NO_IMPLEMENT() ; } public org.omg.CORBA.Object _get_component() public org.omg.CORBA.Object get_component(org.omg.Object self) { throw new NO_IMPLEMENT() ; } Victor Giddings mailto:victor.giddings@ois.com Senior Product Engineer +1 703 295 6500 Objective Interface Systems Fax: +1 703 295 6501