Hello COAS Team, See the attached email thread for a potential issue for the Finalization Task Force (FTF) that will be formed at the next OMG meeting. The COAS spec uses the kind of structure they talk about for the Observation Data type (I think that is the type it was used for but don't have the spec handy right now). I have uncovered a few other problems with the Observation Data type as well. I will explain them more after the FTF forms but here are some quick summaries: - It duplicates dyamic structuring functionality already standardized within the ORB (DynAny). This functionality was not implemented widely (since it was fairly new) 6 months ago but I have found it in many ORBS now. Why should we create a COAS specific capability that is already available inthe middleware? It was no - Out of three scenerios (observations with no structure, static structured observations, dynamic structured observations) it standardizes on the most expensive (dynamic structured). This does not allow as efficient implementation of structureless observations and it prevents using static structured observations at all. Using some alternatives would have little or no effect on dynamic structured observations. Besides as mentioned above the ORB can deal with dynamic structured data types via DynAny. The current structuring capability could still be specified as an option for those cases where DynAny is not available or where people have already implemented the spec but not be required. - It breaks interoperability in a number of ways. To implement statically structured observations you have to put them in the AtomicObservation which breaks the semantics of the standard observation structure. As you know interoperability is not a global phenomena, it occurs within a domain (e.g. a country or a specific healthcare institution). You can not use the ORBs static binding capabilites to do compile time checking of allowed observation types within an interoperability domain. - It prevents usage in certain environments. By requiring dynamic structuring ownly (which can be a major expense) certain applications that could use COAS but require minimized footprint would not be able to use it. - By COAS (an RM-ODP Computaional Viewpoint specification) dictating particular rules of structuring within the IDL (ObservationData) it is not as independent of the RM-ODP Information Viewpoint as it could be. A particular Information Viewpoint standard (e.i. HL7 RIM and/or Templates, or UK-NHS models or Brazil data models for Observations) could have structuring rules that don't fit into the COAS rules. This would require an explicit mapping that could be costly (run time issue), complicated (design time issue) or maybe impossible. For example a single atomic observation is allowed within a composite observation but some information models might allow multiple. First it is not clear if they would be allowed in the COAS model but if they were you would have to create an additional level (fake level) of composite observation to deal with them. I see a VERY small change in the spec that could be correct these and still provide the functionality of the current ObservationData type. I will discuss this on the FTF. Regards, Tim Brinson
-- BEGIN included message
- To: interop@omg.org, orbos@omg.org
- Subject: GIOP encoding of IR operations
- From: Lewis Stiller <stiller@franz.com>
- Date: Tue, 15 Jun 1999 20:10:21 -0700
This issue is very old and very well-known, but I did not to see it addressed explicitly in the latest 2.3 drafts: Consider: module ex {struct foo {sequence<foo> bar;};} Suppose S is an object reference for instance of type CORBA::StructDef representing the struct ex::foo. What is returned on-the-wire when the value of the members attribute for S is requested over IIOP? Specifically, how is the type member, which is of type TypeCode, for the StructMember corresponding to the bar member of ex::foo, marshalled? However this is supposed to be marshalled, I recommend an explanation in the CDR section, since right now it sounds like recursive typecodes not in a top-level typecode cannot be marshalled portably. I think this issue would come up even more often with ValueDef.
-- END included message
-- BEGIN included message
- To: Lewis Stiller <stiller@franz.com>
- Subject: Re: GIOP encoding of IR operations
- From: Jonathan Biggar <jon@floorboard.com>
- Date: Tue, 15 Jun 1999 22:14:38 -0700
- Cc: interop@omg.org, orbos@omg.org
- References: <199906160310.UAA11250@corba.franz.com>
- Sender: jon@floorboard.com
Lewis Stiller wrote: > > This issue is very old and very well-known, but I did not to see it > addressed explicitly in the latest 2.3 drafts: > > Consider: > > module ex {struct foo {sequence<foo> bar;};} > > Suppose S is an object reference for instance of type CORBA::StructDef > representing the struct ex::foo. > > What is returned on-the-wire when the value of the members attribute > for S is requested over IIOP? > > Specifically, how is the type member, which is of type TypeCode, for > the StructMember corresponding to the bar member of ex::foo, > marshalled? > > However this is supposed to be marshalled, I recommend an explanation > in the CDR section, since right now it sounds like recursive typecodes > not in a top-level typecode cannot be marshalled portably. > > I think this issue would come up even more often with ValueDef. Here is how I think it can be marshalled (structurally): (Level 1 TypeCode) kind: sequence length: 0 content_type: (Level 2 TypeCode) kind: struct id: "IDL:ex/foo:1.0" name: "foo" member_count: 1 member_name[0]: "bar"; member_type[0]: (Level 3 TypeCode indirect to Level 1) Now some may argue that CDR typecode indirection cannot occur here, and should only occur directly inside a sequence (or valuetype) typecode, but I see no such restriction in the standard. There are also a number of less compact ways of marshalling it, by unrolling the recursion as many times as you like. -- Jon Biggar Floorboard Software jon@floorboard.com jon@biggar.org
-- END included message
-- BEGIN included message
- To: Jonathan Biggar <jon@floorboard.com>
- Subject: Re: GIOP encoding of IR operations
- From: Michi Henning <michi@triodia.com>
- Date: Wed, 16 Jun 1999 16:33:21 +1000 (EST)
- Cc: Lewis Stiller <stiller@franz.com>, interop@omg.org, orbos@omg.org
- In-Reply-To: <376732BE.F6FACD90@floorboard.com>
- Organization: Triodia Technologies
On Tue, 15 Jun 1999, Jonathan Biggar wrote: > Here is how I think it can be marshalled (structurally): I agree, and we should nail this down. For the next revision, I hope to get rid of these silly anonymous types once and for all, so we won't have this and many other headaches anymore... Cheers, Michi. -- Michi Henning +61 7 3236 1633 Triodia Technologies +61 4 1118 2700 (mobile) PO Box 372 +61 7 3211 0047 (fax) Annerley 4103 michi@triodia.com AUSTRALIA http://www.triodia.com/staff/michi-henning.html
-- END included message
-- BEGIN included message
- To: Jonathan Biggar <jon@floorboard.com>, Michi Henning <michi@triodia.com>
- Subject: Re: GIOP encoding of IR operations
- From: Bill Janssen <janssen@parc.xerox.com>
- Date: Wed, 16 Jun 1999 00:03:38 PDT
- Cc: Lewis Stiller <stiller@franz.com>, interop@omg.org, orbos@omg.org
- In-Reply-To: <Pine.HPX.4.05.9906161632370.24123-100000@bobo.triodia.com>
- References: <Pine.HPX.4.05.9906161632370.24123-100000@bobo.triodia.com>
- Sender: Bill Janssen <janssen@parc.xerox.com>
Excerpts from local.omg: 15-Jun-99 Re: GIOP encoding of IR ope.. Michi Henning@triodia.co (598*) > I hope > to get rid of these silly anonymous types once and for all, so we won't > have this and many other headaches anymore... Hear, hear! Bill
-- END included message
-- BEGIN included message
- To: jon@floorboard.com (Jonathan Biggar)
- Subject: Re: GIOP encoding of IR operations
- From: jam@paragon-software.com
- Date: Wed, 16 Jun 1999 03:19:20 -0400 (EDT)
- Cc: stiller@franz.com, interop@omg.org, orbos@omg.org
- In-Reply-To: <376732BE.F6FACD90@floorboard.com> from "Jonathan Biggar" at Jun 15, 99 10:14:38 pm
- Reply-To: jam@camros.com
This brings up an related issue: Many vendors seem to have disagreements about what the indirection actually points to: does is it always indirect to a 4 byte boundry? The spec doesn't say anything directly other than that the indirection always points to the "tk_kind" value of the encoded type code (although there is a reference saying that the byte order of the referencecd type code can be determined by the tk_kind value at that location). I believe the indirection should always point to a four byte boundry, but it is simple enough to always round up. Some vendors think agree, others do not (and some products perform differently depending on the language binding & version used - no names mentioned). Some implementations throw a MARSHAL if the indireection is rounded, some throw if it is not (uh interoperability?). I'm sure this will become more of an issue once we start to get more OBV implementations, where indirections are used quite often and the spec has the same clarity problem. Maybe this should be clarified... -jeff > > Lewis Stiller wrote: > > > > This issue is very old and very well-known, but I did not to see it > > addressed explicitly in the latest 2.3 drafts: > > > > Consider: > > > > module ex {struct foo {sequence<foo> bar;};} > > > > Suppose S is an object reference for instance of type CORBA::StructDef > > representing the struct ex::foo. > > > > What is returned on-the-wire when the value of the members attribute > > for S is requested over IIOP? > > > > Specifically, how is the type member, which is of type TypeCode, for > > the StructMember corresponding to the bar member of ex::foo, > > marshalled? > > > > However this is supposed to be marshalled, I recommend an explanation > > in the CDR section, since right now it sounds like recursive typecodes > > not in a top-level typecode cannot be marshalled portably. > > > > I think this issue would come up even more often with ValueDef. > > Here is how I think it can be marshalled (structurally): > > (Level 1 TypeCode) > kind: sequence > length: 0 > content_type: (Level 2 TypeCode) > kind: struct > id: "IDL:ex/foo:1.0" > name: "foo" > member_count: 1 > member_name[0]: "bar"; > member_type[0]: (Level 3 TypeCode indirect to Level 1) > > Now some may argue that CDR typecode indirection cannot occur here, and > should only occur directly inside a sequence (or valuetype) typecode, > but I see no such restriction in the standard. > > There are also a number of less compact ways of marshalling it, by > unrolling the recursion as many times as you like. > > -- > Jon Biggar > Floorboard Software > jon@floorboard.com > jon@biggar.org >
-- END included message